Jak zamknąć po kolei okienka w aplikacji mdi?

0

witam
chodzi mi o to że mam aplikacje mdi z otwartymi tworzoymi okienkami i teraz aplikacja w chwili zamknięcia formy głównej ma po kolei zamykać te okienka wyświetlając uprzednio do każdego pytanie
czy zapisać zmiany

wiem jak sie zamyka z pytaniem ale jest mały problem , gdy anuluje wyłączenie jakiegoś okienka
żadne okienko nie zostaje zamknięte , nawet te w których zamknięcie zatwierdziłem (dziwne bo przy ręcznym zamykaniu wszystko działa) jak temu zaradzić ?

podaje kod do wglądu(dziecka) :

procedure TForm2.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
 case application.MessageBox(Pchar('Czy chcesz zapisać zmiany w Pliku:  '+#10+Caption),'Zamykanie pliku',51)  of
 IdYes : begin
Mainform.Zapisz.click;
end;
IDCancel : begin
CanClose:=False;
Abort;
end;
IdNo: begin
CanClose:=true;


end;
end;
end;

proszę o podpowiedz:)

0

jeszcze ten kawałek :)

procedure TRysForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:=Cafree;
end;
0

Po pierwsze musisz wywoływać w pętli zamykanie okien MDI.
(forma ma właściwość - ilość dzieci, a także referencje do każdego z nich w tablicy chyba MDIChild).

Następnie proponowałbym, żeby każde z dzieci mdi odwoływało się do formy głównej w taki sposób, że na formie głównej masz właściwość, bądź zmienną o nazwie np: "AllowClose".
I teraz jeśli któreś z dzieci MDI nie zostało zamknięte, ustawiasz tam AllowClose na false(oczywiście odwołanie do formy głównej).

W formie głównej może to wyglądać np. tak(CloseQuery)

for i:=0 to MDIChildCount-1 do    //zakładam, że to ilość dzieci MDI, bo nie pamiętam po prostu
begin
  MDIChild[i].Close;
  if not AllowClose then
  begin
    CanClose:=false;
    break;
  end;
end;

Myślę, że takie coś powinno załatwić sprawę.

1 użytkowników online, w tym zalogowanych: 0, gości: 1