PDA

Ver la Versión Completa : Centrar Form sin parpadeos.


waly2k1
20-02-2007, 16:15:37
Si ya lo se..., mas de uno me va a mandar a fijarme temas anteriores, pero no encontré algo específico.

Bueno como sabrán por default Delphi crea los forms al arrancar la aplicación y los mantiene hide y cuando el usuario requiere dicho form lo visualiza. Hasta ahí estamos, pero porque no me centra los form una vez que lo cerró la primera vez ?. No quiero crear cada form cada vez que lo requiera si ya lo tengo en memoria. Y si lo centro en el 'Activate' no puedo evitar el parpadeo horrible. Además supongo la cosa se pone peor al usar VCLSkin, hasta me minimiza la aplicación, eso sí lo centra. Puaj! es repulsivo ver una cosa de esta. Bueno espero me puedan tirar una rta.

Saludos y muchas gracias!!!
Sigan así!!!!

Lepe
20-02-2007, 16:35:42
Porque es el comportamiento que tienen los forms.

Como sabes, realmente no los cierra, los esconde. Al hacer un show, mirando su código hace esto:

procedure TCustomForm.Show;
begin
Visible := True;
BringToFront;
end;

Como ves, no modifica sus propiedades Left y Top y esto es lógico.

Imagina que creo una ventana, antes de mostrarla cambio su top y left para ponerla a mi gusto en un lugar de la pantalla y después Show lo centra en pantalla.... grrrrrr.

Se me ocurre, modificar el comportamiento de los forms así, Crea uno nuevo que se usará como base:


TBaseForm = class(tform)


protected
procedure DoShow;override;
end;

implementation

procedure TBaseForm.DoShow;
begin
// aquí centras el form,
inherited DoShow;
end;

Guarda el .pas como UbaseForm y el form como frmBaseForm.

Ahora te vas a todos tus Forms, y donde pone:

FormXX = Class(TForm)

sustituyes el "TForm" por "TBaseForm" y haces un "uses UBaseForm" de la unidad recien creada. Todos tus forms, al heredar ahora de TBaseForm, harán lo que quieres.

Saludos

waly2k1
20-02-2007, 17:08:27
Lepe, gracias por tu rta. lamentablemente estoy trabajando y acá es with VB
y no puedo probar esto.
Tengo otra consulta mejor Cómo creo un arrays de columnas??? (http://www.clubdelphi.com/foros/showthread.php?t=40540)
esta te va a gustar más hehe. Está creo en varios también.

Saludos y muchas gracias por tu tiempo

Lepe
20-02-2007, 20:10:52
Pues a pelo. Crea una rutina en tu form que se llame ShowCentered, en ella centras el form en pantalla y luego llamas a Show.

Siempre tendrás que recordar llamar a "ShowCentered" en lugar de "Show", pero en mis humildes conocimientos de VB no se me ocurre otra cosa.

Saludos