Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Centrar Form sin parpadeos. (https://www.clubdelphi.com/foros/showthread.php?t=40539)

waly2k1 20-02-2007 16:15:37

Centrar Form sin parpadeos.
 
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:
Código Delphi [-]
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:
Código Delphi [-]

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:
Código Delphi [-]
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

Bien, lo probaré al volver
 
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???
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


La franja horaria es GMT +2. Ahora son las 01:47:33.

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