Forum: GUI-Design mit VCL / FireMonkey / Common Controls
Delphi
by RSE,
29. Apr 2011
@ Bummi und shmia:
Die Lösung meines Problems steckte in euren beiden Beiträgen gleichermaßen: Ein Methodenzeiger zeigt nicht auf die Einsprungadresse der Prozedur, sondern auf einen Record vom Typ TMethod:
TMethod = record
Code, Data: Pointer;
end;
Er besteht also zusätzlich aus einem Zeiger auf den Datenbereich der Instanz. Wenn ich nun beide Teile teste, anstatt nur @Handler,...
Forum: GUI-Design mit VCL / FireMonkey / Common Controls
Delphi
by RSE,
29. Apr 2011
@Bummi:
Nein, der Event wird durch TMain verwaltet, es gibt TMain.RegisterEvent und TMain.UnRegisterEvent. In TMain ist also auch die Liste der Handler, die aufgerufen werden, wenn der Event feuert.
Wenn nun TSpec1 instanziert wird, dann ruft es TMain.RegisterEvent(EventHandler) auf. Dieses Verhalten ist komplett in TBase implementiert, incl. der Prozedur EventHandler. Das gleiche macht auch...
Forum: GUI-Design mit VCL / FireMonkey / Common Controls
Delphi
by RSE,
29. Apr 2011
Hallo!
Ich habe eine Klasse TMain, die einen Event nach dem Observer-Pattern bereitstellt (also mit Register- und Unregister-Prozeduren, um mehrere Handler bedienen zu können). In der Register-Prozedur rufe ich zuerst die Unregister-Prozedur auf, um sicherzustellen, dass kein Handler doppelt registriert wird (durch etwaige Fehler an anderer Stelle). Danach wird der Handler in die Liste...