AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Beim Beenden alle MDIChilds schließen
Thema durchsuchen
Ansicht
Themen-Optionen

Beim Beenden alle MDIChilds schließen

Ein Thema von Blechwolf · begonnen am 22. Sep 2003 · letzter Beitrag vom 29. Sep 2003
 
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.124 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Beim Beenden alle MDIChilds schließen

  Alt 26. Sep 2003, 16:39
Moin DSeven,

Zitat von DSeven:
Das Haupformular muss diese nicht beenden. Wieso denn auch wenn diese sich beim beeden des Hauptformulars sowieso selber schließen.
Ganz einfach, weil das Schliessen des Hauptformulares bei Blechwolfs Programm davon abhängig ist, dass alle MDIChildren geschlossen wurden. Damit bleiben alle Fenster offen:
Die MDIChildren werden automatisch geschlossen, wenn sich das Hauptformular schliesst, dieses darf sich aber erst schliessen, wenn alle MDIChildren geschlossen sind.
Da nun aber beim Druck auf X zum Beenden des Programmes erst einmal alle vorhandenen OnCloseQuery Prozeduren abgearbeitet werden, und anschliessend erst die OnClose Prozeduren, würde das Hauptformular sich nicht schliessen, da dessen OnCloseQuery Prozedur aufgerufen wird, bevor die OnClose Prozeduren der MDIChildren aufgerufen wurden, wodurch der Zähler MDIChildCount nicht gleich 0 ist.

In einem Punkt hast Du allerdings Recht: Man muss im OnClose der MDIChildren self.Free verwenden statt Action := caFree, da letzteres, aus irgendeinem Grunde, nicht die gewünschte Wirkung hat. Man behält als MDIChildCount immer 1 übrig.

Wenn man nun also die Abfrage und das Schliessen der MDIChildren in das OnCloseQuery des Hauptformulares legt

Delphi-Quellcode:
procedure TfrmMAIN.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
var
   i : integer;
begin
   for i := MDIChildCount-1 downto 0 do begin
     if MessageDlg(MDIChildren[i].Caption+' - Data will be lost.'+#10+'Continue ?',
                            mtConfirmation,
                    [mbYes,mbNo],0) = mrYes then begin
       MDIChildren[i].Close;
     end;
   end;
  if self.MDIChildCount = 0 then
     CanClose := true
  else
     CanClose := false;
end;
und in das OnClose eines jeden MDI-Formulares

Delphi-Quellcode:
procedure TMDIChild.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  self.free;
end;
sollte es wie gewünscht funktionieren.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:48 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz