Конференция "KOL" » Повторный запуск Form.Show
 
  • Santa (26.07.11 11:27) [0]
    Вторая форма должна "почти" все время показываться, поэтому ее регшено не уничтожать при закрытии. В случае случайного закрытия пользователем (для просмотра раб. стола, других потребностей и т. д.) ее "показ"/активация сделана из нескольких мест приложения, поэтому данное действо выделено в отдельную процедуру:

     if SForm=nil then begin
       NewFormSpis(SForm,Applet);
       if SForm=nil then exit;
     end;
     SForm.Form.Show;



    Если происходит создание формы, то проблем с отображением формы нет, а вот если форма уже была закрыта, то показ формы не происходит, хотя если в данном месте сделать проверку, то свойство Visible устанавливается в true. В чем может быть загвоздка?

    P. S. Delphi 7, Windows XP, версия библиотеки от 26.06.2011
  • AndreyRus © (26.07.11 11:51) [1]
    Попробуй поменяй SForm.Form.Show; на  SForm.Show;
  • Дмитрий К © (26.07.11 12:29) [2]
    Вместо закрытия форму нужно скрывать:
    procedure TForm2.KOLFormClose(Sender: PObj; var Accept: Boolean);
    begin
     Accept := False;
     Form.Hide;
    end;

  • Santa (26.07.11 12:35) [3]

    > Попробуй поменяй SForm.Form.Show; на  SForm.Show;



    > Вместо закрытия форму нужно скрывать:

    не помогло
  • Santa (26.07.11 12:41) [4]
    Проверил на Win2K Server, ситуация аналогична.
    Сделал пустой проект и тоже проверил - ситуация аналогична.
  • Дмитрий К © (26.07.11 12:51) [5]
    Код показывай.
  • Santa (26.07.11 12:56) [6]

    > Код показывай.

    Пустой проект, две кол-формы(не автосоздаваемые) и на главной форме одна кнопка с кодом:

    procedure TForm1.Button1Click(Sender: PObj);
    begin
     if Form2=nil then begin
       NewForm2(Form2,Applet);
       if Form2=nil then exit;
     end;
     Form2.Form.Show;
    end;


    При первом нажатии форма нормально показывается, при втором не показывается вообще, вышеприведенные советы на процесс не влияют.
  • Santa (26.07.11 13:00) [7]
    Дмитрий К.
    Извиняюсь, не на той форме Hide прописал, все заработал, сча с основным проектом буду разбираться, спасибо, за помощь.
  • rdnks (28.07.11 04:21) [8]
    другая загвоздка, кол 3.14х, стандартный мск-проект. Создаются вторичные формы динамически, то временем, много с кучей контролов. Код громоздк. При закрытии что accept = true, что false - ресурсы не освобождаются. Некоторые контролы создаются своим кодом, в основном панели из пакета GRush. Как сказано в документации в autofree добавлять не надо, ибо сами должны уничтожаться. Такой же код генерирует и мск. Возможные утечки проверил, вроде всё чисто. Но освобождается память только таким кодом:

    procedure Tfrm.KOLForm1Close (bla-bla-bla);
    begin
    Accept := false;
    Уничтожаем по списку Plist динамические контролы aka FreeObj;
    Form.Free;
    end;

    И то не вся.
    Это как минимум ненормально. В ранних версиях этого не наблюдалось, память чистилась нормально. Что за нафиг такой? Код адекватней привести не могу, так как не с пк пишу. Возможен ли косяк в самой библиотеке на моментах автодеструкторов? Где хоть концы рыть? Не хочется чтобы тратились десятки а то и сотни метров памяти впустую.
  • rdnks (28.07.11 16:10) [9]
    Забыл добавить, что при accept = true не вызывается событие OnDestroy, при уничтожении же формы Form.Free вызывается.
 
Конференция "KOL" » Повторный запуск Form.Show
Есть новые Нет новых   [134430   +3][b:0][p:0.001]