Cómo controlar los gestos en las aplicaciones

Rad Studio nos ofrece un componente llamado tGesture para detectar los movimientos de los dedos sobre la pantalla del dispositivo.
Utilizarlo es muy sencillo, sólo hay que abrir la Tool Palette y colocarlo en el Form principal del proyecto.
Después desde el Object Inspector hay que desplegar la propiedad Touch y asociarlo a GestureManager, con ello nos aparecerán dos nuevas propiedades: Gestures (gestos estándar) e InteractiveGestures.



En este link tenéis en detalle la descripción de todos los gestos que reconoce.
Desplegando en el árbol Gestures - Standard tendremos que hacer clic sobre el gesto que queramos reconocer (izquierda, derecha, arriba, abajo, etc...)

GESTURES:
Consta de más de 30 gestos, como  Left, Right, Scratchout, Circle, ChevronUp, etc...

INTERACTIVE GESTURES:
Son gestos Multi-touch que disparan el evento OnGesture cuando son detectados. El parámetro EventInfo da información adicional sobre la localización del punto de toque, el ángulo, la inercia del desplazamiento, etc...
Los InteractiveGestures pueden ser: "Zoom", "Pan", "Rotate", "Two Finger Tap", "Long Tap", "Double Tap", y  "Press And Tap".

Para obtener el gesto detectado en el evento OnGesture teclearemos:

procedure TForm1.FormGesture(Sender: TObject; const EventInfo: TGestureEventInfo; var Handled: Boolean);
var
  S: String;
begin
  if GestureToIdent(EventInfo.GestureID, S) then
    ShowMessage(S)
  else
    ShowMessage('Could not translate gesture identifier');
end;
--

Por otra parte también quería enseñaros otra forma menos utilizada para detectar los gestos sin necesidad de añadir componentes a la app, pero más sencilla si cabe, que es utilizar el evento OnTouch del Form, del siguiente modo:



//Autor:http://www.danielespinetti.it
procedure TForm1.FormShow(Sender: TObject);
begin

  FStartingPoint := PointF(0, 0);
  if TPlatformServices.Current.SupportsPlatformService(IFMXScreenService,
    IInterface(ScreenSvc)) then
  begin
    FDeviceScale := ScreenSvc.GetScreenScale();
    FScreenWidth := ScreenSvc.GetScreenSize().X;
    FScreenHeight := ScreenSvc.GetScreenSize().Y;
  end;

  Rectangle1.Width := FScreenWidth * 2;
  Rectangle1.Height := FScreenHeight * 2;
  Rectangle1.Position.X := 0;
  Rectangle1.Position.Y := 0;

end;

procedure TForm1.FormTouch(Sender: TObject; const Touches: TTouches;
  const Action: TTouchAction);
begin
  if Length(Touches) <> 2 then
    exit;
  case Action of
    TTouchAction.None:
      ;
    TTouchAction.Up:
      begin
        previousTranslateX := Rectangle1.Position.X;
        previousTranslateY := Rectangle1.Position.Y;
      end;
    TTouchAction.Down:
      begin
        startX := Touches[1].Location.X - previousTranslateX;
        startY := Touches[1].Location.Y - previousTranslateY;
      end;
    TTouchAction.Move:
      begin
        Rectangle1.Position.X := Touches[1].Location.X - startX;
        Rectangle1.Position.Y := Touches[1].Location.Y - startY;
      end;
    TTouchAction.Cancel:
      ;
  end;

Para probarlo lo único que tenéis que hacer es colocar un rectángulo en el Form y colgando de él una imagen

compilar y ejecutar el proyecto y probar a mover el rectángulo utilizando dos dedos.




Quizás te pueda interesar:
App para mostrar moléculas en 3D