Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.10;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.027 c
3-1094794847
stone
2004-09-10 09:40
2004.10.10
Даты в Access


14-1094669161
olookin
2004-09-08 22:46
2004.10.10
We are living in Amerika - Rammstein


8-1089992678
^FH^
2004-07-16 19:44
2004.10.10
размер файла JPEG


4-1094214152
Falcon
2004-09-03 16:22
2004.10.10
Как узнать какое окно в системе в текущий момент имеет ввод?


14-1095931679
Petr V. Abramov
2004-09-23 13:27
2004.10.10
Кафе "Бульварное" снова открылось