Einzelnen Beitrag anzeigen

shmia

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

Re: Ist Fenster schon geschlossen?! (speziell: MDI-Fenster)

  Alt 7. Jan 2008, 19:52
Zitat von s.h.a.r.k:
Ich greife, nachdem ich eine Form geschlossen habe auf diesen Counter zu, wobei dieser eben noch die Form "enthält". Warum ist das allerdings so!? Ich denke, wenn ich ein OnClose einer Form aufrufe, danach dann den Counter abfrage, er doch eigentlich um 1 niedriger sein sollte als zuvor!?
Der Aufruf von [TForm].Close zerstört das Formular ja noch nicht, sondern caFree veranlasst den Aufruf von Release:
Delphi-Quellcode:
procedure TCustomForm.Release;
begin
  PostMessage(Handle, CM_RELEASE, 0, 0);
end;
Diese Message wird aber erst beim nächsten Application.ProcessMessages verarbeitet.
Also ist das Formular-Objekt noch nicht ganz vernichtet, aber im Prinzip schon zum Tode verurteilt.

Ich würde an deiner Stelle einen Callback Mechanismus einbauen:
Delphi-Quellcode:
procedure TMDI_Form.FormClose(Sender: TObject; var Action: TCloseAction);
begin
   if FormStyle = fsMDIChild then
   begin
     // sage dem Hauptformular Bescheid, dass ich (= das MDI-Child) geschlossen werden
     (Owner as TMainForm).MDIClosing(self);
     Action := caFree;
   end;
end;

procedure TMainForm.MDIClosing(f:TcustomForm);
begin
  // das Hauptformular erhält jetzt einen letzten Todesgruss von seinem sterbenden MDI-child
  // so hat man die volle Kontrolle über das Geschehen

  with f as TMDI_Form do
  begin
    if MenuItemAutosave.Checked and DataModified then // DataModified ist ein Property des MDI-Child
      SaveData; // SaveData ist eine Methode des MDI-Child
  end;
end;
Andreas
  Mit Zitat antworten Zitat