Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Gráficos (https://www.clubdelphi.com/foros/forumdisplay.php?f=8)
-   -   Ajustar (Stretch) & Centrar Imagen En TImage Dentro de ScrollBox (https://www.clubdelphi.com/foros/showthread.php?t=78863)

Beaker_ 22-05-2012 02:31:59

Ajustar (Stretch) & Centrar Imagen En TImage Dentro de ScrollBox
 
Buena tarde. Quisiera saber si alguién me pudiera ayudar en un par de problemas que tengo.
Esta es mi situación:
Tengo que hacer un programa el cual cargue una imagen en un TImage (lo cual ya hago) y aplicarle zoom de acuerdo a la entrada del usuario.
La imagen inicialmente la ajusto al TImage (propiedad Stretch) para que se vea bien y completa.
Este TImage está dentro de un ScrollBox para cuando se tenga que hacer zoom.
Cuando el usuario quiere hacer zoom, le cambio las propiedades al TImage, para que se pueda ver la imagen con base a la escala de Zoom, y como está dentro de un ScrollBox, tiene las barras para recorrer la imagen

Código Delphi [-]
imagen.Stretch := False;
imagen.AutoSize := True;

Mi primer problema es, cómo mantener centrada la imagen dentro del ScrollBox?
La otra situación es que el usuario puede "restaurar" la vista para que se vea de la manera inicial, es decir, Stretch/Ajustada, por lo cual cambio de nuevo los valores como muestro abajo.
Sin embargo, la imagen se sigue viendo grande (ya que es más grande que el TImage), con las barras de ScrollBox y sin aplicar Stretch. Será que después de desactivar el Stretch y activar el Autosize, ya no se puede restaurar?

Código Delphi [-]
imagen.AutoSize := False;
imagen.Stretch := True;

ElDioni 22-05-2012 13:13:53

Hola,

para centrar la imagen tendrás que jugar con el top y el left de la imagen y con el heigth y width del scrollbox para ir centrando la imagen según vaya aumentando y disminuyendo.
El stretch lo que hace es ajustar la imagen que cargas al tamaño del objeto TImage, no al revés, tienes la opción proportional para conseguir que la imagen no pierda sus proporciones originales y no esté deformada pero tampoco te va a cargar la imagen a su tamaño original, cuando cargas la imagen al principio, puedes cargar sus valores de width y height en unas variables y cuando pulsen restaurar cargar el valor de esas variables.

Saludos.

Beaker_ 22-05-2012 16:24:44

Muchas gracias por tu respuesta, la cuestión es que si podía yo restaurar el stretch después de ampliar la imagen usando el scroll, el problema era que no me mostraba el scroll horizontal. Una vez que hice más grande el scroll para así poder ver la barra horizontal, lo cual si funcionó, dejé de poder restaurar la imagen, por lo cual si se ha de poder, pero no sé si tengo que cambiar las propiedades del scroll o que sucede... Gracias

Caro 22-05-2012 17:36:57

Cita:

Empezado por Beaker_ (Mensaje 433197)
Muchas gracias por tu respuesta, la cuestión es que si podía yo restaurar el stretch después de ampliar la imagen usando el scroll

Hola Beaker_, si utilizas solo la propiedad Strech si se puede sobre el mismo tamaño del TImage, pero si queres ampliar tendrías que asignar tu, su nuevo Width y Heigth y al restaurar lo mismo, si utilizas el AutoSize no se puede restaurar al tamaño original, tienes que guardar en alguna variable su Width y Height inicial como te indica ElDioni, y estaríamos en lo mismo si utilizaramos solo Strech.

Para que parezca centrado puedes utilizar la propiedad Margin de tu ScrollBox.

Código Delphi [-]
 aWidth := imagen.Width;
 aHeigth := imagen.Height;
 ScrollBox1.VertScrollBar.Margin := imagen.Top;
 ScrollBox1.HorzScrollBar.Margin := imagen.Left;
 imagen.Stretch := False;
 imagen.AutoSize := True;

 //Parar restaurar
 imagen.AutoSize := False;
 imagen.Stretch := True;
 imagen.Width := aWidth;
 imagen.Height := aHeigth;
 ScrollBox1.VertScrollBar.Margin := 0;
 ScrollBox1.HorzScrollBar.Margin := 0;

Saluditos


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

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