Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Desarrollo en Delphi para Android
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy


Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-10-2024
jmbarrio jmbarrio is offline
Miembro
 
Registrado: may 2003
Posts: 102
Poder: 22
jmbarrio Va por buen camino
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.
Responder Con Cita
  #2  
Antiguo 17-10-2024
navbuoy navbuoy is offline
Miembro
 
Registrado: mar 2024
Posts: 280
Poder: 2
navbuoy Va por buen camino
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.

Última edición por navbuoy fecha: 17-10-2024 a las 14:22:48.
Responder Con Cita
  #3  
Antiguo 17-10-2024
jmbarrio jmbarrio is offline
Miembro
 
Registrado: may 2003
Posts: 102
Poder: 22
jmbarrio Va por buen camino
Muchas gracias Navbuoy era cambiar igiZoom por sgiZoom

Un saludo.
Responder Con Cita
  #4  
Antiguo 18-10-2024
jmbarrio jmbarrio is offline
Miembro
 
Registrado: may 2003
Posts: 102
Poder: 22
jmbarrio Va por buen camino
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.
Responder Con Cita
  #5  
Antiguo 18-10-2024
jmbarrio jmbarrio is offline
Miembro
 
Registrado: may 2003
Posts: 102
Poder: 22
jmbarrio Va por buen camino
Buenas,
nada que tenia el Align de la imagen dentro del scrollbox a Client.

Saludos.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Zoom de una imagen en otra imagen Juliajuli Gráficos 1 02-09-2013 18:17:35
Zoom imagen por mouse RebeccaGL Varios 0 02-05-2013 16:20:46
Imagen con efecto zoom lisette C++ Builder 2 28-08-2012 23:52:08
Zoom en la imagen fasthorse Gráficos 6 07-08-2008 14:32:18
zoom a imagen kapullok_2006 Gráficos 4 04-04-2007 06:17:31


La franja horaria es GMT +2. Ahora son las 10:18:58.


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
Copyright 1996-2007 Club Delphi