如何在Delphi中查看是谁触发了手势标准动作?
我找了又找 该问题的解决方案是使用TAction.ActionComponent 我有一个带有TGestureManager的表单,用动作设置标准手势(如左、右) 现在在execute事件中,最好知道哪个组件初始化了手势,这样我就可以决定做什么了。(例如,有两个面板,我需要知道滚动哪个面板) 但是,在本例中,TAction.ActionComponent为零 我尝试了感觉,但定义的手势不会触发该事件,发送者始终是表单本身 那么我怎么知道是哪个组件触发了那个手势动作呢如何在Delphi中查看是谁触发了手势标准动作?,delphi,delphi-2010,gesture,Delphi,Delphi 2010,Gesture,我找了又找 该问题的解决方案是使用TAction.ActionComponent 我有一个带有TGestureManager的表单,用动作设置标准手势(如左、右) 现在在execute事件中,最好知道哪个组件初始化了手势,这样我就可以决定做什么了。(例如,有两个面板,我需要知道滚动哪个面板) 但是,在本例中,TAction.ActionComponent为零 我尝试了感觉,但定义的手势不会触发该事件,发送者始终是表单本身 那么我怎么知道是哪个组件触发了那个手势动作呢 谢谢。通过更多的测试,我认为
谢谢。通过更多的测试,我认为解决方案之一可能是跳过使用action并使用Form.OnTesture,然后使用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;
procedure TForm5.form手势(发送方:TObject;const-EventInfo:TGestureEventInfo;变量处理:Boolean);
变量
C:t控制;
开始
C:=FindVCLWindow(客户端到屏幕(EventInfo.Location));
如果分配了(C)和(EventInfo.GestureID<0),则
edt1.文本:=C.名称
的case EventInfo.GestureID
1:多此一举;
2:DoThat;
结束;
结束;
任何更好的答案最好放在动作执行中都是受欢迎的。事实是
tractionmanager.OnExecute
事件参数action.ActionComponent=nil
但是动作本身正在执行。不知道为什么要使用动作(TAction
)和案例aGestureID
或其他什么。您可以简单地指定要执行的某个组件的手势TAction
,然后它就会发生。如果您阅读原始问题,您就会知道我想知道手势从哪个控件开始,而我在通过指定的操作执行时找不到该控件。