【问题标题】:How can I see who triggered an Gesture Standard action in Delphi?如何在 Delphi 中查看谁触发了手势标准动作?
【发布时间】:2012-03-06 14:22:53
【问题描述】:

我已经搜索并找到How can I see who triggered an action in Delphi?

该问题的解决方案是使用 TAction.ActionComponent。

我有一个带有 TGestureManager 的表单,设置标准手势(比如左右)和动作。

现在在执行事件中,最好知道哪个组件初始化了手势,这样我就可以决定要做什么。 (例如,有两个面板,我需要知道要滚动哪个面板)。

但是,在这种情况下,TAction.ActionComponent 为 nil。

我尝试了 OnGesture,但定义的 Gesture 不会触发该事件,并且发送者始终是表单本身。

那么我怎么知道是哪个组件触发了那个手势动作呢?

谢谢。

【问题讨论】:

    标签: delphi delphi-2010 gesture


    【解决方案1】:

    通过更多测试,我认为其中一种解决方案可能是跳过使用操作并使用 Form.OnGesture,然后使用 EventInfo.Location 来找出手势从哪个组件开始。然后我们可以使用 EventInfo.GestureID 来决定要做什么。

    procedure TForm5.FormGesture(Sender: TObject; const EventInfo: TGestureEventInfo; var Handled: Boolean);
    var
      C : TControl;
    begin
      C := FindVCLWindow(ClientToScreen(EventInfo.Location));
      if Assigned(C) and (EventInfo.GestureID < 0) then
        edt1.Text := C.Name
      case EventInfo.GestureID of
        1 : DoThis;
        2 : DoThat;
      end;
    end;
    

    欢迎任何更好的答案最好放在动作执行中。

    【讨论】:

    • 真相是TActionManager.OnExecute 事件参数Action.ActionComponent = nil 然而动作本身正在被执行。不知道为什么要使用操作 (TAction) 和大小写 GestureID 或其他。您可以简单地分配给某个组件的手势TAction 来执行并且它会发生。
    • 如果您阅读了原始问题,您会知道我想知道手势从哪个控件开始,当通过分配的操作执行时我找不到。
    猜你喜欢
    • 2011-03-19
    • 2014-09-19
    • 2015-07-31
    • 1970-01-01
    • 2022-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多