gpt4 book ai didi

delphi - Delphi中如何检查两个事件是否指向同一个过程?

转载 作者:行者123 更新时间:2023-12-03 14:35:20 24 4
gpt4 key购买 nike

假设我有一个链接到 Button1Click 过程的 Button1.OnClick 事件。我还有 Button2.OnClick 链接到其他一些程序。如何检查这两个事件是否从运行时链接到不同或相同的过程?

我尝试测试是否:

  • Button1.OnClick = Button2.OnClick,但这给了我一个错误(没有足够的实际参数)
  • @(Button1.OnClick) = @(Button2.OnClick),再次出错(实际参数不足)

如何正确测试它?

最佳答案

方法引用可以分为两部分,指向对象的指针和指向方法本身的指针。 System 单元中定义了一个方便的记录类型,称为 TMethod,它允许我们进行分解。

有了这些知识,我们可以编写如下内容:

function SameMethod(AMethod1, AMethod2: TNotifyEvent): boolean;
begin
result := (TMethod(AMethod1).Code = TMethod(AMethod2).Code)
and (TMethod(AMethod1).Data = TMethod(AMethod2).Data);
end;

希望这有帮助。 :)

编辑:只是为了以更好的格式列出我试图在这里解决的问题(如评论中提到的)。

如果您有两个表单,两者都是从同一个基类实例化的:

Form1 := TMyForm.Create(nil);
Form2 := TMyForm.Create(nil);

然后您将这些表单中的相同方法分配给两个按钮:

Button1.OnClick := Form1.ButtonClick;
Button2.OnClick := Form2.ButtonClick;

并且比较两个OnClick属性,你会发现Code是相同的,但是Data不同。这是因为它是相同的方法,但是在该类的两个不同实例上......

现在,如果您对同一个对象有两个方法:

Form1 := TMyForm.Create(nil);

Button1.OnClick := Form1.ButtonClick1;
Button2.OnClick := Form1.ButtonClick2;

那么它们的Data将相同,但它们的Code将不同。

关于delphi - Delphi中如何检查两个事件是否指向同一个过程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6896155/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com