Hagamos un programa que centre un par de formularios. Uno se centrará en relación con la pantalla, y el otro se centrará en relación al primer formulario.
Abra el entorno de desarrollo de Lazarus / Typhon y cree una aplicación como lo hicimos en ejemplos anteriores. Guarde el proyecto llamando a esta unidad como centermain. Agregue componentes visuales MainMenu y XMLPropStorage a este formulario.
Haga clic derecho en «MainMenu1» y seleccione «Menu Editor …». Agregue un ítem «File» y cuatro sub-ítems: «Show», «Center Main», «Create Centered» y «Exit».
Haz click en File | Show y aparecerá el editor de código. Agrega el siguiente código al manejador de eventos generado:
procedure TForm1.MenuItem2Click(Sender: TObject); var R: TRect; begin R := Application.MainForm.BoundsRect; //Center Form 2 on Form 1 (Main Form) with Form2 do { Calculate size/position of Form2, then Show it } begin Top:=((( R.Bottom-R.Top)-Height)div 2)+ R.Top; Left:=(((R.Right-R.Left)-Width)div 2)+ R.Left; Show; //It will center second form on the first each time it is executed end; end;
Tu controlador de eventos puede tener un nombre diferente que MenuItem2Click. Depende de si has creado este elemento del menú antes o después de los otros elementos del menú, o si te has atrevido a cambiar el nombre del elemento.
Este controlador de eventos muestra un segundo formulario que aún no habíamos creado. Alínea el segundo formulario a este primer formulario para aparecer delante de este.
Para el elemento de menú Center Main, agrega lo siguiente:
procedure TForm1.MenuItem3Click(Sender: TObject); begin //Center Main Form on screen Top:=(( Screen.Height-Height)div 2); Left:=((Screen.Width-Width)div 2); Show; //It will center this form on the screen each time it is executed end;
Esto va a centrar el formulario actual en la pantalla.
Para el ítem de menú Create Centered agrega el siguiente código:
procedure TForm1.MenuItem4Click(Sender: TObject); var f : TForm; begin f := CreateMessageDialog('Test', mtCustom, [mbOK]); f.Position := poOwnerFormCenter; f.ShowModal; end;
Esto creará un Dialog Box que esperará que presiones OK en forma modal. En este modo no podrás llamar a otros formularios de la aplicación hasta que hagas click en el botón OK.
Para el menú Exit agrega el siguiente código:
procedure TForm1.MenuItem5Click(Sender: TObject); begin Close; end;
Como el formulario 1 es el formulario principal, salir de él significa que la aplicación termina su ejecución.
Selecciona XMLPropStorage1. En la pestaña de properties (propiedades) en el Object Inspector, tenemos que poner el atributo Active como verdadero (check), y el nombre del archivo a guardar los datos (FileName). En nuestro ejemplo es form1pos.xml.
Selecciona el Formulario Form1 en el Object Inspector, hacemos click en sessionProperties, y click en el botón […]. Aparece n formulario. Entonces selecciona cada una de las propiedades del formulario Left, Top, Width, Height y agregalas con el botón [Add]. Termina con [Ok].
Ahora precisamos crear el formulario Form2. Agregamos el botón [Button1] y salvamos a la unidad como centform. Haciendo doble click en Button1 podemos escribir el manejador de eventos y agregamos Close;
procedure TForm2.Button1Click(Sender: TObject); begin Close; end;
Esto cerrará el formulario Form2.
Ahora podemos compilar y ejecutar nuestro progrma. Simplemente juega con el y ve qué sucede. Verifica que el programa guarda la posición de la aplicación entre corridas.