gpt4 book ai didi

delphi - 访问 TWinControl 的 protected 事件

转载 作者:行者123 更新时间:2023-12-03 15:45:09 24 4
gpt4 key购买 nike

想象一下,您想要分配自己的事件过程:

procedure TSuperObject.DoSomething(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
ShowMessage('Yes, I am doing');
end;

到窗体上的任何 TWinControl。通常,如果您的表单上有Panel1(TPanel),您就可以轻松完成:

Panel1.OnMouseDown:=SuperObject1.DoSomething;

但是如果你想通用的话,如何实现呢?你无法访问TWincontrol的 protected 成员,所以直观的答案:

AnyWinControl.OnMouseDown:=SuperObject1.DoSomething;

根本不起作用。

RTTI可以实现吗?怎么办?

谢谢

最佳答案

您不需要 RTTI。

任何代码都可以隐式访问在同一单元中声明的任何类的 protected 成员。您可以通过在需要访问该类成员的单元中声明一个新的 TWinControl 后代来利用这一点。声明非常简单:

type
TProtectedWinControl = class(TWinControl);

然后将任何其他 TWinControl 后代类型强制转换为该新类型,您就可以访问其任何 protected 字段、属性和方法。 TWinControl 的 protected 成员自动成为 TProtectedWinControl 的 protected 成员(通过继承),因此当前单元可以访问它们。

TProtectedWinControl(AnyWinControl).OnMouseDown := SuperObject1.DoSomething;

请注意,这适用于 protected 成员,但不适用于严格 protected 成员。

关于delphi - 访问 TWinControl 的 protected 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18067430/

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