如何在Delphi中查看是谁触发了Gesture标准操作?

时间:2012-03-06 14:22:53

标签: delphi delphi-2010 gesture

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

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

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

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

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

我尝试过OnGesture,但定义了Gesture不会触发该事件,而发件人总是表单本身。

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

谢谢。

1 个答案:

答案 0 :(得分:0)

通过更多测试,我认为其中一个解决方案可能是跳过使用操作并使用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;

欢迎任何更好的答案,特别是在行动执行中。