我搜索过并找到How can I see who triggered an action in Delphi?
该问题的解决方案是使用TAction.ActionComponent。
我有一个带有TGestureManager的表单,通过操作设置标准手势(比如说左右)。
现在在执行事件中,最好知道哪个组件已初始化手势,以便我可以决定做什么。 (例如,有两个面板,我需要知道要滚动哪个面板。)
但是,在这种情况下,TAction.ActionComponent为零。
我尝试过OnGesture,但定义了Gesture不会触发该事件,而发件人总是表单本身。
那么我怎么知道哪个组件触发了手势动作?
谢谢。
答案 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;
欢迎任何更好的答案,特别是在行动执行中。