【发布时间】:2013-08-06 16:58:21
【问题描述】:
想象一下,你想分配自己的事件过程:
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 的受保护成员,所以很直观的答案:
AnyWinControl.OnMouseDown:=SuperObject1.DoSomething;
根本行不通。
RTTI 能做到吗?怎么样?
感谢
【问题讨论】:
-
您可以创建一个发布受保护事件的类(从 TControls 继承)并通过强制转换为此类来分配事件。例如
THack(MyClass).OnMouseDown := ...这样做你的类必须是 TControl 的后代。 -
@bummi: 你也一样... :-)
-
请注意,已经有一个 Delphi SuperObject 可以解析和写入 JSON