Delphi paso a paso (III): Controles (I) Propiedades de los menús

Transcripción

Delphi paso a paso (III): Controles (I) Propiedades de los menús
Delphi paso a paso (III): Controles (I)
Por Vladimir Algara
Debido a un desliz lamentable en la entrega anterior, además, ni siquiera puedo culpar a otro
pues lo cometí yo, dejé de comentar la forma que tiene Delphi de implementar los menús locales
a una ventana/control. Esos menús que aparecen cuando pinchamos con el botón derecho del
ratón (izquierdo en los zurdos) y que tan de moda ha puesto Windows 95.
En esta entrega, y antes de empezar a mover controles de arriba a abajo, dedicaré unas líneas
a la forma de crear menús locales y que, de haberme percatado en su momento, debieran haber
aparecido en el monográfico de menús del mes pasado. Ustedes sabrán disculparme.
Propiedades de los menús locales
En la figura 1 vemos un ejemplo del menú en el editor de menús y el aspecto que adquiere la
ventana de propiedades (o ventana del inspector de objetos) de dicho menú. Como recordará el
lector, los menús se elegían en la paleta de herramientas estándar y se ubicaban en cualquier
parte de la ventana; si hacíamos doble clic en este elemento entrábamos en el editor de menús,
donde el inspector de objetos recogía las características y eventos posibles que un determinado
ítem (o todo el menú) podía entender y ejecutar. Una vez terminada la fase de diseño, y gracias
al nombre simbólico (Name) dado al menú, asociábamos éste a la ventana. El proceso para los
menús locales no es similar al de los menús generales, es idéntico; así que no haré perder más
tiempo en explicar cómo operar, y me limitaré a poner un sencillo ejemplo.
Figura 1: Ejemplo de menú local
Ejemplo de menú local para salir de una aplicación
1.- Selecciónese el icono conveniente en la paleta de herramientas (ver figura 2)
1
Algoritmo. La revista para el programador de sistemas de bases de datos. http://www.eidos.es - © Grupo EIDOS
Figura 2: Icono de la paleta de herramientas
2.- Ubíquese a discreción en la ventana elegida.
3.- Edítese y comiéncese a añadir ítems y subítems entre 1 y 200 (o más). Añadir uno cuyo
evento OnClick (en Events) se llame Salir.
4.- Púlsese [Intro] para entrar en el editor de código fuente y poder especificar Close según se
aprecia en el fuente 1.
// --- Fuente 1 ---------------------------------------------------------procedure TForm1.Salir(Sender: TObject);
begin
Close;
end;
5.- Hágase clic en la ventana para poder manipular su inspector de objetos.
6.- Selecciónese la entrada PopUpMenu y asóciesele el PopUp creado.
7.- Ejecútese a fuego rápido la "aplicación".
8.- Sírvase pulsar el botón derecho del ratón sobre la ventana y elegir el ítem encargado de
acabar.
De nuevo, disculpas por el parche mal ubicado y dedicado a menús locales. Aunque, bien
pensado, podría haber recurrido a la coartada de explicarlo como un control más, pues eso,
precisamente, es lo que es.
Controles varios
Los controles por excelencia son los PushButton. Estos botones son los encargados de lanzar
los procesos, cerrar las ventanas secundarias, abrir otras, dar conformidad a los datos, etc.;
motivo principal por el que están presentes en casi cualquier aplicación, por sencilla que ésta
sea.
Los iconos que en la paleta de herramientas (no seleccionado y seleccionado) representan a los
botones "normales" (los llamo así en contraposición a los botones con un gráfico en su interior)
son los de la figura 3.
Figura 3: Iconos para botones
Una vez seleccionados se llevan a la ventana y allí pasamos a darles especificidades.
Nota: Hay que recordar que cada vez que se pincha alguno de los elementos en la paleta de
herramientas y se lleva a la ventana, éste se deselecciona automáticamente, debiendo pinchar
sobre el control deseado tantas veces como controles se quieran poner. Esto se soluciona si, en
2
Algoritmo. La revista para el programador de sistemas de bases de datos. http://www.eidos.es - © Grupo EIDOS
vez de pinchar directamente, pinchamos manteniendo pulsado [Shift]. El icono, al contrario de lo
que ocurría con anterioridad, permanecerá hundido hasta que no lo pinchemos nuevamente, lo
hagamos en otro distinto, o sobre el icono que representa al cursor del ratón (presente en
cualquier pestaña de la paleta de herramientas).
El nombre (Name) dado a un control de tipo botón, así como su literal inicial es Button1, Button2,
etc., si bien éstos se pueden rebautizar como nos venga en gana mediante sus propiedades
Name y Caption, respectivamente, en la ventana del inspector de objetos.
Un control puede ser Marcado, Copiado/Cortado y Pegado hacia y desde el portapapeles. Todo
ellos con la secuencia de teclas habituales en la que [Ctrl-C] copia, [Ctrl-X] corta y [Ctrl-V] pega.
Además, la barra de herramientas se puede configurar (opción Configure de su menú local) y
agregarle aquellos iconos que se necesiten, entre los cuales se encuentran los que manipulan la
información del portapapeles mencionada. En la figura 4 se puede ver una barra de herramientas
configurada, que ofrece un aspecto distinto al ofrecido cuando arrancamos Delphi por primera
vez.
Figura 4: Configuración de la barra de herramientas
Movilidad de controles
En este subapartado quiero contar, someramente, qué tipo de operaciones se pueden realizar
con los controles que se añaden a una ventana; entendidas éstas como la posibilidad de mover,
redimensionar, borrar, alinear, etc. los controles disponibles. Para ello podemos partir de una
ventana que albergará tres botones, del mismo tamaño que uno de ellos, alineados respecto del
primero y colocados en la esquina inferior derecha de una ventana según una rejilla (grid) de
referencia cuyos puntos equidistan 6 píxels entre sí.
Gráficamente se puede comprender mejor. Se quiere partir de una ventana como la de la figura
5 y se quiere llegar a la de la figura 6.
Figura 5: Controles descolocados
3
Algoritmo. La revista para el programador de sistemas de bases de datos. http://www.eidos.es - © Grupo EIDOS
Figura 6: Controles colocados según Grid
Para esta maniobra habremos de:
1.- Elegir un Grid para la ventana. Accedemos a la opción Options del menú Tools. En la
ventana de diálogo que aparece marcaremos los CheckBox correspondientes a Display
Grid y Snap To Grid (el primero visualiza la rejilla, el segundo fuerza que los elementos se
adapten a su contorno -dése cuenta que podemos tener un Grid que sirva de referencia,
pero, al tiempo, permitir que los controles no se constriñan a él-) y se fijará la separación
entre los puntos horizontales y verticales (6 para ambos).
2.- Elegir el botón de referencia. Por ejemplo nos puede servir el Botón 1, lo pinchamos y lo
hacemos tan grande como queramos.
3.- Amoldar el tamaño del resto de los botones al de referencia. Para ello se seleccionan todos
los botones, bien marcando un área en cuyo interior se encuentren todos los controles
deseados, bien eligiéndolos uno a uno mientras se mantiene presionada la tecla [Shift]. Se
pincha con el botón derecho del ratón sobre la ventana y se elige la opción Size...;
aparecerá una ventana en la que se permite:
1.2.3.4.-
No realizar cambios
Reducir todos los tamaños adaptándolos al del más pequeño
Ampliar todos los tamaños adaptándolos al del más grande
Fijar una dimensión
Cualquiera de esas operaciones se puede aplicar al redimensionamiento a lo ancho o a lo
alto del control. Si nos fijamos, no se puede especificar que todos los controles se adecúen
al mismo tamaño del "mediano", sino al del más grande o al del más pequeño; pero esto es
suficiente para contemplar todo los casos, pues lo habitual es elegir un conjunto de
controles (con su tamaño por defecto), manipular uno haciéndolo más grande o más
pequeño, y adaptar el resto.
4.- Alinear los botones. Esta operación se puede llevar a cabo por medio del la opción Aling...
del menú local a la ventana, o haciendo aparecer la ventana de diálogo de la figura 7. A
través del menú local aparecerá una ventana de diálogo con la misma lógica que la que
aparecía cuando intentábamos ajustar el tamaño (Size...), en la que se permite:
1.2.3.4.5.6.-
No realizar cambios
Alinear a la izquierda y/o arriba
Centrar
Alinear a la derecha y/o abajo
Espaciar idénticamente los controles
Centrar en la ventana
4
Algoritmo. La revista para el programador de sistemas de bases de datos. http://www.eidos.es - © Grupo EIDOS
Todo ello según dos criterios, uno hacerlo horizontal y/o verticalmente, y el otro hacerlo respecto
a un control de referencia. La forma que tiene Delphi de determinar cuál es el control de
referencia consiste en la manera en que son elegidos dichos controles. Por ejemplo, cuando
elijamos los tres controles de nuestro ejemplo, aquél que se pinche en primer lugar será el que
sirva de referencia.
A través de las distintas opciones de la ventana, que se aprecia en la figura 7 (a la que se
accede tras elegir la opción Alignment Palette del menú View), se pueden hacer las mismas
cosas que con la ventana de diálogo recién comentada.
Figura 7: Controles colocados según Grid
Un control, cómo no, se puede borrar sin más que seleccionarlo y pulsar la tecla [Supr].
Además, se puede ensayar cualquiera de las opciones que aparecen en el menú local, algunas
de las cuales hemos repasado hace un momento.
-
Aling To Grig: Forzar a que los controles se ciñan a la rejilla visualizada.
-
Bring To Front: Traer delante el control elegido. Cuando dos o más controles ocupan un área
común (por ejemplo un RadioButton dentro de un GroupBox) se permite fijar cuál se
encontrará por encima de cuál.
-
Send To Back: Llevar detrás (la explicación es análoga a la de arriba).
-
Aling...: Ya comentada
-
Size...: Ya comentada
-
Scale...: Fijar un tamaño proporcional según el tamaño actual del control. Un valor de 100
equivale al mismo tamaño, un valor inferior a 100 (hasta un mínimo del 25%) provoca la
disminución proporcional del tamaño actual del control y un valor superior (hasta un 400%) un
aumento proporcionado. Este escalado es aplicable, no solo a un control específico, sino a un
conjunto de ellos previamente seleccionados.
-
Tab Order... y Creation Order...: Se permite fijar la prioridad de los elementos visuales y no
visuales de una ventana, con el fin de que en ejecución unos tengan preferencia sobre otros.
-
Add To Repository: Añadir la ventana recién configurada a la relación de las ventanas por
defecto.
-
View as Text: Una ventana lleva asociado un código fuente encargado de ponerla en marcha.
Dicho código se permite hojearlo mediante esta opción. Dada la correspondencia entre lo que
se ve en la ventana y su código fuente, como el contenido del código fuente y lo que éste
genera, cualquier modificación en uno conllevará la actualización del otro, y viceversa. Cuando
se está inspeccionando el código fuente, habrá que volver a pulsar el botón derecho del ratón
y elegir la opción View as Form (o pulsar [Ctrl-F12]) para volver a disponer de la ventana
original.
Propiedades de los botones
5
Algoritmo. La revista para el programador de sistemas de bases de datos. http://www.eidos.es - © Grupo EIDOS
Como elemento añadido, decir que no hay por qué conformarse con el tamaño que el editor le
da por defecto a los botones para luego redimensionar, sino basta con pinchar en la ventana y,
sin soltar, arrastrar el ratón hasta conseguir el tamaño deseado, soltar, y, acto seguido,
disponer de un botón con las proporciones perfiladas.
Las propiedades y eventos que un control tiene se pueden consultar y alterar en el inspector de
objetos. los controles poseen propiedades comunes (como Caption, Name, Left, Hint, etc.),
aunque hay otras que son particulares para cada uno. En este apartado se verán las
propiedades comunes y particulares de los controles de tipo botón, con el objetivo de que las
comunes queden zanjadas para ulteriores explicaciones. Someramente, y según aparecen en el
inspector de objetos, son:
-
Cancel. Permite ejecutar el código asociado al botón cuando se pulsa la tecla [Esc]. Suele
ser habitual asociarla al botón de cerrar la ventana; de esa forma pulsando [Esc] se da la
impresión de abandono de la ventana actual para ir a la anterior. Esta propiedad es particular
de los controles de tipo botón y se ha de poner a True cuando queramos activarla y False en
caso contrario.
-
Caption. Contenido del control. Es el literal que se visualiza y al que podemos añadir el
carácter & para convertir en acceso rápido la tecla que lo precede. &Aceptar se traduciría en
el botón como Aceptar, lo cual permitiría pulsar la tecla A para que la acción asociada al
botón se ejecutara.
-
Cursor. Aspecto que adoptará el cursor del ratón cuando lo paseemos sobre el control. El
tipo de cursor puede ser definido por el usuario, pero lo más rápido es asignarle alguno de
los predefinidos (definidos por medio de identificadores, tal y como se ve en la figura 8).
Figura 8: Cursores predefinidos
-
Default. Permite ejecutar el código asociado al botón cuando se pulsa la tecla [Intro]. Suele
ser habitual asociarla al botón de cerrar la ventana; de esa forma pulsando [Intro] se da la
impresión de acceder de la ventana actual para ir a la siguiente. Esta propiedad es particular
de los controles de tipo botón y se ha de poner a True cuando queramos activarla y False en
caso contrario.
-
DragCursor. Aspecto del cursor cuando se pasea el puntero sobre el control si se está
pinchando y arrastrando (Drag&Drop) elementos entre ventanas de una aplicación y/o entre
6
Algoritmo. La revista para el programador de sistemas de bases de datos. http://www.eidos.es - © Grupo EIDOS
aplicaciones Windows.
-
DragMode. Forma en la que se va a controlar la técnica de arrastrar y soltar. Admite dos
valores: automático y manual.
-
Enabled. Determina el estado habilitado o inhabilitado (color gris y no accesible) de un
control.
-
Font. tipo de letra, tamaño, color etc. del literal que aparecerá en el control.
-
Heigth y Width. Alto y ancho, en píxels, del control.
-
HelpContext. Ayuda asociada al control
-
Hint y ShowHint. Literal del tip (etiqueta) que se mostrará cuando paremos el puntero del
ratón sobre el control. Cuando ShowHint está a true el Hint se muestra, si no, no.
-
Left y Top. Coordenadas izquierda y superior que el control ocupa en la ventana.
-
ModalResult. Valor devuelto por el control cuando se pulsa.
-
Name. Nombre de control. Este nombre simbólico es el que se usa a lo largo de toda la
aplicación para modificar propiedades del control en tiempo de ejecución.
Boton1.Enabled := true;
-
PopUpMenu. Menú local asociado al control. Se trata de un menú particular del control que
aparece cada vez que pulsamos el botón izquierdo del ratón sobre el control específico, y no
en otra parte.
-
TabOrder. Secuencia en que se desplaza el foco al pulsar tabulador en la ventana. Delphi
mantiene un orden secuencial a medida que se van añadiendo controles a la ventana. Este
orden empieza en 0 y se va incrementando de 1 en 1, pero es modificable por el diseñador
de dicha ventana.
-
TabStop. Habilita o no que la pulsación del tabulador tenga efecto sobre el control.
-
Tag. Número identificativo del control.
-
Visible. Hace desaparecer el control de la ventana, o no.
Eventos posibles, o procedimientos que se llaman cada vez que...
-
OnClick: ...se pulsa un botón.
-
OnDragDrop, OnDragOver, OnEndDrag, OnStartDrag: ...se realiza una operación de
arrastrar y soltar (Drag&Drop)
-
OnEnter: ...un control pasa de estar inactivo a estar activo.
-
OnExit: ...el foco abandona el control en curso.
-
OnKeyDown, OnKeyPress, nKeyUp: ...se presiona, se mantiene pulsada o se suelta una
tecla.
7
Algoritmo. La revista para el programador de sistemas de bases de datos. http://www.eidos.es - © Grupo EIDOS
-
OnMouseDown, OnMouseMove, OnMouseUp: ...se presiona el botón del ratón, se mueve el
puntero o se suelta el botón del ratón.
Tanto las propiedades como los eventos se pueden asociar masivamente a un conjunto de
controles. Para ello seleccionamos aquéllos que se desean alterar, y se cambia alguna de sus
propiedades. Por ejemplo si queremos que todos los botones tengan el literal "Botón",
modificaríamos la propiedad Caption de todos los que estuvieran seleccionados; seguidamente
habrá que ir añadiendo 1, 2, 3, etc. para cada uno de ellos, pero no Botón 1, Botón 2, etc.
Operaciones como poner el mismo Name a una colección de controles no están permitidas,
pues el nombre es unívoco.
Propiedades de los textos
Para ver que muchas de las propiedades y muchos de los eventos son comunes entre controles,
echemos un vistazo al inspector de objetos correspondiente a un texto (ver figura 9)
Figura 9: Propiedades de un control de texto
Como se puede ver, algunas nuevas respecto a los botones, pero también muchas comunes.
Entre las nuevas cabe destacar las encargadas de alinear el texto, bien respecto a sus
dimensiones, bien respecto a la ventana, tamaños y aspectos del literal escrito, si se tiene en
cuenta o no el símbolo &, etc. Por otra parte, entre los eventos, aparece como nuevo
OnDblClick, que se invoca cuando se hace doble clic sobre el texto implicado; pero no aparecen
los relacionados con perder o ganar el foco (pues no se puede dar el foco a un texto) o pulsar y
levantar una tecla.
8
Algoritmo. La revista para el programador de sistemas de bases de datos. http://www.eidos.es - © Grupo EIDOS
Ejemplo
Pongamos un ejemplo en el que jugaremos con los dos controles vistos. La idea seguida ha sido
habilitar el botón 1 con la propiedad Cancel a True (para que se invoque al pulsar [Esc]), el
botón 2 con Default y asociar a ambos un procedimiento, llamado Texto, para que lo ejecuten
cuando se pulsen. En dicho procedimiento se distingue si se llama con uno u otro botón, y se
pinta uno u otro texto. El procedimiento Texto es el que se ve en el fuente 2.
Sea cual sea el botón pulsado, se habilita un tercer botón, el de Salir, inicialmente inhabilitado
por tener su propiedad Enabled a False. Su misión es permitir salir de la aplicación. Cada botón
lleva un tipo de letra, un tamaño, etc. particular.
// --- Fuente 2 ---------------------------------------------------------procedure TForm1.Texto(Sender: TObject);
begin
if Sender=Boton1 then
Label1.caption := 'Se ha pulsado el botón 1 o [Esc]'
else
Label1.caption := 'El botón 2 se pulsó o [Intro]';
Boton3.Enabled := True
end;
La ventana que recoge este proceso es el la de la figura 10 y el código completo que hay que
ensayar el del fuente 3.
Figura 10: Aplicación para uso de botones y texto
// --- Fuente 3 -------------------------------------------------------unit Boton1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Boton1: TButton;
Label1: TLabel;
Boton2: TButton;
Label2: TLabel;
Boton3: TButton;
procedure Texto(Sender: TObject);
9
Algoritmo. La revista para el programador de sistemas de bases de datos. http://www.eidos.es - © Grupo EIDOS
procedure Salir(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Texto(Sender: TObject);
begin
if Sender=Boton1 then
Label1.caption := 'Se ha pulsado el botón 1 o [Esc]'
else
Label1.caption := 'El botón 2 se pulsó o [Intro]';
Boton3.Enabled := True
end;
procedure TForm1.Salir(Sender: TObject);
begin
Close;
end;
end.
10
Algoritmo. La revista para el programador de sistemas de bases de datos. http://www.eidos.es - © Grupo EIDOS

Documentos relacionados