【发布时间】:2014-07-31 10:14:54
【问题描述】:
我想制作一个可以应用于许多不同组件的通用函数;但是,我不能这样做
TObject.Position
它要求我这样做
TButton(TObject).Position
这意味着我必须这样做
if TObject is TButton then
TButton(TObject).position...
if TObject is TLabel then
TLabel(TObject).position...
有没有办法让它发挥作用:
TObject.position
这样函数就可以尽可能通用,并且不会被 switch/if 语句弄得杂乱无章...?
这是我所拥有的:
procedure TForm3.gestureObj(Sender: TObject;
const EventInfo: TGestureEventInfo; var Handled: Boolean);
begin
if EventInfo.GestureID = igiPan then
handlePan(EventInfo, Sender);
end;
procedure TForm3.handlePan(EventInfo: TGestureEventInfo; sender: TObject);
var
item: TControl;
begin
item:= TControl(TObject);
end;
当我尝试移动 do item.position 时,这样做会导致访问冲突,我怀疑这是因为它不是 TControl?
【问题讨论】:
-
只是
TControl(YourControlInstance).Position := ...,因为Position属性是由TControl类引入的,所以它的所有后代都通用。 -
@TLama 如果
YourControlInstance是TControl的后代,那么YourControlInstance.Position将起作用。至少使用as进行检查是谨慎的。或者可能是一个if YourControlInstance is TControl then .... -
@David,我的错。我想写
YourObjectInstance因为似乎 OP 传递了一个TObject实例(至少我是这样理解的)。而且 OP 似乎知道如何测试实例是否属于某个类... -
@TLama 我的评论的最后一句话,受您的启发,似乎是答案。随意写出来。
-
我看不到您测试对象是什么的任何一点。另外,
TControl(TObject)是错误的。您想将类型转换为实例?!事实上,我看不到你的问题的一个部分,你在哪里投射了一个实例。而且我不知道您为什么忽略使用检查演员表的建议。了解is和as运算符。
标签: delphi firemonkey