![]() |
Event ist nicht sichtbar und wird nie ausgelöst
Guten Abend,
eigentlich wollte ich ein zusätzliches Ereignis in einen TForm-Nachfahren einbauen. Das Ereignis sollte nach OnCloseQuery, aber vor OnClose stattfinden, daher "OnBeforeClose". Das Problem: Das Ereignis ist im Objektinspektor nicht sichtbar, und es wird auch nie ausgelöst, wenn man es zur Laufzeit überschreibt. Die Ereignisse sind genau gleich deklariert wie z.B. in der TCustomForm Klasse. Hat jemand eine Ahnung warum es nichtmal im Inspektor angezeigt wird?
Delphi-Quellcode:
type
TSomeForm = class(TForm) private FOnBeforeClose: TCloseEvent; public procedure DoClose(var Action: TCloseAction); override; published property OnBeforeClose: TCloseEvent read FOnBeforeClose write FOnBeforeClose; end; {...} procedure TSomeForm.DoClose(var Action: TCloseAction); begin If Assigned(FOnBeforeClose) then FOnBeforeClose(Self, Action); inherited; end; |
Re: Event ist nicht sichtbar und wird nie ausgelöst
Sorry, ich steh immer noch auf dem Schlauch :|
|
Re: Event ist nicht sichtbar und wird nie ausgelöst
Durch deine Frage hast du mich auf die Idee gebracht, ein
![]() |
Re: Event ist nicht sichtbar und wird nie ausgelöst
Ahhh danke, das erklärt natürlich warum das Ereignis im Objektinspektor nicht angezeigt wird! Aber wie kommt es, dass es niemals aufgerufen wird?
PS: Wie hast du das in zwei Minuten alles geschafft? *g* |
Re: Event ist nicht sichtbar und wird nie ausgelöst
Das es nicht aufgerufen wird, hat einen anderen Grund:
Deine überschrieben Methode wird nicht vom Formular aufgerufen, weil sie an dieser Stelle ja nicht weiß, dass in einem Nachfahren diese Prozedur überschrieben wird! Mein Vorschlag:
Delphi-Quellcode:
Wenn du allerdings an dieser Stelle auch die CloseAction haben willst, dann musst du dir das in der Prozedur zusammenpulen.
type
TSomeForm = class(TForm) private FOnBeforeClose: TNotifyEvent; procedure WMClose(var Message: TMessage); message WM_CLOSE; published property OnBeforeClose: TNotifyEvent read FOnBeforeClose write FOnBeforeClose; end; {...} procedure TSomeForm.WMClose(var Message: TMessage); begin if Assigned(FOnBeforeClose) then FOnBeforeClose(Self); inherited; end; Btw. Es gibt das Event CloseQuery, das ist quasi das BeforeClose-Event. Dort kannst du das Schließen des Fensters noch verhindern, wenn du das willst. |
Re: Event ist nicht sichtbar und wird nie ausgelöst
Meinst du damit, dass diese überschriebene DoClose Prozedur nicht weitervererbt wird? Sorry, meine Leitung scheint heute wieder Überlänge zu haben :wiejetzt:
Wenn uns die OH nicht anlügt, wäre DoClose eigentlich der richtige Ansatzpunkt (?!): Zitat:
|
Re: Event ist nicht sichtbar und wird nie ausgelöst
Sorry, mein Fehler, sie ist ja dynamic, dann stimmt das nicht, was ich eben von mir gegeben habe. :oops:
Also bei funktioniert das sogar (mit dem DoClose mein ich)!! P.S. Wie kommst du eigentlich auf 2 Minuten?? :gruebel: |
Re: Event ist nicht sichtbar und wird nie ausgelöst
Es funktioniert? Dann wird es wohl an der Modularisierung liegen... mal schaun... danke für den Hinweis!
PS: Bei den 2 Minuten hab ich mich verguckt :blind: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:43 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