Hallo allerseits.
Es geht darum, einen Eventhandler über die Reflection-API des .NET Frameworks hinzuzufügen. Ich kann ja für ein Beliebiges Objekt sagen:
Delphi-Quelltext
1:
| meinObjekt.getType.getEvent('EventName').AddEventHandler(meinObjekt, meinDelegate) |
Das Problem besteht darin den Delegate zu erzeugen.
Normalerweise bietet Delphi .NET ja garnicht die Möglichkeit Delegates zu erzeugen sondern man sagt einfach
Include(irgendEinObjekt.OnIrgendwas, @MeineEventProzedur)
Was er dann genau macht weiß ich nicht, würde mich aber mal interessieren.
Ich kann indirekt einen Delegate erzeugen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| Var TestDelegate : Delegate;
begin TestDelegate := @MeineEventProzedur; end; |
Erzeugt einen Delegate einer Klasse namens $Unnamed1 (Oder ähnlich),
die direkt vom MulticastDelegate abgeleitet ist.
Diesen Delegate kann ich natürlich nicht für beispielsweise ein TreeViewEvent benutzen,
da hier ein TreeViewEventHandler erwartet wird.
Mein zweiter Ansatz war folgender:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| Var TestDelegate : Delegate;
begin
TestDelegate := Delegate.CreateDelegate(irgendeinObjekt.getType.GetEvent ('OnIrgendwas').EventHandlerType, meinObjekt 'MeineEventProzedur');
end; |
Hier sagt er leider immer "Konnte nicht zur Zielmethode gebunden werden",
egal ob MeineEventProzedur private, public, published ist, oder
gar nicht existiert.
Er scheint sie einfach nicht zu finden, obwohl sie durchaus über Reflection sichtbar ist.
Die Frage die ich mir stelle: Ist es überhaupt möglich in Delphi .NET einen EventHandler per Reflection hinzuzufügen?
Muss ich vielleicht bei der Methodendeklaration von MeineEventProzedur noch irgendwas beachten?
Ich hoffe das war verständlich und Irgendjemand weiß mehr.
Danke
Fab
Moderiert von Christian S.: Code- durch Delphi-Tags ersetzt