AGB  ·  Datenschutz  ·  Impressum  







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

Nochmal: Ermiteln ob Objekt freigegeben wurde

Ein Thema von MaBuSE · begonnen am 13. Dez 2005 · letzter Beitrag vom 16. Dez 2005
 
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.840 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

Re: Nochmal: Ermiteln ob Objekt freigegeben wurde

  Alt 13. Dez 2005, 12:46
Zitat von Union:
Im FormClose der Objekte solltest Du folgendes machen:
Delphi-Quellcode:
Procedure MyForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
   Action := caFree;
end;
Dann genügt es, später die globale Variable auf nil abzufragen:
Delphi-Quellcode:
if frmMyForm = nil then
   frmMyForm := TMyForm.Create(Application);
frmMyForm.Show;
Das bringt nichts.
Das hatte ich ja auch schon im 1. Beitrag geschrieben.
  • In TCustomForm.Close wird falls Assigned das Ereignis onClose aufgerufen.
  • In OnClose wird die CloseAction auf caFree gesetzt.
  • Es wird dann im else Zweig der If Abfrage das Release aufgerufen.
  • Release schickt eine Nachicht CM_RELEASE an das Form
  • Die Methode CMRelease wird dadurch aufgerufen.
  • in CMRelease wird ein Free aufgerufen.
  • Das Ergebnis ist ein freigegebenes Formular
    Leider ist das aber nicht nil
    Ein "if frmMyForm = nil then" bringt genauso wie ein "if not assigned(frmMyForm) then" False und ich kann nicht erkennen ob dort ein existierendes Formular existiert.
Die isObject Funktion von choose ( http://www.delphipraxis.net/internal...=460126#460126 ), die in Zusammenarbeit mit negaH entstand bringt eine Exception.

Hier ein Auszug des Quelltextes der TCustomForm zum Nachvollziehen:

Delphi-Quellcode:
{*******************************************************}
{       Borland Delphi Visual Component Library         }
{  Copyright (c) 1995-2002 Borland Software Corporation }
{*******************************************************}
unit Forms;
...
type
  TCustomForm = class(TScrollingWinControl)
  private
...
    procedure CMRelease(var Message: TMessage); message CM_RELEASE;
...
  protected
...
    procedure DoClose(var Action: TCloseAction); dynamic;
...
  public
...
    procedure Close;
...
    procedure Release;
...
  end;
...
procedure TCustomForm.CMRelease;
begin
  Free;
end;
...
procedure TCustomForm.DoClose(var Action: TCloseAction);
begin
  if Assigned(FOnClose) then FOnClose(Self, Action);
end;
...
procedure TCustomForm.Close;
begin
...
      DoClose(CloseAction);
      if CloseAction <> caNone then
        if Application.MainForm = Self then Application.Terminate
        else if CloseAction = caHide then Hide
        else if CloseAction = caMinimize then WindowState := wsMinimized
        else Release;
...
end;
...
procedure TCustomForm.Release;
begin
  PostMessage(Handle, CM_RELEASE, 0, 0);
end;
...
[edit] Hatte Hagen statt negaH geschrieben[/edit]
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  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 17:59 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