AGB  ·  Datenschutz  ·  Impressum  







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

Objektereignisse bearbeiten

Ein Thema von engel · begonnen am 27. Feb 2005 · letzter Beitrag vom 22. Jul 2005
 
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#11

Re: Objektereignisse bearbeiten

  Alt 2. Mär 2005, 13:25
Es ist sinnvoll, sich an den Standard (bezüglich der Namensgebung) der VCL zu halten.

Hier erst mal die Vorlage:
Delphi-Quellcode:
TMyClass = class(TPersistent)
private
  FOnChange: TNotifyEvent;
protected
  procedure DoChange;dynamic;
public
  property OnChange: TNotifyEvent read FOnChange write FOnChange;
end;

procedure TMyClass.DoChange;
begin
   if Assigned(FOnChange) then
      FOnChange(self);
end;
Das Property für das Event greift üblicherweise direkt auf die Eventvariable zu; Set- oder Getfunktionen werden nicht gebraucht.
Soll heissen: hinter read und write steht eine Variable, keine Methode.

Das Event soll nicht direkt aufgerufen werden, sondern wird indirekt über die Do-Procedure aufgerufen.
Die Do-Procedure ist die einzige Stelle in der ganzen Klasse, an der auf die Eventvariable FOnChange zugegriffen wird!!

Jetzt kommt der Trick:
Die Procedure DoChange ist virtuell.
Damit kann man in abgeleiteten Klassen den Zeitpunkt, wann der Event aufgerufen wird verändern.
In 95% aller Fälle wird man die Procedure DoChange nicht überschreiben wollen; das Standardverhalten reicht meisten aus.
Deshalb ist die Procedure mit dem Schlüsselwort dynamic versehen; dies spart Speicherplatz.
Andreas
  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 16:25 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