Как я могу увидеть, кто вызвал стандартное действие Gesture в Delphi? - PullRequest
3 голосов
/ 06 марта 2012

Я искал и нашел Как узнать, кто вызвал действие в Delphi?

Решением этого вопроса является использование TAction.ActionComponent.

У меня естьформа с TGestureManager, устанавливающая стандартный жест (скажем, влево и вправо) с действиями.

Теперь в событии execute полезно знать, какой компонент инициализировал жест, чтобы я мог решить, что делать,(например, есть две панели, и мне нужно знать, какую панель прокручивать).

Однако в этом случае значение TAction.ActionComponent равно nil.

Я пробовал OnGesture, но определенный жест не запускаетсяэто событие, а отправителем всегда является сама форма.

Итак, как я могу узнать, какой компонент вызвал это действие Жест?

Спасибо.

1 Ответ

0 голосов
/ 07 марта 2012

При дальнейшем тестировании я думаю, что одним из решений может быть пропустить использование action и использовать 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;

Любой лучший ответ желательно лежать внутри действия, выполнение приветствуется.

...