Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Gráficos
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 31-05-2015
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 547
Poder: 17
jhonalone Va por buen camino
Centrar imagen en formulario maximizado

Hola, amigos.
He estado buscando y buscando por el foro, cómo centrar una imagen en un formulario y aunque heencontrado algo, no soluciona mi problema.

La cuestión es la siguiente:
Tengo un TImage de 3000 x 3000 px.

Dibujo cosas partiendo del centro del canvas del mismo, que a veces son pequeñas y otras más grandes.

Estoy intentando que, al presentar el formulario maximizado, la imagen quede en el centro.

Tengo la propiedad Center del TImage a true y nada.
Intento colocar las ScrollBars del ScrollBox que contiene el TImage en su posición central y nada.

Si coloco manualmente la posición de las ScrollBars, consigo centrarla, pero cuando cambia la resolución de la pantalla, se vuelve a descolocar.

Ya estoy convencido de que no voy a conseguirlo, por éso agracecería cualquier ayuda, cualquier idea... algo que no se me haya ocurrido y que pueda resolver el problema.

Gracias anticipadas por vuestro tiempo y esfuerzo.

Saludos.
Responder Con Cita
  #2  
Antiguo 01-06-2015
Avatar de MAXIUM
MAXIUM MAXIUM is offline
Miembro
 
Registrado: may 2005
Posts: 1.488
Poder: 20
MAXIUM Va camino a la fama
Creo que no se puede en forma directa. Es decir, debes colocar la imagen sobre un TPanel y luego centrar este bajo el siguiente evento.

Código Delphi [-]
procedure TForm1.FormResize(Sender: TObject);
begin
     Panel1.Left:= (Form1.Width Div 2) - (Panel1.Width Div 2);
end;
Responder Con Cita
  #3  
Antiguo 01-06-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola jhonalone.

Intenta de este modo:
Código Delphi [-]
procedure TForm1.FormResize(Sender: TObject);
begin
  Image1.Left := (Width  - Image1.Width) div 2;
  Image1.Top  := (Height - Image1.Height) div 2;
end;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #4  
Antiguo 01-06-2015
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 547
Poder: 17
jhonalone Va por buen camino
Gracias a ambos por vuestro tiempo y esfuerzo.

Pero ninguna de las propuestas resuelve mi caso.
Recordad esto: El BitMap es de 3000x3000 pixeles. Los dibujos los hago en el centro del BitMap. A veces son pequeños y a veces más grandes. Por lo tanto, lo que pretendo es que el centro del BitMap, que es evidentemente más grande que el formulario maximizado ( en las pantallas de resolución normal; no hablo de resoluciones de 4000px, que las habrá, pero no es lo normal que se usen en casa), bueno como el mapa es más grande que la pantalla y dibujo en el centro del mapa, lo que quiero es que el centro del mapa aparezca en el centro de la pantalla, el usuario, podría con las ScrollBar desplazarse a su antojo por el mapa, pero inicialmente el centro del mapa lo quiero presentar en el centro de la pantalla (Si es posible).

Me está pareciendo que estoy pidiendo algo que probablemente no pueda hacerse en Delphi. Creo que otros entornos de programación, lo hacen automáticamente.

Finalmente, creo que voy a optar por la solución más práctica, aunque no sea la más ortodoxa, es decir: 1) Obtener empíricamente los valores de la posición de las barras de desplazamiento para las más conocidas resoluciones de pantalla. 2) Detectar la resolución que se está utilizando.
3) Aplicar las posiciones obtenidas para cada resolución (o la que más se parezca)

Voy a empezar a trabajar sobre esto. Si alguien conoce una solución más general y más ortodoxa, estaré encantado de escucharla y agradecido por su aportación, que a lo mejor le sirve a alguien más que a mí.

Saludos cordiales.
Responder Con Cita
  #5  
Antiguo 01-06-2015
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 547
Poder: 17
jhonalone Va por buen camino
Compañeros.....

¡¡ME SIGUEN CRECIENDO LOS ENANOS!!

¿Por qué pueden complicarse tanto las cosas...?

Al haer lo que comentaba en el post anterior, he podido comprobar que ¡¡TAMPOCO ME VALE!!

Acabo de constatar que la misma resolución (p.e.: 1024x768) no funciona igual en todas las pantallas. Me explico: centrando el dibujo y tomando las posiciones (horizontal y vertical) de cada uno de los dos ScrollBar, si corro el programa en la misma pantalla (4:3) funciona bien, pero si corro el programa en una pantalla 16:9 (bueno más apaisada, porque me parece que no todas las pantallas apaisadas tienen la misma proporción 16:9), si corro el programa en esta pantalla, con la resolución ajustada a 1024x768 no sale centrada. es más, si lo centro manualmente y obtengo los valores
HorzScrollBar.Position y VertScrollBar.Position, ¡¡¡SON DISTINTOS!!! de los obtenidos en en una pantalla 4:3.

Lo dicho, "me crecen los enanos del circo" o, lo que es lo mismo, se me complecan las cosas.

Si no es posible hacer lo que pretendo en Delphi, por favor, díganmelo para desistir de mi idea, porque llevo ya unos dias con este problema.

Perdón por la parrafada, pero si quiero explicarlo no hay otro modo.

Gracias por vuestro tiempo.

Saludos.
Responder Con Cita
  #6  
Antiguo 01-06-2015
Avatar de MAXIUM
MAXIUM MAXIUM is offline
Miembro
 
Registrado: may 2005
Posts: 1.488
Poder: 20
MAXIUM Va camino a la fama
Danos una captura de pantalla.
Responder Con Cita
  #7  
Antiguo 01-06-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola jhonalone.

Cita:
Empezado por jhonalone Ver Mensaje
Si no es posible hacer lo que pretendo en Delphi, por favor, díganmelo para desistir de mi idea, porque llevo ya unos dias con este problema.
Si no fuera posible no te hubiera sugerido código para hacerte perder el tiempo... No pude conseguir una imágen de 3000 x 3000 pixeles, pero esta de 3264 x 2448 servirá igual.

La imagen, reducida y a la que agregué unos ejes cartesianos en rojo para que puedas apreciar el centrado, es esta:



Con la propiedad WindowState = wsNormal:



Con la propiedad WindowState = swMaximized:



Como podrás apreciar, el centro de los ejes siempre se muestra en el medio del formulario sea cual fuere el tamaño de este o la imágen.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #8  
Antiguo 01-06-2015
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 547
Poder: 17
jhonalone Va por buen camino
Bueno. ¡Algo de LUZ!

Acabo de ir a casa de mi hermano que tiene una pantalla de 22 pulgadas 16:9 y con las mismas posiciones en las barrras de desplazamiento que en la mía de 17,3 pulgadas sigue saliendo "razonablemente" centrado.

Maxium. Creo que la explicación es bastante clara, estoy probando en 3 pantallas distintas, dos son 16:9 y otra 4:3 pero creo que te va a servir de poco, ver un punto (que es con lo que estoy haciendo las pruebas) en el centro de la pantalla si lo tengo centrado, o no verlo si pruebo en otra pantalla.

No obstante, te agradezco tu interés, y si quieres que te mande un pantallazo, dime de qué lo quieres.

Llego a la conclusión de que la aarquitectura física de la pantalla cambia las posiciones de los Scrollbar. Vamos que si quiero forzar la salida, dependiendo de las resoluciones, como había pensado, tengo que distinguir entre las pantallas 16:9 y las 4:3, ya que cada tipo de pantalla tendrá unas posiciones distintas en las barras de desplazamiento, aún cuando se representen en la misma resolución.

Que pena que no haya nada en Delphi que resuelva esta cuestión.

Gracias por vuestro interés.
Gracias por tu interés. Nuevamente.
Responder Con Cita
  #9  
Antiguo 01-06-2015
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 547
Poder: 17
jhonalone Va por buen camino
Vale, Ecfisa.

Te conozco desde hace años y me has alucinado con tus respuestas muuuchas veces. Creo que te he comentado que tienes respuestas para todo y lo he comprobado, personalmente, y con otros posts en el foro.

Tus dibujos están "razonablemente" centrados en tu post. Digo razonablemente, porque, en mi pantalla 4:3 con resolución de 800x600, que es en la que me siento más cómodo trabajando, la mitad de la izquierda mide (en wsMaximized) 27,5cm. La mitad de la derecha, en mi pantalla, mide 25,5cm.

La solución, me podría "valer". Digo con comillas, porque yo soy excesivamente meticuloso.

Quizá habría que probarla con distintas resoluciones y en distintas pantallas,

Por favor, díme como has implementado el código que me sugeriste, porque, cuando yo lo probé, después de implementar el procedimiento y llamarlo desde FormXX.OnShow, no observé el efecto que tú me presentas.

Gracias. Ecfisa.
Responder Con Cita
  #10  
Antiguo 02-06-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola jhonalone.

Aunque funciona igual, no había visto que había un ScrollBox de por medio , por lo que cambié el evento OnResize del form por el del ScrollBox y ajusté el ScrollBox alClient para poder visualizar el comportamiento cuando el form cambia de tamaño.

Básicamente el código es este:
Código Delphi [-]
...
implementation

procedure TForm1.FormCreate(Sender: TObject);
begin
  // Fijar el componente al tamaño de la imágen
  Image1.Width := 3264;
  Image1.Height:= 2448;
end;

procedure TForm1.ScrollBox1Resize(Sender: TObject);
begin
  Image1.Left := (ScrollBox1.Width  - Image1.Width) div 2;
  Image1.Top :=  (ScrollBox1.Height - Image1.Height) div 2;
end;
Creo que te va a ser util que te adjunte los fuentes de la prueba así podes revisarla sobre tu monitor, yo lo hice hasta 1366 x 768 y centra correctamente la imágen ( adjunto ).

No sé si será factible centrar también los ScrollBar, voy a revisar un poco mas ese punto a ver si se le puede encontrar la vuelta.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #11  
Antiguo 02-06-2015
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 547
Poder: 17
jhonalone Va por buen camino
Cita:
Empezado por ecfisa Ver Mensaje
Creo que te va a ser util que te adjunte los fuentes de la prueba así podes revisarla sobre tu monitor, yo lo hice hasta 1366 x 768 y centra correctamente la imágen.

No sé si será factible centrar también los ScrollBar, voy a revisar un poco mas ese punto a ver si se le puede encontrar la vuelta.
Gracias Ecfisa.
Ya me extrañaba a mí que algún código tuyo no funcionara. Sería la primera vez desde que te conozco.

He probado tu adjunto y funciona. La medición de la pantalla que te comentaba, no tiene nada que ver con el programa en funcionamiento. Centra la imagen. Lo he implementado en mi proyecto y funciona igual. He comprobado con distintas resoluciones y también funciona.

No obstante, tiene un pequeño inconveniente: las barras de desplazamiento. Habrá que centrarlas porque si no no se ve toda la imagen completa (como ya habrás observado), pero no basta con asignar la mitad del tamaño de la imagen, hará falta algo más.
Estoy probando con tu adjunto, que es más fácil de manejar que mi proyecto. Si encuentro algo, te comento.
Un Saludo.
Responder Con Cita
  #12  
Antiguo 04-06-2015
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 547
Poder: 17
jhonalone Va por buen camino
¡¡¡CREO QUE TENGO LA SOLUCIÓN!!!

No busquéis más.

Cuando afine y compruebe el código, lo subo en un adjunto.

Saludos.
Responder Con Cita
  #13  
Antiguo 04-06-2015
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 547
Poder: 17
jhonalone Va por buen camino
Hola, amigos.

Creo que he resuelto la cuestión. Bastante mejor de lo que me esperaba.Sin utilizar las barras de desplazamiento, pulsando con el botón izquierdo del ratón y arrastrando la imagen por la pantalla. Y originalmente, aparece CENTRADA.

Dejo un [ATTACH]archivo[/ATTACH] en .zip por si alguien está interesado en el asunto.

Gracias a todos por vuestro tiempo y paciencia. Especialmente a Ecfisa, cuyo tiempo vale muchiiiisimo y cuya ayuda me ha sido muy provechosa.

Saludos
Archivos Adjuntos
Tipo de Archivo: zip Project1.zip (5,2 KB, 33 visitas)
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Centrar imagen en un formulario en delphi socosa Varios 6 27-11-2014 11:13:12
Cuando pongo un formulario en maximizado se desforman los botones con delphi 7 jeremiselxi Varios 2 20-09-2012 05:12:48
!!Abrir formulario Maximizado!! Darkseratul Varios 14 12-03-2011 17:39:00
Como centrar un formulario de c++ builder kizé C++ Builder 2 06-01-2011 06:41:25
Centrar titulo en formulario alfredosg19 Varios 1 03-03-2005 16:16:04


La franja horaria es GMT +2. Ahora son las 07:40:28.


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