PDA

Ver la Versión Completa : ¿Centrado de un form?


aguml
05-08-2014, 18:35:16
Hola amigos, he estado viendo como centrar un formulario en el escritorio y en las propiedades del form tenemos DesktopCenter y esta opcion va bien pero tengo una pega, si el form no es el main y lo abro desde el main por ejemplo, saldrá centrado pero si lo muevo de su posicion y lo cierro y vuelvo a hacer que aparezca ya no aparece centrado sino que aparece en la posicion donde fue cerrado. ¿se puede hacer que siempre que aparezca el form aparezca centrado sin importar la posicion donde fue cerrado? ¿como?

roman
05-08-2014, 19:05:36
Supongo que esto sucede porque al cerrar el formulario, no lo destruyes sino que simplemente lo ocultas; así que al abrirlo nuevamente, lo que realementye estás haciendo es poniéndolo visible y su posició es la últim que tenias.

Una de dos, o destruyes el formulario al momento de cerrarlo o te encargas tú mismo de centrarlo al mostrarlo.

// Saludos

ecfisa
05-08-2014, 19:10:56
Hola aguml.

Es tál como te comenta roman.


void __fastcall TFormSecundario::FormShow(TObject *Sender)
{
Left = (Screen->Width - Width)/2;
Top = (Screen->Height - Height)/2;
}


Saludos :)

aguml
06-08-2014, 00:21:42
¡genial! funciona de maravilla asi.
Por cierto, no sabia que podia no poner el Form1-> delante de cada propiedad estando en un evento de este. Interesante.

ecfisa
06-08-2014, 01:27:42
Hola aguml.
¡genial! funciona de maravilla asi.
Por cierto, no sabia que podia no poner el Form1-> delante de cada propiedad estando en un evento de este. Interesante.

Si, cada instancia de clase tiene su propia copia de datos pero comparten la copia de las funciones miembros de la clase. Motivo por el cuál las funciones miembros tienen asociados un puntero implícito, que es del tipo de la clase al que pertenece y referencia a la instancia en cuestión. Este puntero es this en C++ y en Delphi es Self, de otro modo las funciones miembros no sabrían al dato de que instancia debería aplicar las acciones.

Como es usado tán frecuentemente dentro de las funciones miembros, se permite su omisión (syntactic sugar). Es decir que el código anterior también se podría haber escrito:

void __fastcall TFormSecundario::FormShow(TObject *Sender)
{
this->Left = (Screen->Width - this->Width)/2;
this->Top = (Screen->Height - this->Height)/2;
}


Saludos :)

roman
06-08-2014, 18:36:58
Por cierto, no sabia que podia no poner el Form1-> delante de cada propiedad estando en un evento de este.

De hecho, nunca deberías poner Form1-> por delante; siempre this-> o nada como comenta ecfisa.

// Saludos