Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Eigene Komponente mit OnClose-Event (https://www.delphipraxis.net/185331-eigene-komponente-mit-onclose-event.html)

Sir Rufo 1. Jun 2015 12:19

AW: Eigene Komponente mit OnClose-Event
 
Zitat:

Zitat von Jasocul (Beitrag 1303783)
Zitat:

Zitat von Sir Rufo (Beitrag 1303782)
Solange die Anwendung selber nicht beendet wird, erscheint immer die Message.

Ah, da ist unser Missverständnis. Ich erzeuge die Instanz nicht zur Laufzeit. Dementsprechend zerstöre ich diese auch nicht selbst.

Das ist doch völlig egal, wer wann was erzeugt und wann wer was freigibt.

Es gibt hier nur eine Regel, die man beachten muss
Delphi-Quellcode:
  if not( csDestroying in Application.ComponentState ) then
    ShowMessage( 'Ich bin dann mal weg!' );
oder auf deutsch:

Wenn die Anwendung selber den Status Zerstören hat, dann darf ich bestimmte Dinge nicht mehr machen (wie. z.B.
Delphi-Quellcode:
ShowMessage
aufrufen).

himitsu 1. Jun 2015 12:20

AW: Eigene Komponente mit OnClose-Event
 
ShowMessage wird hier wohl über CreateDialogIndirect erstellt und das reagiert auf Application.Terminated und schießt sich sofort wieder, da es so eine VCL-TForm ist.
(altes Delphi oder altes Windows)

Jasocul 1. Jun 2015 12:28

AW: Eigene Komponente mit OnClose-Event
 
@Sir Rufo, das ist mir schon klar. Ich bin halt davon ausgegangen, dass das BeforeDestruction ausgeführt, bevor irgendwas anderes tatsächlich zerstört wird. Dies ist aber offensichtlich eine falsche Annahme gewesen. Asche auf mein Haupt.
Als Nutzer einer Komponente würde es mich allerdings schon irritieren, dass ich erst prüfen muss, ob ich in der Anwendung überhaupt ein ShowMessage aufrufen darf, wenn das gewünschte Ereignis abgearbeitet wird.

@himitsu:
Es macht zumindest den Eindruck, dass es so abläuft.

Mikkey 1. Jun 2015 12:37

AW: Eigene Komponente mit OnClose-Event
 
Zitat:

Zitat von Jasocul (Beitrag 1303788)
Als Nutzer einer Komponente würde es mich allerdings schon irritieren, dass ich erst prüfen muss, ob ich in der Anwendung überhaupt ein ShowMessage aufrufen darf, wenn das gewünschte Ereignis abgearbeitet wird.

Musst Du ja nicht, Du schreibst ja selbst:

Zitat:

Zitat von Jasocul (Beitrag 1303788)
Mache ich es mit Message-Handling, ist die Applikation offensichtlich schon nicht mehr verfügbar. Zumindest habe ich keinen Zugriff mehr. Ein einfaches ShowMessage wird schon nicht mehr angezeigt, obwohl fehlerfrei durch den Source gelaufen wird

Wenn das Programm beendet wird, wird eine WM_QUIT-Nachricht losgelassen, die die Haupt-Nachrichtenschleife beendet. Danach ist halt kein normales Arbeiten mit Windows mehr möglich.

Sir Rufo 1. Jun 2015 12:46

AW: Eigene Komponente mit OnClose-Event
 
@Jasocul

Was glaubst du wohl, wieviele Nutzer von Kettensägen überrascht geschaut haben, als sie den Ast abgesägt haben auf dem sie selber gerade saßen?

Egal was man hat (Kettensäge, Komponente, ...): Man kann es richtig oder falsch verwenden.

Und das oben geschilderte Verhalten ist kein Alleinstellungsmerkmal der Kettensäge.

Jasocul 1. Jun 2015 12:56

AW: Eigene Komponente mit OnClose-Event
 
@Mikkey:
Ja, ich weiß das. Aber die Kollegen, die die Komponente nutzen, sehen ja nur, dass es ein Event gibt, das sie benutzen können. Was dahinter steckt, ist erstmal uninteressant. Wenn ich in so einem Event eine Nachricht ausgeben möchte, sollte das auch passieren.

@Sir Rufo:
Natürlich muss man aufpassen, dass das, was man benutzt, auch da ist. Aber bisher war es bei mir bisher nicht erforderlich, dass ich prüfen muss, ob die Anwendung noch "existiert", in der ich den Code ablaufen lasse.

Sir Rufo 1. Jun 2015 13:02

AW: Eigene Komponente mit OnClose-Event
 
Zitat:

Zitat von Jasocul (Beitrag 1303792)
@Sir Rufo:
Natürlich muss man aufpassen, dass das, was man benutzt, auch da ist. Aber bisher war es bei mir bisher nicht erforderlich, dass ich prüfen muss, ob die Anwendung noch "existiert", in der ich den Code ablaufen lasse.

Aber was hat das alles mit deiner Komponente zu tun? Rein gar nichts!

Deine Komponente stellt doch nur sicher, dass der Event zum angegeben Zeitpunkt aufgerufen wird - Punkt. Und das macht die doch auch. Was willst du also noch?

Im Übrigen habe ich festgestellt, dass auch der Befehl
Delphi-Quellcode:
ÜbernehmeDieWeltherrschaft();
nicht korrekt ausgeführt wird.

Es liegt nicht in der Verantwortlichkeit der Komponente, ob der Eventhandler-Code korrekt abgearbeitet wird, sondern ausschließlich darin, dass der Event aufgerufen wird, wie vereinbart.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:59 Uhr.
Seite 2 von 2     12   

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