Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Desarrollo en Delphi para Android (https://www.clubdelphi.com/foros/forumdisplay.php?f=57)
-   -   Zoom en formulario o en una imagen (https://www.clubdelphi.com/foros/showthread.php?t=96900)

jmbarrio 17-10-2024 13:12:28

Zoom en formulario o en una imagen
 
Buenas tardes, estoy intentando hacer un zoom en un formulario o en una imagen con delphi 12, el código es el siguiente:

Código Delphi [-]
Procedure TF_Foto.Image1Gesture(Sender: TObject;
const EventInfo: TGestureEventInfo; var Handled: Boolean);
var
ZoomFactor: Single;
begin
if EventInfo.GestureID = sgiZoom then
begin
// Calcula el factor de zoom basado en la distancia de los dedos
ZoomFactor := EventInfo.Distance / 100;

// Aplica el factor de zoom a la imagen
Image1.Width := Round(Image1.Width * ZoomFactor);
Image1.Height := Round(Image1.Height * ZoomFactor);

// Ajusta la posición para mantener la imagen centrada (opcional)
Image1.Position.X := Image1.Position.X - (Image1.Width * (ZoomFactor - 1)) / 2;
Image1.Position.Y := Image1.Position.Y - (Image1.Height * (ZoomFactor - 1)) / 2;

Handled := True; // Marca que el gesto ha sido manejado
end;
end;

En la instrucción
Código Delphi [-]
EventInfo.GestureID = sgiZoom
que es la que se supone identifica la realizacion del zoom, sgiZoom me dice identificador no declarado

La propiedad Touch esta bien configurada asignándole un TGestureManager y habilitando el zoom.

Alguna idea de porque no reconoce el sgiZoom?

Gracias, un saludo.

navbuoy 17-10-2024 14:17:24

El error con sgiZoom que mencionas puede deberse a que estás utilizando un valor incorrecto o no definido en la versión de Delphi que estás usando. sgiZoom no es un identificador estándar en todas las versiones de Delphi.

Para resolver este problema, en lugar de utilizar sgiZoom, deberías usar el valor correcto que está predefinido en Delphi para identificar gestos de zoom. Los identificadores de gestos en Delphi suelen estar definidos en la unidad FMX.Types, y el gesto de zoom puede ser identificado mediante la constante igiZoom (Interactive Gesture ID Zoom).

Aquí te doy una versión modificada de tu código que debería funcionar:

Código Delphi [-]
uses
  FMX.Types, FMX.Gestures;

procedure TF_Foto.Image1Gesture(Sender: TObject;
  const EventInfo: TGestureEventInfo; var Handled: Boolean);
var
  ZoomFactor: Single;
begin
  if EventInfo.GestureID = igiZoom then
  begin
    // Calcula el factor de zoom basado en la distancia de los dedos
    ZoomFactor := EventInfo.Distance / 100;

    // Aplica el factor de zoom a la imagen
    Image1.Width := Round(Image1.Width * ZoomFactor);
    Image1.Height := Round(Image1.Height * ZoomFactor);

    // Ajusta la posición para mantener la imagen centrada (opcional)
    Image1.Position.X := Image1.Position.X - (Image1.Width * (ZoomFactor - 1)) / 2;
    Image1.Position.Y := Image1.Position.Y - (Image1.Height * (ZoomFactor - 1)) / 2;

    Handled := True; // Marca que el gesto ha sido manejado
  end;
end;


Pasos a seguir:
Importar las unidades correctas: Asegúrate de que tienes las unidades FMX.Types y FMX.Gestures en la cláusula uses.
Reemplazar sgiZoom: Cambia sgiZoom por igiZoom, que es el identificador correcto para el gesto de zoom multitáctil.
Verifica que el componente TGestureManager esté configurado: Asegúrate de que tu componente TGestureManager esté correctamente vinculado al control y que el gesto de zoom esté habilitado.
Este enfoque debería solucionar el problema y permitir que tu código detecte el gesto de zoom correctamente.

jmbarrio 17-10-2024 16:11:43

Muchas gracias Navbuoy era cambiar igiZoom por sgiZoom

Un saludo.

jmbarrio 18-10-2024 11:13:21

Buenas de nuevo,
una vez conseguido el zoom, al hacerse la imagen más grande necesitaría poder desplazarme por la pantalla.
Buscando información, he probado a meter la imagen dentro de un scrollbox o de un scalelayout, pero al hacer esto, el zoom me deja de funcionar.
No se si hay que configurar alguna propiedad del TScroolbox o del TScaleLayout.

Un saludo, y muchas gracias por vuestra atención.

jmbarrio 18-10-2024 13:41:41

Buenas,
nada que tenia el Align de la imagen dentro del scrollbox a Client.

Saludos.


La franja horaria es GMT +2. Ahora son las 09:47:04.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi