Schließen von Fenstern
Hallo,
in meinem Programm benutze ich recht viele Fenster vom Typ "fsMDIChild", wenn ich eine neue Datei erstellen will, möchte ich, dass alle Aktiven Fenster mit dem Befehl "destroy" zerstört werden und dann erst wieder bei Bedarf erzeugt werden. Wenn aber ein Fenster bereits zerstört wurde und ich den Befehl dann nochmal ausführe kommt es zu einem Fehler und das Programm hängt sich auf. Bisher löse ich das mit Variablen, die ich immer auf True setze wenn ich ein Fenster erzeuge und False wenn ich es schließe, nur sieht mir das zu blöd aus und bei dem immer Länger werdenen Code schleichen sich immer mehr Fehler ein.. ich hatte es mit der Abfrage: If Form2.active Then form2.destroy probiert, da ich dachte, dass active bedeutet, dass Form2 created wurde, aber leider funktioniert es so nicht. Einer eine Idee wie es geht ohne immer Variablen mitzuschleppen? Danke schon mal jetzt! |
Re: Schließen von Fenstern
Wie wär's mit
Delphi-Quellcode:
if Assigned(Form2) then begin
Form2.Close; FreeAndNil(Form2); end; |
Re: Schließen von Fenstern
Vielen Dank, man lernt immer wieder gerne....
solche blöden fragen will ich eigentlich gar nicht stellen, aber hier an der Uni haben sie nur Delphi2007 (selber habe mal früher mit Delphi 4.0 gearbeitet) und die haben die Hilfedateien stark verändert.... man findet nichts mehr (jedenfalls ich :-D ) Hat super geklapt!!!! |
Re: Schließen von Fenstern
Noch ein Tipp: Wenn du das MDI Fenstermodell in Verbindung mit einer ActionList verwendest, dann passt eine Action WindowCloseAll ganz gut ins Bild:
Delphi-Quellcode:
Freundliche Grüße
procedure TMainForm.WindowCloseAllActionExecute(Sender: TObject);
begin while Assigned(ActiveMDIChild) do ActiveMDIChild.Free; end; |
Re: Schließen von Fenstern
Nur aus Interesse: müsste es nicht FreeAndNil heißen, oder wird das ActiveMDIChild automatisch unassigned?
|
Re: Schließen von Fenstern
Bei MDI kann es ja viele Fenster (=Formulare) einer einzigen Klasse geben.
Damit man keine Fehler macht sollte man bei MDI-Formularen folgende Zeile auskommentieren:
Delphi-Quellcode:
Bei einem MDI-Cild Formular bedeutet ja das Schliesen gleichzeitig den Tod des Formulars.
var // auskommentieren !!!
Form2 : TForm2; // auskommentieren !!! Darum sollte sich das Formular selber kümmern. Daher muss man sich im Event OnClose einklinken:
Delphi-Quellcode:
Die Anmerkung mit FreeAndNil sind bei MDI-Formularen nicht zutreffend. Man braucht kein FreeAndNil weil es gar keine Variable gibt/geben darf.
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin if FormStyle = fsMDIChild then Action := caFree; end; |
Re: Schließen von Fenstern
Danke Dir für die Erklärung. Ich habe selbst noch nie was mit MDI gemacht, daher hat es mich mal interessiert.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:35 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz