AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Schließen von Fenstern

Ein Thema von legionen · begonnen am 3. Sep 2007 · letzter Beitrag vom 3. Sep 2007
Antwort Antwort
legionen

Registriert seit: 3. Sep 2007
23 Beiträge
 
#1

Schließen von Fenstern

  Alt 3. Sep 2007, 16:08
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!
  Mit Zitat antworten Zitat
Phistev
(Gast)

n/a Beiträge
 
#2

Re: Schließen von Fenstern

  Alt 3. Sep 2007, 16:16
Wie wär's mit
Delphi-Quellcode:
if Assigned(Form2) then begin
  Form2.Close;
  FreeAndNil(Form2);
end;
  Mit Zitat antworten Zitat
legionen

Registriert seit: 3. Sep 2007
23 Beiträge
 
#3

Re: Schließen von Fenstern

  Alt 3. Sep 2007, 16:19
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 )

Hat super geklapt!!!!
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Schließen von Fenstern

  Alt 3. Sep 2007, 16:25
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:
procedure TMainForm.WindowCloseAllActionExecute(Sender: TObject);
begin
  while Assigned(ActiveMDIChild) do
    ActiveMDIChild.Free;
end;
Freundliche Grüße
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#5

Re: Schließen von Fenstern

  Alt 3. Sep 2007, 16:33
Nur aus Interesse: müsste es nicht FreeAndNil heißen, oder wird das ActiveMDIChild automatisch unassigned?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#6

Re: Schließen von Fenstern

  Alt 3. Sep 2007, 17:12
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:
var // auskommentieren !!!
   Form2 : TForm2; // auskommentieren !!!
Bei einem MDI-Cild Formular bedeutet ja das Schliesen gleichzeitig den Tod des Formulars.
Darum sollte sich das Formular selber kümmern.
Daher muss man sich im Event OnClose einklinken:
Delphi-Quellcode:
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
   if FormStyle = fsMDIChild then
     Action := caFree;
end;
Die Anmerkung mit FreeAndNil sind bei MDI-Formularen nicht zutreffend. Man braucht kein FreeAndNil weil es gar keine Variable gibt/geben darf.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#7

Re: Schließen von Fenstern

  Alt 3. Sep 2007, 17:32
Danke Dir für die Erklärung. Ich habe selbst noch nie was mit MDI gemacht, daher hat es mich mal interessiert.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort


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 02:03 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