【问题标题】:Delphi TObject position changeDelphi TObject 位置变化
【发布时间】: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 如果YourControlInstanceTControl 的后代,那么YourControlInstance.Position 将起作用。至少使用as 进行检查是谨慎的。或者可能是一个if YourControlInstance is TControl then ....
  • @David,我的错。我想写 YourObjectInstance 因为似乎 OP 传递了一个 TObject 实例(至少我是这样理解的)。而且 OP 似乎知道如何测试实例是否属于某个类...
  • @TLama 我的评论的最后一句话,受您的启发,似乎是答案。随意写出来。
  • 我看不到您测试对象是什么的任何一点。另外,TControl(TObject) 是错误的。您想将类型转换为实例?!事实上,我看不到你的问题的一个部分,你在哪里投射了一个实例。而且我不知道您为什么忽略使用检查演员表的建议。了解isas 运算符。

标签: delphi firemonkey


【解决方案1】:

解决方案是使用:

sender as TControl

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多