AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Event ist nicht sichtbar und wird nie ausgelöst
Thema durchsuchen
Ansicht
Themen-Optionen

Event ist nicht sichtbar und wird nie ausgelöst

Ein Thema von Dani · begonnen am 6. Okt 2004 · letzter Beitrag vom 7. Okt 2004
Antwort Antwort
Benutzerbild von Dani
Dani

Registriert seit: 19. Jan 2003
732 Beiträge
 
Turbo Delphi für Win32
 
#1

Event ist nicht sichtbar und wird nie ausgelöst

  Alt 6. Okt 2004, 23:54
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;
Dani H.
At Least I Can Say I Tried
  Mit Zitat antworten Zitat
Benutzerbild von Dani
Dani

Registriert seit: 19. Jan 2003
732 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Event ist nicht sichtbar und wird nie ausgelöst

  Alt 7. Okt 2004, 16:08
Sorry, ich steh immer noch auf dem Schlauch
Dani H.
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.016 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#3

Re: Event ist nicht sichtbar und wird nie ausgelöst

  Alt 7. Okt 2004, 16:19
Durch deine Frage hast du mich auf die Idee gebracht, ein Tutorial über dieses Thema zu schreiben, guck's dir doch mal an.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von Dani
Dani

Registriert seit: 19. Jan 2003
732 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Event ist nicht sichtbar und wird nie ausgelöst

  Alt 7. Okt 2004, 16:34
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*
Dani H.
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.016 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#5

Re: Event ist nicht sichtbar und wird nie ausgelöst

  Alt 7. Okt 2004, 16:58
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:
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;
Wenn du allerdings an dieser Stelle auch die CloseAction haben willst, dann musst du dir das in der Prozedur zusammenpulen.
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.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von Dani
Dani

Registriert seit: 19. Jan 2003
732 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Event ist nicht sichtbar und wird nie ausgelöst

  Alt 7. Okt 2004, 17:09
Meinst du damit, dass diese überschriebene DoClose Prozedur nicht weitervererbt wird? Sorry, meine Leitung scheint heute wieder Überlänge zu haben

Wenn uns die OH nicht anlügt, wäre DoClose eigentlich der richtige Ansatzpunkt (?!):
Zitat:
Die Methode DoClose generiert ein OnClose-Ereignis.

type TCloseAction = (caNone, caHide, caFree, caMinimize);
procedure DoClose(var Action: TCloseAction); dynamic;

Beschreibung

DoClose wird automatisch aufgerufen, wenn das Formular geschlossen wird. Anschließend wird die Ereignisbehandlungsroutine für OnClose aufgerufen, sofern sie definiert wurde.

Überschreiben Sie diese Methode, um das OnClose-Ereignis zu unterdrücken oder klassenspezifische Aktionen beim Schließen des Formulars hinzuzufügen. Geben Sie im Parameter Action an, wie das Formular geschlossen werden soll. Informationen zu den möglichen Werten finden Sie in der Beschreibung des Ereignisses OnClose.
Dani H.
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.016 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#7

Re: Event ist nicht sichtbar und wird nie ausgelöst

  Alt 7. Okt 2004, 17:18
Sorry, mein Fehler, sie ist ja dynamic, dann stimmt das nicht, was ich eben von mir gegeben habe.
Also bei funktioniert das sogar (mit dem DoClose mein ich)!!

P.S. Wie kommst du eigentlich auf 2 Minuten??
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von Dani
Dani

Registriert seit: 19. Jan 2003
732 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Event ist nicht sichtbar und wird nie ausgelöst

  Alt 7. Okt 2004, 17:25
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:
Dani H.
  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 11:50 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