AGB  ·  Datenschutz  ·  Impressum  







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

Destructor Destroy

Ein Thema von Puhbaehr · begonnen am 15. Nov 2005 · letzter Beitrag vom 15. Nov 2005
Antwort Antwort
Puhbaehr
(Gast)

n/a Beiträge
 
#1

Destructor Destroy

  Alt 15. Nov 2005, 07:24
Ich trau mich fast nicht diese Frage zu stellen.

Das was ich will sollte so wie ich es mache funktionieren (laut Online-Hilfe und Delphi-Such-Resultate).

Wie wende ich Destructor Destroy richtig an?

Um jeden Fehler zu vermeiden hab ich nur das treffende in eine neue Anwendung geschrieben:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type
  TForm1 = class(TForm)
    Constructor Create (Owner : TComponent); override;
    Destructor Destroy; override;
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

Constructor TForm1.Create (Owner : TComponent); // Funktioniert prima
 begin
  inherited Create (Owner);

  beep;
  showmessage ('Anwendung wird gestartet');
 end;
    
Destructor TForm1.Destroy; // macht leider gar nichts
 begin
  beep; // Um Sichtbar zu machen, dass der
  showmessage ('Anwendung wird beendet'); // Destructor Destroy wirklich ausgeführt wird

  inherited destroy;
 end;

end.
Weshalb wird der Destructor TForm1.Destroy beim Beenden der Anwendung nicht ausgeführt?
Oder kann es sein, dass ich das ShowMessage-Fenster nicht sehe weil die Anwendung bereits dabei ist sich "aufzulösen"? Ich dachte bisher, dass erst mit dem Aufruf von inherited destroy die Anwendung tatsächlich beendet wird?

Bin für jede Hilfe dankbar!

Gruß, Robert
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Destructor Destroy

  Alt 15. Nov 2005, 07:45
Hai Puhbaehr,

mal unabhängig von deinem Create/Destroy : Für solche Aktionen gibt es extra die Ereingisse Delphi-Referenz durchsuchenOnCreate und Delphi-Referenz durchsuchenOnClose der Form.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Puhbaehr
(Gast)

n/a Beiträge
 
#3

Re: Destructor Destroy

  Alt 15. Nov 2005, 07:49
Ich weiß
Aber in meinem Beispiel verwende ich vorerst keine Form.
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#4

Re: Destructor Destroy

  Alt 15. Nov 2005, 07:54
Hi,
wie Sharky ja schon sagte, bei einem Form solltest du nicht den Constructor oder Destructor überschreiben. Anders sieht es bei eigenen Klassen aus. Da würdest du dann einfach für die Klassenvariablen im Konstruktor Speicher allozieren und im Destruktor wieder freigeben.
Aber mal ganz kurz zu deinem Code, ich glaube bei Forms sollte man es möglichst meiden Methoden ohne Sichtbarkeitsbereich zu deklarieren. Der Bereich in den du deinen Kon- und Destruktor geschrieben hast, wird von Delphi verwaltet. Da kommen halt automatisch erzeugte Variablen und Methoden rein. Sauberer ist es da, auf private, protected und public zurückzugreifen, bei Forms halt nicht für Konstruktor und Destruktor

Gruß Der Unwissende
  Mit Zitat antworten Zitat
Puhbaehr
(Gast)

n/a Beiträge
 
#5

Re: Destructor Destroy

  Alt 15. Nov 2005, 08:21
Wird denn FormCreate vor oder nach dem Erstellen des Forms ausgeführt?

Ich verwende den Con- und Destructor in einer eigenen Klasse die in einer Unit abgepackt ist und später von einem beliebigem Form das sich in einer anderen Unit befindet aufgerufen werden soll.
Vor dem Beenden der Anwendung hatte ich vor die Prozesse wieder freizugeben. Da ich das aber nicht im Form erledigen möchte sollte das die Unit nach Möglichkeit selbst tun.
Etwa nach dem Prinzip: Wenn du erstellt worden bist mache das. Wenn geschlossen wirst mache vorher das.

Ich dachte bisher immer, dass eine als public deklarierte Methode nicht mehr durch eine private überschrieben werden kann da eine private-Methode der public-Methode untergeordnet ist?

Wenn der Con- und Destructor nicht als public deklariert werden soll/darf/kann als was dann deklarieren?
  Mit Zitat antworten Zitat
Puhbaehr
(Gast)

n/a Beiträge
 
#6

Re: Destructor Destroy

  Alt 15. Nov 2005, 08:49
Gut, Fehler gefunden.

Meine Unit hatte ich im Projekt-Teil nach dem Schema TKlasse.Create (Referrenz) gestartet, etwa so: TTCPIP.Create (TCPConnection)
TCPConnection war dabei eine Variable des Typs TTCPIP.
Dadurch wurde meine Unit nicht an die Hauptanwendung gebunden und reagierte somit nicht auf Schließereignisse und blieb sogar nach dem Schließen der Hauptanwendung offen.
Ein TKlasse.Create (Application) hat geholfen.

Vielen Dank an alle für die Hilfe!
  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 18:48 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