-
Вторая форма должна "почти" все время показываться, поэтому ее регшено не уничтожать при закрытии. В случае случайного закрытия пользователем (для просмотра раб. стола, других потребностей и т. д.) ее "показ"/активация сделана из нескольких мест приложения, поэтому данное действо выделено в отдельную процедуру:
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
-
Попробуй поменяй SForm.Form.Show; на SForm.Show;
-
Вместо закрытия форму нужно скрывать: procedure TForm2.KOLFormClose(Sender: PObj; var Accept: Boolean);
begin
Accept := False;
Form.Hide;
end;
-
> Попробуй поменяй SForm.Form.Show; на SForm.Show;
> Вместо закрытия форму нужно скрывать:
не помогло
-
Проверил на Win2K Server, ситуация аналогична. Сделал пустой проект и тоже проверил - ситуация аналогична.
-
Код показывай.
-
> Код показывай.
Пустой проект, две кол-формы(не автосоздаваемые) и на главной форме одна кнопка с кодом:
procedure TForm1.Button1Click(Sender: PObj);
begin
if Form2=nil then begin
NewForm2(Form2,Applet);
if Form2=nil then exit;
end;
Form2.Form.Show;
end;
При первом нажатии форма нормально показывается, при втором не показывается вообще, вышеприведенные советы на процесс не влияют.
-
Дмитрий К. Извиняюсь, не на той форме Hide прописал, все заработал, сча с основным проектом буду разбираться, спасибо, за помощь.
-
другая загвоздка, кол 3.14х, стандартный мск-проект. Создаются вторичные формы динамически, то временем, много с кучей контролов. Код громоздк. При закрытии что accept = true, что false - ресурсы не освобождаются. Некоторые контролы создаются своим кодом, в основном панели из пакета GRush. Как сказано в документации в autofree добавлять не надо, ибо сами должны уничтожаться. Такой же код генерирует и мск. Возможные утечки проверил, вроде всё чисто. Но освобождается память только таким кодом:
procedure Tfrm.KOLForm1Close (bla-bla-bla); begin Accept := false; Уничтожаем по списку Plist динамические контролы aka FreeObj; Form.Free; end;
И то не вся. Это как минимум ненормально. В ранних версиях этого не наблюдалось, память чистилась нормально. Что за нафиг такой? Код адекватней привести не могу, так как не с пк пишу. Возможен ли косяк в самой библиотеке на моментах автодеструкторов? Где хоть концы рыть? Не хочется чтобы тратились десятки а то и сотни метров памяти впустую.
-
Забыл добавить, что при accept = true не вызывается событие OnDestroy, при уничтожении же формы Form.Free вызывается.
|