![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
MDI-интерфейс: проблемы с закрытием дочерних форм.
Charly22 © (2004-09-25 22:02:00)Здравствуйте!
У меня приложение устроено так, что его работа актуальна только тогда, когда открыто 4 дочерние формы. Хочется, чтобы при нажатии на крестик у одной из дочерних форм закрылись все формы.
Я пишу такой код:
procedure TChForm.FormClose(Sender: TObject; var Action: TCloseAction);
var
i: integer;
begin
for i := MDIChildCount-1 downto 0 do
Action := caFree;
end;
Закрытия формы при этом не происходит, она минимизируется, причем только она одна.
Как мне решить данную проблему, подскажите, плз.!
Sergey_Masloff (2004-09-25 23:31:00) [1]А если вообще все вместе с главным то
PostMessage(Application.Handle,WM_CLOSE,0,0);
Sergey_Masloff (2004-09-25 23:21:00) [2]тогда уж
PostMessage(Application.MainForm.Handle,WM_KILLCHILDREN,0,0);
а там уж
procedure OnKillChilds(var Msg : TMessage); message WM_KILLCHILDREN;
begin
for i := Pred(MDIChildCount) to 0 do
MDIChildren[i].Free();
end;
jack128 (2004-09-25 23:07:00) [3]Charly22 (25.09.04 22:28) [4]
код написан на колеНке
jack128 (2004-09-25 23:06:00) [4]Charly22 (25.09.04 22:28) [4]
За что спасибо - код написан на колеке и глюками полон, как дворняга вшами!!!! Найдешь эти (ну по крайней мере один глюк) глюки - молодец, не найдешь - так те и надо ;-)
Charly22 (2004-09-25 22:28:00) [5]Спасибо Большое!!
jack128 (2004-09-25 22:20:00) [6]jack128 © (25.09.04 22:17) [2]
Хм.. Только тут ще нужно глобальный флаг выставить, что бсконечной реккурсии не вышло..
procedure TChForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if AllMDIChildrenDestoyingFlag then
Exit;
AllMDIChildrenDestoyingFlag := True;
try
with Application.MainForm do
while MDIChildCount > 1 do
if MDIChildren[0] <> Self then MDIChilren[0].Free;
Action := caFree;
finally
AllMDIChildrenDestoyingFlag := False;
end;
end;
jack128 (2004-09-25 22:17:00) [7]
procedure TChForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
with Application.MainForm do
while MDIChildCount > 1 do
if MDIChildren[0] <> Self then MDIChilren[0].Free;
Action := caFree;
end;
Sergey_Masloff (2004-09-25 22:16:00) [8]Ну ты MDIChildCount раз присваиваешь одной переменной одно и то же значение. Таки чего ты хочешь от бедного коппилятора?