Форум: "Основная";
Текущий архив: 2004.10.10;
Скачать: [xml.tar.bz2];
Вниз
MDI-интерфейс: проблемы с закрытием дочерних форм. Найти похожие ветки
← →
Charly22 (2004-09-25 22:02) [0]Здравствуйте!
У меня приложение устроено так, что его работа актуальна только тогда, когда открыто 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 22:16) [1]Ну ты MDIChildCount раз присваиваешь одной переменной одно и то же значение. Таки чего ты хочешь от бедного коппилятора?
← →
jack128 © (2004-09-25 22:17) [2]
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;
← →
jack128 © (2004-09-25 22:20) [3]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;
← →
Charly22 (2004-09-25 22:28) [4]Спасибо Большое!!
← →
jack128 © (2004-09-25 23:06) [5]Charly22 (25.09.04 22:28) [4]
За что спасибо - код написан на колеке и глюками полон, как дворняга вшами!!!! Найдешь эти (ну по крайней мере один глюк) глюки - молодец, не найдешь - так те и надо ;-)
← →
jack128 © (2004-09-25 23:07) [6]Charly22 (25.09.04 22:28) [4]
код написан на колеНке
← →
Sergey_Masloff (2004-09-25 23:21) [7]тогда уж
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;
← →
Sergey_Masloff (2004-09-25 23:31) [8]А если вообще все вместе с главным то
PostMessage(Application.Handle,WM_CLOSE,0,0);
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.10.10;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.073 c