Получить местоположение нажатия пальца в iOS и Android

Я использую Delphi XE5 для разработки под Android (и iOS).

Используя InteractiveGestures из свойства Touch в Delphi XE5, я могу получить GestureEvent для масштабирования, панорамирования, поворота, TwoFingerTap, PressAndTap, LongTap и DoubleTap. Все это поставляется с объектом TGestureEventInfo, где я могу получить местоположение события, например. координаты пальцев.

Тем не менее, кажется, что это не жест, который представляет собой простое касание/нажатие. Я знаю, что в этом случае запускается событие OnClick, но событие OnClick не связано с объектом TGestureEventInfo, поэтому я не могу получить местоположение касания. Это похоже на действительно важное событие, о котором нужно получить информацию.

Я что-то пропустил? Как я могу получить местоположение простого жеста касания?


person Daniel    schedule 04.10.2013    source источник
comment
Как насчет OnMouseDown()?   -  person iMan Biglari    schedule 04.10.2013


Ответы (1)


Используйте событие OnMouseDown/Up:

procedure TForm17.Button1MouseDown(Sender: TObject; Button: TMouseButton; 
                                   Shift: TShiftState; X, Y: Single);
begin

end;

Смотрите, вы получаете координаты X и Y.

procedure TForm17.Button1Click(Sender: TObject);
begin

end;

Однако с OnClick вы ничего не получите.

Осторожно!
Обратите внимание, что OnClick срабатывает после MouseDown внутри элемента управления и MouseUp также внутри того же элемента управления, без каких-либо других MouseUp или Down. Вы должны проверить это, если хотите иметь то же поведение, что и OnClick.

Если вы щелкнете внутри кнопки и выйдете за ее пределы, прежде чем отпустить щелчок, она не должна быть зарегистрирована как click.

Почему OnClick не дает координаты
OnClick в FireMonkey — это тот же OnClick, что и в VCL.
OnClick — это сумма OnMouseDown и OnMouseUp, поэтому нет ни одного места, где происходит щелчок. произошло, потому что VCL не хотел выбирать между координатой Down или Up.

Мой совет
Активируйте событие OnClick, но зарегистрируйте координату в MouseDown.

procedure TForm17.Button1MouseDown(Sender: TObject; Button: TMouseButton; 
                                   Shift: TShiftState; X, Y: Single);
begin
  ClickGestureInfo.GestureID:= somethingNotAlreadyInUse;
  ClickGestureInfo.Location:= Point(x,y);
end;

function ClearGestureInfo: TGestureEventInfo;
begin
  FillChar(Result, SizeOf(Result), #0);
end;

procedure TForm17.Button1Click(Sender: TObject);
begin
  if ClickGestureInfo.GestureID = somethingNotAlreadyInUse then begin
    //do stuff
    ClickGestureInfo:= ClearGestureInfo; 
  end;
end;

Обычно нет смысла также записывать координаты OnMouseUp, потому что щелчок — это только щелчок, если MouseDown и MouseUp находятся рядом в пространстве.

person Johan    schedule 04.10.2013
comment
Это сработало отлично. Я должен был подумать о MouseUp/Down, но, думаю, меня оттолкнуло название, так как я делал сенсорные жесты. - person Daniel; 05.10.2013