![]() |
AW: TNotifyEvents
Zitat:
Insofern kann ich die Verwirrung von Gyrospeter gut verstehen. Aber irgendwo fängt jeder mal klein an :-) |
AW: TNotifyEvents
Jetzt habe ich es tatsächlich wirklich begriffen :D
Nochmal eine kleine Frage zu den Event-Typen. Das heißt wenn ich in anderen Units Prozeduren habe, die ich in meiner MainUnit verwenden will, unabhängig von den Klassen der anderen Units, dann verwende ich die Event-Typen dafür. Und wenn es zum Eventhandler kommt, dann ist dem ja völlig egal wer oder was das Ereignis auslöst. Er verarbeitet es nur weiter?! |
AW: TNotifyEvents
Zitat:
Zitat:
|
AW: TNotifyEvents
Zitat:
|
AW: TNotifyEvents
Ich denke vom Grundprinzip her, hab ich es verstanden, oder? :roll::?:
Unit1
Code:
Unit2
type
TForm1 = class(TForm) Button1: TButton; Memo1: TMemo; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure FormDestroy(Sender: TObject); private { Private-Deklarationen } MyObject: TMyClass; procedure MyEventHandler(z: Integer); public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} { TForm1 } procedure TForm1.Button1Click(Sender: TObject); begin MyObject.Addition; end; procedure TForm1.FormCreate(Sender: TObject); begin MyObject := TMyClass.Create; MyObject.OnMyEvent := MyEventHandler; end; procedure TForm1.FormDestroy(Sender: TObject); begin MyObject.Free; end; procedure TForm1.MyEventHandler(z: Integer); begin Memo1.Lines.Add(IntToStr(z)); end; end.
Code:
type
TMyEvent = procedure (z: Integer) of Object; TMyClass = class private FOnMyEvent: TMyEvent; public property OnMyEvent: TMyEvent read FOnMyEvent write FOnMyEvent; procedure Addition; end; implementation uses Notify; { TMyClass } procedure TMyClass.Addition; var i,j,z: Integer; begin i := 4; j := 3; z := j + i; if Assigned(FOnMyEvent) then FOnMyEvent(z); end; end. |
AW: TNotifyEvents
Jo das sollte so passen. :thumb:
|
AW: TNotifyEvents
Vielen Dank an alle die mir dabei geholfen haben :)
|
AW: TNotifyEvents
@Gyrospeter: 100 Punkte 8-)
Zitat:
EDIT: Wobei mir gerade die folgende Idee kommt (Papiertheorie!):
Delphi-Quellcode:
type
TNotifyEvents = TArray<TNotifyEvent>; TMyClass = class(Irgendwas) private FEvents: TNotifyEvents; protected procedure DoEvents; public property Events: TNotifyEvents read FEvents write FEvents; end; implementation procedure TMyClass.DoEvents; var LEvent: TNotifyEvent; begin for LEvent in FEvents do begin if Assigned(LEvent) then begin LEvent(Self); end; end; end; procedure TForm1.FormCreate(Sender: TObject); begin FMyClass.Events := [Eventhandler1, Eventhandler2, Eventhandler3]; end; |
AW: TNotifyEvents
Das geht dann in Richtung Observer-Pattern (richtiges Pattern?). Es wird eine Liste mit Methodenzeigern verwaltet und die wird dann abgeklappert und alle dort registrierten Methoden aufgerufen.
|
AW: TNotifyEvents
Groß was anderes machen die Delegations ja auch nicht. Nur dass die Prozedurkette automatisch generiert wird.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:32 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