对于此任务,我的解决方案不是很好,但是有人可以告诉我如何使用标准库或更优雅的方法。当前的解决方案基于以下事实:对对象过程的引用在内存中存储了两个指针,一个指向过程代码的指针和一个指向对象的指针。
function IsObject( const AEvent: TNotifyEvent; const AObject: TObject ): Boolean;
begin
Result := PointerArray( Pointer( @AEvent )^ )[1] = Pointer( AObject );
end;
答案 0 :(得分:5)
我将使用在System
单元中声明的TMethod
记录。记录包含两个类型为Pointer
-Code
和Data
的成员字段,使您可以选择方法的两个指针。在您的情况下,您需要Data
成员,该成员是方法的主题:
function ObjectIsMethodSubject(AObject: TObject; AEvent: TNotifyEvent): Boolean;
begin
Result := TMethod(AEvent).Data = AObject;
end;