【问题标题】:Runtime allocation of OnTAP event Delphi SeattleOnTAP 事件的运行时分配 Delphi Seattle
【发布时间】:2015-12-07 17:06:29
【问题描述】:

我正在使用 Firemonkey 并且 我想在运行时将 OnTap 事件分配给一个对象。

我尝试的代码与我用于 OnClick 事件的代码基本相同:

顶部的标题:

procedure txtHostClick(Sender: TObject);

程序:

procedure TMyForm.txtHostClick(Sender: TObject);
begin
   //do stuff
end;

分配给事件处理程序:

hotspot :=  Tmemo.Create(Highlight_Scrollbox);
hotspot.OnClick := txtHostClick;

所以我尝试将相同的逻辑应用于 OnTap 事件,它给出了以下错误:

[DCC 错误] s3.pas(4338): E2009 不兼容类型:'参数列表不同'

以下是我尝试过的代码示例:

顶部的标题:

procedure txtOnTAPEvent(Sender: TObject; const [Ref] Point: TPointF);

程序:

procedure TMyForm.txtOnTAPEvent(Sender: TObject; const [Ref] Point: TPointF);
begin
   //do stuff
end;

分配给事件处理程序:

hotspot :=  Tmemo.Create(Highlight_Scrollbox);
hotspot.OnTap := txtOnTAPEvent;

我的知识有空白需要填补。

【问题讨论】:

    标签: delphi events runtime delphi-10-seattle


    【解决方案1】:

    尝试从Point 参数中删除[Ref] 属性:

    procedure txtOnTAPEvent(Sender: TObject; const Point: TPointF);
    

    procedure TMyForm.txtOnTAPEvent(Sender: TObject; const Point: TPointF);
    begin
        //do stuff
    end;
    

    如果您在设计时在对象检查器中双击任何 UI 控件的 OnTap 事件,您将看到 IDE 生成一个不包含 [Ref] 属性的 OnTap 事件处理程序。在 FMX.Types.TTapEvent 的声明中没有 [Ref] 属性的事实进一步强化了这一点:

    TTapEvent = procedure(Sender: TObject; const Point: TPointF) of object;
    

    【讨论】:

    • 嗨,雷米,感谢您的回答。它是正确的。我还想知道您是否可以解释以下内容。当我在表单上放置一个对象并使用 IDE 上的内置事件选项卡创建一个 OnTap 事件时,创建的过程具有 [Ref] 字段?
    • 我在发布答案之前测试了 IDE。使用西雅图更新 1,当我让 IDE 创建事件时,不存在 [Ref] 属性。
    • 谢谢。我会接受这一点。我没有更新 1,所以它可能只是在没有更新的版本中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-06
    • 2019-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多