Curso Basico de Delphi
Curso Basico de Delphi
La ventana principal
Cuando ejecutamos Delphi, nos encontramos ante un entorno como el que se ve en la imagen,
compuesto por varias partes:
En la barra de ttulo de la ventana principal (la superior) vemos el nombre del entorno (Delphi)
seguido del nombre del proyecto en curso. Bajo la barra de ttulo encontramos el men, con las
opciones tpicas de ficheros, herramientas, edicin, etc.
La parte inferior izquierda de la ventana principal est ocupada por un conjunto de botones,
separados en tres grupos, como vemos en el grfico:
Mediante ellos podemos cargar un nuevo proyecto, salvar el actual, etc. Cada uno de estos botones
tiene una correspondencia con una opcin del men y algunos de ellos tambin tienen asociada
una tecla de acceso rpido.
Por ltimo, en la ventana principal de Delphi, encontramos las paletas de componentes Delphi:
En principio la paleta activa es la llamada Standard, en la que podemos encontrar los componentes
y controles ms habituales en un programa. Las pestaas existentes en la parte superior nos
permitirn acceder a la dems paletas de controles.
Men de Opciones
Este elemento contiene las diferentes opciones del programa agrupadas en varias principales. En
Delphi el men de opciones es un apartado con estructura casi fija (es decir, siempre las mismas
opciones en el mismo lugar), salvando la posibilidad de aadir opciones mediante la creacin de
extensiones al entorno.
La Paleta de Botones
Otro de los elementos de la ventana principal de Delphi es la Paleta de botones o acciones rpidas.
Nos permite ejecutar de forma directa algunas de las opciones del men sin necesidad de buscar
por las distintas ventanas. Hay que observar que aquellos que no estn disponibles se muestran en
gris. Si dejamos un momento el cursor sobre un botn, aparecer una pequea etiqueta (un hint)
que nos indicar de forma breve cul es su funcin.
Al igual que otros elementos de Delphi, la paleta de botones tiene asociado un men emergente o
contextual, que podemos hacer aparecer pulsando el botn derecho del ratn. Estas opciones nos
permiten ocultar la barra de botones, pedir ayuda, decir si queremos que se muestren los hints o
no, y personalizarla aadiendo/quitando botones en properties. Si ocultamos la barra de botones,
siempre tenemos la opcin de volver a mostrarla en el men View, opcin Speedbar.
Paleta de Componentes
Aqu podemos seleccionar los elementos que vamos a insertar en un form. Esta tambin puede ser
personalizada mediante el men emergente, idntico al de los botones. Igualmente, si ocultamos la
paleta de componentes, podemos volver a mostrarla con la opcin Component Palette del men
View.
Hay que hacer notar lo siguiente: en el panel de la derecha, adems del icono y nombre del
componente, tambin aparece el nombre del paquete en que est incluido. En Delphi, todo
componente instalado en el entorno debe estar contenido en un paquete, bien de forma aislada o
con otros.
El Form
La interfaz de las aplicaciones que escribamos con Delphi estar basada en el uso de forms,
nombre con el que se denomina a las ventanas del entorno Windows en las que se alojarn los
distintos controles encargados de interactuar con el usuario. Cada vez que se inicia un nuevo
proyecto, en pantalla veremos aparecer un form vaco, en el que podremos insertar los
componentes que seleccionemos de la Paleta de componentes.
Prcticamente en todas las aplicaciones contaremos con varios forms, uno principal, que ser aquel
que aparezca inicialmente al ejecutar el programa, y otros que se irn usando segn las opciones
que el usuario de la aplicacin vaya seleccionando.
En el men File disponemos de opcin New Form, que nos permite insertar un nuevo form en
nuestro proyecto. Habitualmente en pantalla slo tendremos visible aquel form sobre el que
estemos trabajando en cada momento, mientras los dems permanecen cerrados (o no visibles por
estar detrs del form activo).
Para abrir uno de los forms ya existentes en el proyecto podemos utilizar la opcin Forms del
men View; o pulsar el botn
de la Paleta de botones. En cualquiera de los dos casos
aparecer la lista de los forms existentes.
El Inspector de Objetos
Otro de los elementos que habitualmente est visibles en pantalla es el Inspector de objetos, cuya
finalidad es facilitar la edicin de las propiedades correspondientes al componente que se
seleccione.
En la parte superior aparece el nombre del componente que se est inspeccionando as como su
tipo. Es posible seleccionar cualquier componente de la lista desplegable asociada a este campo, o
bien marcar el componente en el form.
La columna izquierda de la ventana sirve para mostrar los nombres de las propiedades, mientras
que en la derecha se muestran los valores que tienen actualmente.
El visualizador de objetos
La mayor parte del tiempo, durante la creacin de una aplicacin con Delphi, estaremos trabajando
con objetos, que pueden ser controles y objetos no visuales. Estos objetos disponen en su interior
de miembros de datos, mtodos, propiedades, pueden definir tipos, etc. Toda la informacin
disponible sobre un cierto objeto la podemos obtener fcilmente mediante el visualizador, que
podemos abrir mediante la opcin Browse Symbol del men Search, o bien con la opcin
Browser del men View. Para poder analizar un cierto smbolo u objeto con el Visualizador,
previamente debemos haber compilado nuestro programa, ya que es del cdigo objeto de donde se
obtiene esta informacin. Si no hemos compilado el programa, veremos que esta opcin no est
disponible.
En el panel izquierdo del Visualizador podemos seleccionar el objeto del que deseamos obtener
informacin, mostrndose sta de forma inmediata en el panel derecho de la ventana. En dicho
panel existen en realidad tres pginas mostrndose en la primera, Scope, todos los tipos,
constantes, mtodos, etc., que tiene el objeto; en la segunda la jerarqua de tipos correspondiente
al objeto, y en la tercera las referencias existentes a dicho objeto en el cdigo de nuestro
programa.
En principio en la pgina Scope aparecen todos los identificadores existentes en el objeto, tanto si
han sido definidos en l como si son heredados. Los botones existentes en la parte superior del
Visualizador, tras la palabra Show, nos permiten seleccionar qu informacin deseamos ver. Los
primeros cinco botones nos permiten activar/desactivar la visualizacin de constantes, mtodos,
tipos, variables y propiedades, respectivamente. Los dos siguientes botones realizan la misma
accin con aquellos miembros que son heredados o son virtuales. Por ltimo tenemos cuatro
botones ms, que representan a los indentificadores privados, protegidos y pblicos.
El depsito de objetos
Al seleccionar la opcin New del men File, Delphi abrir la ventana del Depsito de objetos, en la
que podremos optar por crear un nuevo elemento desde cero, o bien partir de otro ya existente. En
la primera pgina de la ventana, que es la que aparece abierta por defecto, podemos optar por
iniciar una nueva aplicacin estndar, un nuevo componente, librera de enlace dinmico, mdulo,
etc. La pgina siguiente llamada ActiveX, contiene los elementos que facilitan la creacin de
controles ActiveX, forms Active, etc. A continuacin tenemos una pgina que tendr como ttulo el
nombre del proyecto sobre el que estamos trabajando. En ella aparecern los forms que en ese
momento existan en dicho proyecto, permitiendo crear otros nuevos a partir de ellos. En las
pginas siguientes, Forms, Dialogs, Data Modules y Projects, encontraremos plantillas de
forms, cuadros de dilogo, mdulos de datos y proyectos, respectivamente, que podemos copiar en
nuestro proyecto, utilizar o bien crear un nuevo elemento heredando las caractersticas de uno ya
existente.
Propiedades
Durante la etapa de diseo de la interfaz, las propiedades de un objeto pueden ser consultadas y
modificadas mediante el Inspector de Objetos. Bsicamente, el Inspector de objetos est
compuesto de una cabecera, en la que aparece el nombre del tipo del objeto que se est
inspeccionando en ese momento, y dos pginas, una donde aparecen las propiedades y otra
correspondiente a los eventos. En la pgina de propiedades nos encontramos con dos columnas,
Eventos
Un form que contenga los componentes nacesarios con sus correspondientes propiedades
establecidas correctamente, nos ser de poca utilidad si no tenemos algo ms. Una interfaz por s
sola no tiene finalidad alguna ya que aunque el usuario puede interactuar con el form y sus
componentes, nuestro programa no har nada a no ser que nosotros escribamos algo de cdigo.
El cdigo de una aplicacin Delphi habitualmente siempre est asociado a eventos, de tal forma
que su ejecucin no se produce de forma secuencial, desde el principio hasta el fin del programa.
Un evento es una seal, externa o interna a la aplicacin, que nuestro programa puede aprovechar
para ejecutar un cierto bloque de cdigo, el cual escribiremos en un mtodo. El nombre y
parmetros de estos mtodos estn predeterminados por Delphi, de tal forma que si deseamos
responder a un evento tan slo hemos de escribir el cdigo que queremos ejecutar.
que seleccionar el segundo evento, pulsando sobre su nombre, y abrir la lista desplegable de
mtodo mediante la flecha que aparece en la columna derecha. En esta lista seleccionaremos el
mtodo correspondiente, que quedar as asociado tambin a este evento. El proceso lo podemos
repetir tantas veces como sea necesario, asociando mltiples eventos a un solo mtodo.
Para modificar el cdigo de un mtodo de respuesta a un evento, suponiendo que ste no est
visible en ese momento en la ventana de cdigo, bastar con realizar un doble clic en la columna
derecha del evento en cuestin para que el cursor se desplace hasta el cuerpo de dicho mtodo.
Parmetros de eventos
Al igual que ocurre con cualquier procedimiento, los mtodos de respuesta a eventos tambin
pueden recibir parmetros de distintos tipos. El nmero y tipo de los parmetros a recibir
dependern directamente del evento del que se trate.
Seleccin de componentes
Para seleccionar un componente basta con realizar una pulsacin con el botn izquierdo del ratn,
habiendo situado previamente el cursor sobre el componente en cuestin. Otra forma consiste en
desplegar la lista existente en la parte superior del Inspector de objetos, eligiendo una de las
lneas. Al hacerlo, en el form automticamente se mostrar seleccionado el componente
correspondiente a dicha lnea.
En ocasiones puede ser interesante seleccionar mltiples componentes en el form, con la finalidad
de tratarlos de forma genrica. Para ello podemos usar bsicamente dos mtodos: ir pulsando con
el ratn sobre los distintos componentes mientras mantenemos pulsada la tecla de <Mayscula>, o
bien trazar en el form, usando el botn izquierdo del ratn, un cuadrado o rectngulo que delimite
a todos los componentes que deseamos agrupar.
Un grupo de componentes seleccionados puede ser copiado al portapepeles, borrado, desplazado
en el form e incluso es posible modificar aquellas propiedades y eventos que son comunes.
Mdulos y Forms
Delphi utiliza el programa principal para almacenar el cdigo del proyecto, que habitualmente no se
hace visible. Sim embargo, podemos usar la opcin Project Source del men View para hacer
aparecer dicho cdigo, que se almacena en un archivo que en lugar de tener extensin PAS, como
los mdulos habituales de Pascal, tiene la extensin DPR, con el fin de diferenciar un proyecto de
cualquier otro mdulo de cdigo.
Adems del cdigo del proyecto, cualquier aplicacin tpica contar con al menos un form, que
tendr asociado un mdulo de cdigo. Por cada form adicional existir un mdulo adicional con el
cdigo correspondiente. Por ltimo tambin es posible tener otros mdulos no asociados a forms,
conteniendo objetos o procedimientos y funciones definidos por nosotros mismos.
Cada mdulo de cdigo asociado a un form contendr la definicin de un objeto, conteniendo los
componentes y mtodos de respuesta a eventos necesarios. Todos los forms se definen como
objetos descendientes del tipo TForm, que se caracteriza por contener los atributos comunes a
cualquier form. A la definicin del nuevo tipo de objeto se aadirn tantos miembros como
componentes insertemos en la ficha y tantos mtodos como eventos controlemos.
suele reducir a la creacin del form principal y al inicio de lo procesos necesarios para que dicho
form pueda interactuar con el usuario.
Archivos DFM
En el cdigo del mdulo asociado a un form no se almacenan los valores de las propiedades de
cada componente, como puede ser su posicin, dimensiones, ttulo, etc. Este tipo de informacin
se almacena en un archivo separado, con extensin DFM, que es incluido en la aplicacin durante la
compilacin, como si se tratase de un recurso.
Los archivos de definicin de componentes estn en un formato binario, que no es legible
directamente. Sin embargo, el propio editor de Delphi nos permite ver y editar el contenido de
estos archivos. Para ello lo nico que debemos hacer es pulsar el botn derecho del ratn sobre el
form, seleccionando la opcin View As Text. Tambin podemos pulsar la combinacin de teclas
<Alt + F12>. Al cargar el archivo ste aparecer en forma de texto en el editor, conteniendo por
cada componente su nombre, tipo y valores de las propiedades.
Aunque no es una tcnica habitual, el contenido de este archivo puede ser modificado en el editor
de cdigo. Para que las modificaciones tengan efecto deberemos convertir de nuevo el texto que
tenemos en el editor al formato del archivo DFM, para lo que bastar con salvarlo con dicha
extensin o simplemente volver a convertirlo en un form utilizando la misma combinacin de teclas
citada antes.
mbito de tipo
Para acceder a un miembro de un objeto debemos primero especificar el identificador del objeto,
seguido de un punto y el identificador del miembro que se desea manipular. Esto es lo que se llama
un referencia completa o cualificada, que nos permite acceder a identificar de forma inequvoca, ya
que en dos objetos distintos pueden existir miembros con los mismos nombres, pero, sin embargo,
no podemos tener dos objetos con el mismo nombre en el mismo mbito.
El rea cliente
La existencia de una barra de ttulo, un borde de ms o menos grosor, unos botones, etc., limitan
el rea realmente "til" del form, que para nosotros es su interior, al que se denomina rea cliente.
Obviamente, al modificar el tamao de la ventana tambin estamos alterando las dimensiones del
rea cliente, ya que est ocupa todo el interior del form. Podemos conocer y modificar las
dimensiones del rea cliente mediante las propiedades ClientWidth (ancho) y ClientHeight (alto).
Proporciones generales
Por defecto el efecto de escalado no se produce, aunque la propiedad Scaled tiene al valor True.
Dando el valor True a esta propiedad activaremos el escalado, cuya proporcin vandr dada por el
valor que asignaremos a la propiedad PixelsPerInch. Dicho valor indica cuntos puntos de medida
entrarn en cada pulgada, por lo que cuanto ms grande sea el nmero, ms reducida aparecer el
form y viceversa. Dando el valor False a la propiedad Scaled desactivaremos el escalado, a pesar
de que hayamos asignado cualquier valor a PixelsPerInch.
Hay que tener en cuenta que no es lo mismo escalar el form que redimensionarlo. En este ltimo
caso lo que hacemos es cambiar el tamao del form, de tal forma que los componentes que hay en
su interior pueden quedar ocultos en parte. Al escalar un form automticamente se modifica
tambin el tamao de todos los componentes que hay en l, adecuando su tamao, que se
aumenta o reduce, para adecuarlo al del form.
Apariencia tridimensional
Las ltimas aplicaciones aparecidas para Windows 3.1 incorporaron en su mayora efectos
tridimensionales en ventanas y controles, hasta tal punto que Microsoft cre una librera cuya
finalidad era le de crear un estndar en este tipo de controles. En Windows 95 el propio sistema
operativo ha incrementado visiblemente los efectos tridimensionales en opciones de men,
botones, etc. Tambin nuestrar aplicaciones Delphi pueden contar con este aspecto, de hecho lo
hacen automticamente a no ser que modifiquemos el valor de la propiedad Ctl3D.
Por defecto esta propiedad tiene el valor True, haciendo, por ejemplo, que el fondo de los forms
sea gris, y los distintos controles existentes en l aparezcan como esculpidos. Dando el valor False
a esta propiedad desactivaremos el efecto tridimensional, de tal forma que el fondo del form ser
blanco, como el de cualquier ventana.
La propiedad Color nos permite modificar este color por defecto, pudiendo elegir entre un color
concreto, como pueda ser azul, rojo, negro, etc., o bien un color del sistema, por ejemplo el color
de la barra de ttulo d la ventana activa, el color de un botn pulsado, etc.
Forms y mens
Cualquier form Delphi puede tener asociado un men de opciones que aparecer bajo su barra de
ttulo. La propiedad encargada de mantener la referencia al men asociado al form es Menu. De
igual forma, podemos asociar un men emergente a una form, utilizando la propiedad PopupMenu.
Etiquetas de ayuda
En Delphi, la creacin de estas etiquetas de ayuda es de suma facilidad, lo nico que hemos de
hacer es asignar la cadena que queremos visualizar a la propiedad Hint del componente, dando
adems el valor True a la propiedad ShowHint. Estas propiedades las tienen prcticamente todos
los controles, incluidos los forms, aunque su uso ms habitual est asociado con los botones
existentes en las barras o paletas de herramientas.
Iconos y cursores
Por defecto, el icono que aparece en la barra de ttulo de un form y con el que se representa el
mismo cuando se minimiza, es el mismo icono de la aplicacin, a no ser que nosotros
establezcamos uno distinto mediante la propiedad Icon. Esta propiedad es en realidad un objeto,
con sus propiedades, eventos y mtodos. En tiempo de diseo, podemos cargar un icono mediante
el editor que aparecer al pulsar en los puntos suspensivos que aparecen a la derecha. En tiempo
de ejecucin, necesitaremos como nico parmetro el nombre del archivo en que se encuentra el
icono.
Por defecto, al pasar sobre el rea cliente de un form, el cursor del ratn es una flecha, pero
podemos cambiar a cualquier otro aspecto modificando el valor de la propiedad Cursor. La
enumeracin de valores que es posible asignar a Cursor la podemos ver desplegando la lista de
esta propiedad en el Inspector de objetos.
Estilos de letra
Los distintos controles que insertemos en un form pueden utilizar un tipo y estilo de letra de
nuestra eleccin, para lo cual nos serviremos de la propiedad Font, que es en realidad un objeto del
tipo TFont. Al modificar esta propiedad del form, generalmente no observamos cambio alguno, ya
que los efectos se producirn en el momento en que insertemos algn control, cuya propiedad Font
tomar los mismos valores que hayamos asignado a dicha propiedad en el form.
Las propiedades con que cuenta un objeto TFont nos permiten seleccionar el tipo de letra, color,
tamao, estilo, etc. Podemos modificar dichas propiedades en tiempo de diseo mediante el
Inspector de objetos, as como acceder a ellas en tiempo de ejecucin. Estas propiedades son:
Color: Establece el color del texto. Hay que recordar que con la propiedad Color del form
fijbamos el color de fondo de la ventana.
Height y Size. Ambas propiedades tienen una misma finalidad: especificar el tamao del
tipo de letra, bien facilitando su altura o el tamao de los puntos.
Barras de desplazamiento
El uso automtico de barras de desplazamiento est controlado por la propiedad AutoScroll, que
por defecto tiene el valor True.
Las caractersticas de las barras de desplazamiento pueden ser alteradas mediante las propiedades
HorzScrollBar y VertScrollBar, dos objetos que representan respectivamente a la barra de
desplazamiento horizontal y vertical. En el caso de un form, las propiedades de estos objetos
toman sus valores automticamente, dependiendo del tamao de dicho form.
Otras propiedades
En un form encontraremos asimismo otros tambin editables en tiempo de diseo. Estas
propiedades son:
ActiveControl. Cuando un form con diversos componentes se muestra inicialmente, el
control toma uno de los componentes, que ser el que est activo en principio. Al desplegar
la lista asociada a esta propiedad en el Inspector de objetos podremos seleccionar cul ser
dicho control.
HelpContext. Mediante esta propiedad podemos asociar al form una determinada pgina de
ayuda contextual.
ObjectMenuItem. Esta propiedad nos permitir establecer una opcin de men que se har
activa cuando en el form se est trabajando con un campo OLE.
PrintScale. Es posible imprimir un form con una simple llamada a un mtodo del objeto
TForm. Antes necesitaremos especificar la escala con la que deseamos que se realice la
impresin. Las opciones posibles son poNone, poProportional y poPrintToFit, segn
deseemos no mantener proporcin alguna, imprimir el mismo nmero de puntos en
impresora que en pantalla o bien ocupar el mayor espacio posible en la pgina
manteniendo la proporcin del form, respectivamente.
Tag. Se trata de una propiedad que no tiene significado alguno ni es usada por ninguno de
los objetos que cuentan con ella. Su finalidad es permitirnos guardar cualquier valor entero
que necesitemos asociar al objeto.
KeyPreview. Por defecto el valor de esta propiedad es False, de tal forma que las
pulsaciones de tecla que se produzcan durante la ejecucin del programa vayan
directamente al control del form que en ese momento est activo. Dndole el valor True a
esta propiedad conseguiremos que dichas pulsaciones sean enviadas antes al form y
despus al control que est activo, permitiendo as su intercepcin.
Controles y componentes
Podemos conocer en tiempo de ejecucin el nmero de componentes y controles que existen en un
form, mediante las propiedades ComponentCount y ControlCount. Recordemos que un componente
es cualquiera de los elementos existentes en un form, mientras que un control es un componente
que cuenta con una interfaz, se trata de un elemento visual.
Conociendo el nmero de componentes y controles, podemos acceder a cualquiera de ellos usando
las matrices Components y Controls, que son otras dos propiedades del form. Estas matrices
contendrn tantos elementos como nos indiquen ComponentCount y ControlCount,
respectivamente, siendo la base de los ndices el cero. Una vez que accedamos a un elemento de
cualquiera de estas dos matrices podemos determinar su tipo, realizar las conversiones necesarias
y manipular sus propiedades.
Superficie de trabajo
Un form de Delphi tiene una correspondencia directa con una ventana Windows, que es
habitualmente manipulado por medio de un identificador o handle, que podremos obtener
mediante la propiedad Handle. Este identificador podremos usarlo con cualquiera de las funciones
Windows que hacen uso de l, como puede ser BitBlt.
Un mtodo ms simple y recomendable para trabajar sobre un form consiste en usar el valor de la
propiedad Canvas, que es un objeto que representa todo el espacio interior de la ventana y que
cuenta con una serie de mtodos que nos permitirn escribir texto, dibujar, etc.
Forms MDI
Un form tambin cuenta con una serie de propiedades que facilitan el trabajo con ventanas MDI,
conteniendo ventanas hijas en su interior. Mediante la propiedad MDIChildCount podremos saber el
nmero de ventanas hijas existentes en un determinado momento, dato que nos servir para
acceder a los elementos de la matriz MDIChildren, cada uno de los cuales representa a una
ventana hija.
Corresponde a...
ssShift
ssAlt
La tecla <ALT>.
ssCtrl
La tecla <Control>.
ssRight
ssLeft
ssMiddle
Eventos de teclado
Aunque generalmente un form no recibe directamente las pulsaciones de teclado, sino que stas
van directamente a alguno de los controles, es posible interceptarlas. Los eventos que nos
permitirn hacerlo son:
OnKeyDown. Se produce al pulsarse una tecla, cuyo cdigo es facilitado en el parmetro
Key. Al igual que los eventos de ratn, tambin se recibe el parmetro Shift, mediante el
cual podremos saber si hay pulsadas otras teclas o botones de ratn. Tengamos en cuenta
que el cdigo recibido no es el cdigo ASCII, sino el cdigo virtual de la tecla pulsada.
OnKeyUp. Este evento se genera al liberar una tecla. El mtodo de respuesta
correspondiente recibir los mismos parmetros descritos en el evento OnKeyDown.
OnKeyPress. A diferencia de lo que ocurre con OnKeyDown, que se genera con cualquier
tecla alfanumrica, de funcin, control, etc., este evento slo se produce por la pulsacin
de las teclas "normales", excluyendo de este conjunto las de funcin, edicin y, en general,
todas aquellas que no dispongan de cdigo ASCII. El parmetro Key que se recibe como
parmetro corresponde precisamente al cdigo ASCII de la tecla pulsada.
Tanto OnKeyDown como OnKeUp reciben un cdigo de tecla y no un cdigo ASCII del carcter
pulsado. Esto les permite detectar la pulsacin de aquellas teclas que no tienen asociado un
carcter, como puedan ser las de funcin o las de edicin. Los cdigos de teclas estn
representados por una serie de constantes que comienzan con las iniciales VK_.
Constante
VK_0,VK_1, ..., VK_9
Las teclas de la A a la Z.
VK_BACK
VK_TAB
Tabulador
VK_RETURN
Intro
VK_SHIFT
Maysculas
VK_CONTROL
Control
VK_MENU
Alt
VK_PAUSE
Pausa/Inter
VK_CAPITAL
Fija Mayscula
VK_ESCAPE
Escape
VK_SPACE
Barra Espaciadora
VK_PRIOR
RePg
VK_NEXT
AvPg
VK_END
Fin
VK_HOME
Inicio
VK_LEFT
VK_RIGHT
VK_UP
VK_DOWN
VK_INSERT
Insert
VK_DELETE
Supr
VK_ADD
+ en teclado numrico
VK_SUBSTRACT
- en teclado numrico
VK_MULTIPLY
* en teclado numrico
VK_DECIMAL
. en teclado numrico
VK_DIVIDE
/ en teclado numrico
Teclas de funcin
VK_NUMLOCK
BloqNum
VK_SCROLL
BloqDespl
Arrastrar y soltar
Relacionados con esta operacin un form puede recibir los dos siguientes eventos:
OnDragOver. Se produce cuando sobre un determinado control se desplaza un elemento
que est siendo "arrastrado". Adems del parmetro Sender se recibe otro parmetro del
tipo TObject; Source, que nos permitir acceder al componente que est siendo objeto de
la operacin de arrastrar y soltar. Mediante los parmetros X e Y podremos conocer la
posicin actual del evento. Mediante el parmetro State obtendremos informacin acerca
del estado de la operacin. Dicho parmetro puede tomar los valores dsDragEnter,
dsDragMove o dsDragLeave, segn que el objeto arrastrado acabe de entrar sobre el
control, se est moviendo sobre l o lo acabe de abandonar, respectivamente. Por ltimo
encontramos el parmetro Accept, una variable de tipo Boolean a la que tendremos que
asignar el valor True si el objeto arrastrado puede ser soltado sobre el control, o False en
caso contrario.
OnDragDrop. A diferencia del evento anterior, que puede recibirse mltiples veces a medida
que el objeto arrastrado se mueve por el control, el evento OnDragDrop slo se recibe
cuando dicho objeto es "soltado" sobre el control, liberando la pulsacin del botn izquierdo
del ratn. El mtodo de respuesta a este evento recibir los parmetros X, Y y Source,
conteniendo respectivamente las coordenadas donde el objeto ha sido soltado y una
referencia del mismo.
Significado
El form es cerrado
caHide
caNone
OnResize. Cada vez que el tamao de un form sea modificado durante la ejecucin se
generar este evento, que podemos aprovechar para modificar la disposicin de los
controles en su interior segn el nuevo tamao.
Valores Iniciales
Al insertar un control Label en el form, mediante cualquiera de los mtodos que vimos en los
captulos anteriores, algunas propiedades tomarn un valor inicial por defecto, que generalmente
tendremos que modificar. Por ejemplo, la propiedad Name tomar el valor Label1, Label2,, etc., al
igual que la propiedad Caption. Otras propiedades, como Left y Top, tomarn su valor dependiendo
de la posicin en la que situemos el control. Por ltimo encontramos un tercer grupo de
propiedades cuyo valor por defecto habitualmente no modificaremos, por ejemplo, la propiedad
Visible de una etiqueta por regla general siempre ser True, ya que de lo contrario el texto no sera
visible.
Tras insertar la etiqueta, lo primero que tendremos que hacer es asignarle un nombre al control,
para lo que modificaremos el valor de la propiedad Name mediante el Inspector de objetos.
El valor almacenado en la propiedad Caption ser el texto que se mostrar en la etiqueta y que,
inicialmente, coincide con el nombre del control, es decir, por defecto Name y Caption tienen el
mismo valor. Al modificar el nombre de este control, el valor de Caption tambin se modificar
automticamente tomando el mismo valor, pero esto no volver a ocurrir desde el momento en que
manualmente asignemos un nuevo valor a Caption.
alNone
alTop
alRight
alClient
En caso de que las dimensiones del control sean superiores a las necesarias para mostrar el texto
asignado a Caption, ste puede aparecer alineado a la izquierda, derecha o bien centrado. Esta
alineacin depender del valor que se asigne a la propiedad Alignment, que habr de ser:
Valor
taLeftJustify
Ajuste de texto
A la izquierda
taRightJustify A la derecha
taCenter
Centrado
El tipo de letra
Como sabemos, en Windows, a cada familia o tipo de letra se le conoce mediante un nombre, como
puede ser Courier o Roman, por poner dos ejemplos. El tipo de letra de un objeto TFont se
almacena en la propiedad Name, en forma de cadena de caracteres, por lo que si queremos que en
el texto aparezca una cadena con el tipo Courier, lo nico que debemos hacer es asignar a la
propiedad Name una cadena con ese nombre.
Tamao de letra
Con la propiedad Size facilitaremos el tamao de letra asignando un nmero con el que
especificaremos el tamao en puntos de la propia letra, sin contar con el espacio adicional que es
necesario para su visualizacin. El tamao en puntos es el mtodo ms utilizado habitualmente, ya
que es la tcnica que emplean la mayora de los programas de dibujo, diseo y procesadores de
texto.
El contenido de la propiedad Height, por el contrario, se refiere a la altura del tipo de letra ms el
espacio adicional necesario para su visualizacin. Siempre que para fijar el tamao de letra usemos
la propiedad Size, el valor de Height ser negativo y viceversa.
El estilo
Para conocer y modificar el estilo de lerta de un objeto TFont usaremos la propiedad Style, que es
un conjunto que puede contener los siguientes valores:
Constante Estilo correspondiente
fsBold
Negrita
fsItalic
Cursiva Itlica
fsUnderline Subrayada
fsStrikeOut Tachada
Para poder determinar si una de estas constantes se encuentra o no en el conjunto tendremos que
utilizar el operador Is.
Color
clBlack
Negro
clMaroon
Marrn
clGreen
Verde
clOlive
Verde oscuro
clNavy
Azul marino
clPurple
Prpura
clTeal
Verde agua
clGray
Gris
clSilver
Gris claro
clRed
Rojo
clLime
Verde claro
clBlue
Azul
clFuchsia
Fucsia
cAqua
Azul celeste
clWhite
Blanco
Anchura de carcter
Ciertas familias de letras son de espacio fijo, es decir, sus caracteres tienen todos el mismo ancho,
mientras que otras son de espacio variable. Mediante la propiedad Pitch del tipo TFont, podemos
asignar cualquiera de los valores mostrados en la siguiente tabla.
Constante
Tipo de espacio
fpDefault
fpVariable
De anchura variable
fpFixed
De anchura fija
El color de fondo
Mediante la propiedad Color de la etiqueta de texto nosotros podemos seleccionar otro color
distinto, sobre el que aparecer dibujado el texto.
Al tener la etiqueta de texto un fondo opaco, ya sea del color del form o de cualquier otro que
queramos fijar, cualquier control que quede bajo la extensin del texto no ser visible, a no ser que
demos el valor True a la propiedad Transparent.
Cuando utilicemos una etiqueta para esto, en el texto podemos incluir una tecla de acceso rpido,
similar a la de los botones, de tal forma que al pulsarla se active el control asociado a la etiqueta.
Para hacer esto lo primero que tendremos en cuenta es el valor de la propiedad ShowAccelChar,
que por defecto es True. Esto permite la inclusin en el texto y de otro control, que habr de existir
ya en el form. Si accedemos en el inspector de objetos a la propiedad FocusControl veremos que
en la columna de valor aparece una lista, conteniendo los nombres de todos los controles que
puedan ser activados.
crDefault
crArrow
crCross
Una cruz
crBeam
El cursor de texto
crSize
crUpArrow
crNoDrop
Seal de prohibido
crHSplit
crVSplit
Al igual que la mayora de los componentes Delphi, las etiquetas de texto cuentan tambin con la
propiedad Tag, que podemos usar para almacenar cualquier dato asociado al control.
Mediante la propiedad ComponentIndex que tienen todos los componentes, por lo tanto tambin
las etiquetas de texto, podremos conocer el ndice de un determinado control en una matriz.
Mtodos de label
Una etiqueta de texto adems de con propiedades, tambin cuenta con mtodos, que son
procedimientos y funciones.
Dos de estos mtodos son BringToFront y SendToBack, que nos permiten alterar el orden de
profundidad del control en el form, haciendo que aparezca por encima o por debajo de los dems
respectivamente.
Para ocultar un control o mostrarlo podemos usar mtodos Show y Hide, respectivamente, que al
igual que los anteriores no necesitan parmetro alguno. Una llamada al mtodo Show equivale a
darle el valor True a la propiedad Visible, mientras que la llamada a Hide sera equivalente a
asignar el valor False.
Anteriormente hemos visto las propiedades que nos permiten modificar durante la ejecucin la
posicin y dimensiones de un control. En caso de que necesitemos modificar varias de estas
propiedades podemos usar el mtodo SetBounds, que nos permite realizar las modificaciones en un
solo paso. Al llamar a este mtodo pasaremos cuatro parmetros, especificando los valores
correspondientes a las propiedades Left,Top,Width y Height.
Propiedades Generales
El nombre del control lo fijaremos en la propiedad Name, al igual que en cualquier otro
componente. La posicin y dimensiones de un control Edit vienen determinadas por las
propiedades Left,Top,Width y Heigth, ya conocidas.
Las propiedades Visible y Enabled controlan el estado del control, que puede ser visible o no y
estar activado o no. Para facilitar una etiqueta de ayuda usaremos la propiedad Hint, junto con
ShowHint si es necesario. El color de fondo del campo de entrada ser fijado mediante la propiedad
Color, mientras que los atributos del texto los estableceremos mediante la propiedad Font. Es
posible fijar una determinada figura para el cursor del ratn al pasar sobre el campo de edicin,
asignando el valor apropiado a la propiedad Cursor. Al igual que el resto de componentes
insertados en una ficha, un control Edit es un elemento de la matriz Components del form, cuyo
ndice podemos obteber mediante la propiedad ComponentIndex.
En el control Edit, la propiedad AutoSize, que puede tomar los valores True o False, controla el
ajuste automtico del control a las dimensiones del tipo de letra que se vaya a utilizar. Si damos a
esta propiedad el valor False y modificamos posteriormente el tipo o tamao de letra, podremos
ver cmo el control queda parcialmente vaco o bien no es suficiente grande como para mostrar el
contenido.
A diferencia de lo que ocurre con el control Label, en un campo de edicin la propiedad Align no
est disponible en tiempo de diseo, por lo que si deseamos ajustar el control en una determinada
posicin de la ficha tendremos que hacerlo en tiempo de ejecucin, asignando el valor
correspondiente a esta propiedad.
Control de la Entrada
Adems de controlar la longitud mxima del texto mediante MaxLength, tambin podemos
convertir automticamente todas las letras introducidas en maysculas a minsculas, o en
minsculas a maysculas, segn el valor que asignemos a la propiedad CharCase. Estos valores
pueden ser:
Constante
ecNormal
Conversin realizada
No se realiza conversin alguna
Selecin de Texto
Podemos conocer la posicin a partir de la cual se ha marcado un texto consultando la propiedad
SelStart, que contendr la posicin del primer carcter que se haya marcado, teniendo en cuenta
que el primer carcter por la izquierda es el 0, el siguiente el 1, etc. Tambin podemos conocer la
longitud del texto marcado, o lo que es lo mismo, el nmero de carcteres existentes en la
seleccin, mediante la propiedad SelLength. Una tercera propiedad, SelText, nos servir tanto para
obtener el texto que se encuentra seleccionado en el control, como para cambiarlo por otro
simplemente asignndolo a esta propiedad.
Cuando en un control se ha marcado una porcin de texto, esta seleccin permanece hasta que
realiza un movimiento del cursor, permaneciendo an cuando nos desplacemos de este control a
otro que exista enl form. Cuando esto ocurre, el texto que tenamos marcado puede permanecer
as o bien mostrarse normal, volviendo a visualizarse marcado al volver a entrar en el campo. Este
comportamiento es controlado mediante la propiedad HideSelection, que puede tomar el valor
True, ocultando la seleccin cuando se sale del control, o False, dejndola visible. Por defecto esta
propiedad tiene el valor True.
En principio, cada vez que se pasa el control a un campo de edicin, hacindolo activo, todo el
contenido de ste se selecciona automticamente, independientemente del ltimo texto que se
hubiese marcado. Esto es debido a que la propiedad AutoSelect tiene por defecto el valor True,
indicando al control que cada vez que se active seleccione todo el contenido. Si damos a esta
propiedad el valor False, al volver a un campo en el que anteriormente se haba marcado una
porcin de texto, podremos ver que sigue activa la misma seleccin.
de la tecla <Tabulador>, formando parte del recorrido de controles del form, tan slo hemos de
darle el valor False a la propiedad TabStop, que por defecto es True. Al hacer esto no podremos
acceder a ese control usando el <Tabulador>, pero siempre podemos activarlo mediante el ratn.
Delphi nos permite establecer el orden de acceso. Seleccionamos la opcin Tab Order del men
emergente que aparecer al pulsar el botn derecho del ratn sobre el form, o bien elegimos esa
misma opcin del men Edit en la ventana principal. En ambos casos veremos aparecer una
ventana conteniendo el nombre y tipo de cada uno de los controles que pueden ser activados.
En esta ventana podemos establecer el orden de acceso de una forma visual. Si queremos
modificar la posicin de un cierto control en la lista, lo nico que hemos de hacer es "pincharlo" con
el cursor del ratn y "arrastrarlo" hasta su nueva posicin.
Para dar cabida a estas necesidades, existe el control llamado Memo, cuyo botn en la paleta de
componentes es
Podemos tratar este control de forma casi idntica a un control Edit, con la
diferencia de que es posible trabajar con una mayor extensin de texto, que puede estar
distribuido en mltiples lneas.
Barra de desplazamiento
ssNone
Ninguna
ssHorizontal Horizontal
ssVertical
Vertical
ssBoth
Ambas
Cuadros de dilogo
Un cuadro de dilogo modal se caracteriza por no permitir el acceso a ninguna otra ventana de la
aplicacin mientras l se encuentre abierto, y al cerrarlo generalmente se devuelve un valor
indicando la causa de salida.
Habitualmente, un cuadro de dilogo se cierra por la pulsacin de algn botn, que se encarga de
establecer el cdigo de salida. En lugar de tener que escribir un gestor para el evento Onclick de un
botn cuya nica finalidad sea esa, podemos asignar a la propiedad ModalResult del control Button
el valor de salida. Al pulsarse este botn el cuadro de dilogo ser cerrado automticamente,
devolviendo el cdigo almacenado en ModalResult. Aunque esta propiedad puede tomar cualquier
valor que nos interese, existen una serie de constantes con valores predefinidos que son los ms
usados:
mrYes
idYes
mrNo
idNo
mrOk
idOk
mrCancel
idCancel
mrAbort
idAbort
mrRetry
idRetry
mrIgnore
idIgnore
cbUnchecked Desmarcado
cbGrayed
Indeterminado
Los eventos y mtodos disponibles para el control CheckBox son los generales a la mayora de los
controles, al igual que para los botones. Esto quiere decir que existen los eventos de teclado y
ratn y los mtodos Show, Hide, etc.
La nica finalidad de este control es actuar como padre de otros controles agrupndolos y no
dispone de ninguna propiedad especial. Al insertar un control GroupBox en el form, ste
aparecer como un recuadro con un ttulo en la parte superior izquierda. Este ttulo lo podremos
establecer modificando el valor de la propiedad Caption, como es habitual. Aunque los controles
que normalmente se agrupan son los botones de radio, realmente mediante este control podremos
agrupar cualquier conjunto de controles, sin importar su tipo.
Cuando insertemos en un control GroupBox cualquier otro componente, su posicin ser relativa a
la del control que est actuando como contenedor, en este caso el GroupBox. Otra diferencia entre
un control insertado directamente en el form y otro insertado en un GroupBox ser el valor de la
propiedad Parent, de la que disponen todos los componentes. Esta propiedad contiene el nombre
del control padre, es decir, el control que acta como contenedor.
Para que un control pertenezca a un determinado grupo, es necesario que sea insertado en l. En
caso de que dispongamos de un determinado componente en el form y lo desplacemos al interior
de un control GroupBox, lo nico que habremos hecho ser modificar la posicin, pero realmente
dicho control no estar contenido en el grupo. En caso de que los controles a incluir en el
GroupBox ya existan en el form, tenemos una alternativa, que es cortarlos al portapapaeles,
activar el grupo y pegarlos.
Por defecto los botones de radio se reparten en una sola columna, que tendr tantas filas como
botones. Podemos modificar el valor de la propiedad Columns, especificando el nmero total de
controles que se reparte proporcionalmente entre ellas.
La propiedad ItemIndex nos servir tanto para saber que botn est seleccionado actualmente
como para modificar dicha seleccin. El valor de esta propiedad ser un nmero entero,
comprendido entre 0 y el nmero de botones existentes menos 1. El valor -1 indica que no hay
ninguno seleccionado actualmente.
de la Paleta de componentes.
Contenido de la lista
Los elementos contenidos en cada momento en la lista pueden ser gestionados mediante la
propiedad Items, que es en realidad un objeto del tipo TStrings. Ya hemos conocido anteriormente
este tipo en los controles Memo y RadioGroup, por lo que no tendremos problema alguno en
aadir elementos a la lista, con los mtodos Add e Insert, eliminarlos con Delete, moverlos con
Move, o intercambiarlos con Exchange.
La visualizacin de los elementos en la lista se dividir en tantas columnas como indique la
propiedad Columns, siendo el valor por defecto de una sola columna. Si lo deseamos, podemos
mostrar los elementos de la lista ordenados alfabticamente, simplemente dando el valor True a la
propiedad Sorted.
Dando el valor True a la propiedad IntegralHeight, haremos que visualice un elemento completo,
no de forma parcial.
Seleccin de elementos
El hecho de que en la lista slo pueda haber seleccionado un elemento simultneamente, est
determinado por la propiedad MultiSelect, dndole el valor True a esta propiedad, conseguiremos
una lista en la que es posible seleccionar mltiples elementos. Para ello podemos usar dos mtodos
distintos, dependiendo del valor de la propiedad ExtendedSelect. Por defecto el valor que tiene es
True, de tal forma que para seleccionar mltiples elementos tendremos que utilizar las teclas
<Mayscula> y <Control> junto con la pulsacin del botn izquierdo del ratn, como se hace
habitualmente. Si damos el valor False a esta propiedad podremos seleccionar varios elementos
simplemente marcndolos, pulsando sobre ellos con el cursor del ratn.
Cuando en una lista es posible seleccionar varios elementos, tendremos que utilizar la propiedad
SelCount para saber cuntos hay marcados actualmente, y la propiedad Selected para conocer qu
elementos estn marcados. Esta propiedad es en realidad una matriz, con tantos elementos como
cadenas existan en la lista.
Cada elemento de esta matriz puede tener el valor True, si dicho elemento est seleccionado, o
False, en caso de que no lo est.
Listas especiales
Aunque por regla general los elementos de una lista son cadenas de texto, todas ellas de un mismo
tipo de letra, es posible utilizar este control para presentar otros objetos, como elementos grficos.
Para ello lo primero que tendremos que hacer es modificar el valor de la propiedad Style,
asignando una de las siguientes constantes:
Constante
Estilo de la lista
lbStandard
lbOwnerDrawFixed
Para dibujar el elemento se deber utilizar la propiedad Canvas, que representa la superficie del
rea cliente de la lista. Esta propiedad es un objeto del tipo Tcanvas, que cuenta con una serie de
propiedades y mtodos que facilitan el trabajo con entidades grficas.
Listas combinadas
En Windows existe un control que es una mezcla de ListBox y Edit, al que se conoce como lista
combinada. Su nombre en Delphi es ComboBox:
Estilo
csDropDown
csSimple
csDropDownList
El estilo seleccionado por defecto es csDropDown, que en el form aparece como un control Edit con
una flecha en la parte derecha. Pulsando sobre dicha flecha se desplegar automticamente la
lista, en la que podremos seleccionar cualquiera de los elementos existentes, que pasar a
mostrarse en el campo de edicin. En lugar de desplegar la lista para elegir un elemento, tambin
podemos introducir los primeros caracteres en el campo de edicin, pulsando despus la tecla del
cursor hacia arriba o hacia abajo, lo que provocar la aparicin del primer elemento que comience
por esa secuencia.
Tanto el estilo csSimple como el csDropDownList son versiones simplificadas de csDropDown. En el
primer caso la lista aparecer como un campo de edicin normal, sin lista asociada. Sin embargo,
en ese campo podremos utilizar las teclas de desplazamiento del cursor para seleccionar uno de los
elementos de la lista, as como introducir las iniciales para su bsqueda. En el segundo caso nos
encontraremos con una lista que no tiene asociado un campo de edicin, aunque podremos seguir
usando las teclas del cursor para elegir un elemento. En la parte derecha del control aparecer una
flecha, que nos servir tambin para desplegar la lista.
Dimensiones de la lista
Una lista combinada, a diferencia de una lista normal, slo muestra permanentemente el elemento
que est seleccionado en cada momento, mientras que el resto de los elementos slo aparecen
cuando la lista se despliega. La extensin de la lista en ese momento, al ser desplegada,
depender del valor que demos a la propiedad DropDownCount, que contendr el nmero de lneas
que se mostrarn simultneamente como mximo.
Otras consideraciones
Al igual que una lista normal, es posible saber qu elemento est seleccionado en una lista
combinada mediante la propiedad ItemIndex, que contendr un nmero comprendido entre 0 y el
nmero de elementos existentes menos 1. Puesto que el elemento que est seleccionado en cada
momento se muestra en el rea de edicin del control, podemos obtener el texto mediante la
propiedad Text, como si se tratase de un control Edit. A diferencia de las listas normales, en una
lista combinada no es posible seleccionar mltiples elementos. Por ello no existen las propiedades
MultiSelect, ExtendedSelect, SelectCount y Selected.
Tipo de barra
Una barra de desplazamiento puede aparecer en sentido vertical y horizontal, siendo el primero el
estado por defecto. El tipo de barra representada por el control ScrollBar viene determinado por el
valor que demos a la propiedad Kind, que ser sbHorizontal o sbVertical, segn deseemos una
barra de desplazamiento horizontal o vertical respectivamente.
Rango de desplazamiento
Los valores extremos de la barra de desplazamiento, que determinan el rango de valores posibles,
los tendremos que facilitar en las propiedaddes Min y Max. El valor correspondiente a la posicin
actual del cursor en la barra lo obtendremos en la propiedad Position, que podemos modificar para
posiciones del cursor en un determinado punto de la barra. Tanto la posicin actual en la barra
como los valores extremos, mnimo y mximo, pueden fijarse en un solo paso, utilizando el mtodo
SetParams, al que facilitaremos los tres parmetros en ese mismo orden.
El factor de incremento o decremento pequeo se asigna a la propiedad SmallChange. Este valor
habitualmente es 1, permitiendo as recorrer el rango de valores representado por la barra unidad.
El factor de desplazamiento grande se asigna mediante la propiedad LargeChange. El
desplazamiento pequeo es el que se produce al pulsar sobre las propias flechas cursor de la barra,
Eventos de ScrollBar
Cada vez que el valor de la propiedad Position es modificado por una accin sobre la barra de
desplazamiento, se genera un evento OnChange, que nosotros podemos aprovechar para llevar a
cabo la accin que corresponda segn la nueva posicin del cursor en la barra.
Tambin al manipular la barra de desplazamiento, modificando la posicin del cursor, se genera el
evento OnScroll, que podemos aprovechar para actuar en consecuencia segn la operacin que se
haya efectuado. El mtodo que acte como gestor de este evento recibir un primer parmetro
representando a la barra de desplazamiento que ha generado el evento, un segundo parmetro
mediante el cual podremos conocer la accin que se ha efectuado sobre la barra y que vendr
representado por una de las constantes mostradas en la siguiente tabla. Por ltimo recibiremos la
variable ScrollPos, que podemos modificar para reflejar la nueva posicin en la barra.
Constante
Operacin de desplazamiento
scLineUp
scLineDown
scPageUp
Ir a la pgina siguiente
Ir a la posicin de inicio
scBottom
Ir a la posicin de fin
scPosition
scTrack
scEndScroll
Forma y estilo
Mediante la propiedad Shape podemos seleccionar la figura que deseamos que tome el control,
pudiendo ser cualquiera de los mostrados en la tabla siguiente. Cada uno de estos elementos
puede aparecer hundido en el form o sobresaliendo de l, dependiendo de que a la propiedad Style
le demos el valor bsLowered o bsRaised, respectivamente.
Constante
Forma
bsBox
Rectngulo
bsFrame
Borde rectangular
bsTopLine
bsRightLine
Mscara de entrada
La entrada de datos en un control MaskEdit ser idntica a la de un control Edit, a no ser que
establezcamos una mscara de control. Dicha mscara es una cadena de caracteres, en la cual
algunos tienen un significado especial. Esta cadena tendr que asignarse a la propiedad EditMask.
En tiempo de ejecucin, la mscara que hayamos aplicado condicionar tanto la introduccin de
datos en el campo, como la visualizacin de stos. Todos los caracteres, alfabticos, alfanumricos
y smbolos, pueden formar parte de una mscara. Aquellos que tienen un significado especial, se
muestran en la siguiente tabla; limitan la entrada de la informacin, mientras que todos los dems
aparecen en el campo en tiempo de ejecucin como parte fija de la informacin.
Carcter
Significado
<
>
<>
Separador de fechas
Para componer la mscara de edicin en tiempo de diseo, bastar con que realicemos una doble
pulsacin sobre la propiedad EditMask, o bien pulsamos el botn con los puntos suspensivos que
aparece en la parte derecha.
Tipo
Comentario
DefAttributes
TTexAttributes
HideScrollBars
Boolean
HideSelection
Boolean
Paragraph
TParaAttributes
PlainText
Boolean
SelAttributes
TTextAttributes
Atributos de texto
Tanto la propiedad DefAttributes, que establece los atributos por defecto para el texto, como la
propiedad SelAttributes, que nos permite conocer y modificar los atributos del texto actualmente,
son de tipo TTextAtributes.
Mediante las propiedades Name, Style, Size y Pitch podemos conocer y modificar los atributos
generales del texto. Estas propiedades son del mismo tipo y contienen la misma informacin que
las propiedades del mismo nombre de un objeto TFont. Mediante la propiedad Color podremos
manipular el color del texto, siendo de tipo TColor.
El texto seleccionado en un TRichEdit puede estar protegido contra escritura, atributo que podemos
conocer y modificar mediante la propiedad Protected del objeto TTextAttributes, de forma similar a
como podemos establecer el tipo o tamao de letra.
Atributos de prrafo
Tambin la propiedad Paragraph es una referencia a un objeto, en este caso del tipo
TParaAttributes. Mediante este objeto podemos conocer y modificar los atributos del prrafo actual
o los prrafos seleccionados en un determinado momento.
El texto de un prrafo puede estar ajustado a la izquierda, centrado o ajustado a la derecha,
dependiendo del valor que demos a la propiedad Alignment, que puede ser uno de estos:
Valor
Tipo de ajuste
taLeftJustify
Izquierda
taCenter
Centrado
taRightJustify
Derecha
Un prrafo se ajusta, segn la propiedad anterior, dentro de los lmites actuales del control y de los
mrgenes que se hayan establecido. Estos mrgenes se definen mediante tres propiedades:
FirstIndent, LeftIndent y RightIndent, pudiendo contener cada una de ellas un nmero entero cuya
unidad de medida es el punto de pantalla. LeftIndent establece el margen izquierdo para la primera
lnea del prrafo, que ser el relativo a FirstIndent. Mediante la propiedad RightMargin definiremos
el margen derecho.
En caso de que sea posible utilizar el tabulador en el control, porque hayamos dado el valor True a
la propiedad WantTabs del TRichEdit, la propiedad TabCount del objeto TParaAttributes contendr
el nmero de puntos de tabulacin y la propiedad Tab, que es una matriz de enteros, almacenar
las posiciones correspondientes a cada uno de esos puntos.
Cada inicio de prrafo del texto que se introduce en un TRichEdit puede ir precedido de lo que
normalmente se denomina un bolo, una marca que resalta el comienzo del prrafo. La existencia o
no de este elemento depender del color que asignemos a la propiedad Numbering, que ser
nsNone o nsBullet, siendo ste segundo el valor a usar para activar el uso de bolos.
Eventos de TRichEdit
Adems de los eventos habituales de los controles de esta categora, generados por el ratn, el
teclado y otros elementos, el control TRichtEdit cuenta tambin con un evento, OnSelectionChange,
que se produce cada vez que se desplaza el cursor por el contenido actual del control, o bien
cuando se modifica la seleccin actual de texto. Esto nos da una oportunidad para obtener
informacin acerca de los atributos del texto y el prrafo, mediante las propiedades SelAttributes y
Paragraph, actualizando los indicadores, botones y, en general cualquier control cuyo estado o
valor dependa de estos parmetros.
Tipo
Contenido
Panels
SimplePanel
Boolean
SimpleText
String
SizeGrip
Boolean
siempre ocupar el resto de la barra. Mediante la propiedad Bevel indicaremos si el panel debe
aparecer hundido en la barra, pbLowered resaltado, pbRaised, o al mismo nivel, pbNone.
Propiedad
Tipo
Contenido
Alignment
TAlignment
Bevel
TStatusPanelBevel
Style
TStatusPanelBevel
Text
String
Width
Integer
Tipo
Contenido
Frecuency
Integer
LineSize
Integer
Max
Integer
Valor mximo
Min
Integer
Valor mnimo
Integer
Position
Integer
SelEnd
Integer
SelStart
Integer
TickMarks
TTickMark
TickStyle
TTickStyle
tmBottomRight
tmTopLeft
Arriba o a la izquierda
tmBoth
La propiedad TickStyle nos servir para fijar el estilo de las marcas, pudiendo tomar los siguientes
valores:
Constante
tsAuto
tsNone
Sin marcas
tsManual
Manual
El estilo tsAuto distribuye las marcas existentes entre los puntos de inicio y fin de una forma
regular, segn el valor que se haya asignado a la propiedad Frecuency, que por defecto es uno, lo
que quiere decir que existir una marca por cada unidad.
Si asignamos el valor 100 a la propiedad Max, veremos que las marcas estn tan juntas que
forman una lnea. Modificando el valor de Frecuency, asignndole por ejemplo 10, conseguiremos
que se muestre una marca cada diez unidades.
En caso de que asignemos a la propiedad TickStyle el valor tsManual, el control slo dispondr de
dos marcas, una en cada extremo. Cualquier otra marca que deseemos deberemos establecerla
nosotros mismos, mediante el mtodo SetTick, al que pasaremos como nico parmetro un entero
indicando la posicin en la que deseamos disponer la marca.
Seleccin de rangos
Adems de para mostrar o fijar una posicin del cursor, lo que en definitiva se traduce en un cierto
valor que obtendramos de la propiedad Position, el control TTrackBar tambin nos permite
seleccionar un rango o intervalo de valores, mediante las propiedades SelStart y SelEnd.
Inicialmente estas dos propiedades tienen el valor cero, lo que indica que no hay seleccionado un
intervalo.
Al asignar a SelStart y SelEnd un valor, podremos ver que en el control aparece de un color
diferente el rango seleccionado y que, adems aparecen dos marcas especiales, dos pequeos
tringulos, que se delimitan perfectamente el intervalo.
TSpinEdit
, que utilizan dos pequeos botones con unas flechas en su interior para facilitar el
incremento y decremento de un valor, que en el segundo caso se almacena en un campo de
edicin.
En el caso del TSpinButton, podemos asociarlo a un control TEdit mediante su propiedad
FocusControl. Adems, si pulsamos el botn de la flecha hacia arriba se generar un evento
OnUpClick, y si pulsamos el botn de la flecha hacia abajo se generar un evento OnDownClick. En
respuesta a estos eventos podemos poner el cdigo conveniente, por ejemplo, podemos poner
cdigo para aumentar o disminuir el valor del campo Edit al que est asociado.
Si se trata de aumentar o disminuir valores numricos, puede ser ms conveniente usar el control
TSpinEdit, pues viene con el campo de edicin incorporado. Si cambiamos el valor de la propiedad
MinValue cambiaremos el valor mnimo que puede tomar el campo de edicin; por contra, si
cambiamos el valor de la propiedad MaxValue cambiaremos el valor mximo que puede tomar el
campo de edicin (hablamos siempre de valores numricos). El valor de la propiedad Increment
nos dice de cunto en cunto se incrementarn los valores del campo de edicin. Adems, el valor
del campo de edicin lo tenemos en la propiedad Value.
El control UpDown
En en la pgina Win95 de la paleta de componenetes Delphi hay un control, llamado TUpDown
, que funciona de forma similar, con la diferencia de que puede ser asociado a cualquier otro
control y dispone de alguna posibilidad ms.
Mediante la propiedades del control TUpDown, que en parte se enumerarn en la siguiente tabla,
podremos establecer los lmites para el valor que se gestiona, as como el incremento o
decremento que sea aplicar al pulsar el botn, su aspecto, control al que est asociado, etc.
Propiedad
Tipo
Contenido
AlignButton
TUDAlignButton
ArrowKeys
Boolean
Associate
TWinControl
Increment
Integer
Incremento a aplicar
Max
Integer
Valor mximo
Min
Integer
Valor mnimo
Orientation
TUDOrientation
Thousands
Boolean
Position
Integer
Wrap
Boolean
La tecla de acceso rpido a una opcin de men se almacena en la propiedad ShortCut del objeto
TMenuItem que representa a cada opcin de men,la cual puede ser modificada en cualquier
momento, incluso en tiempo de ejecucin. El problema que nos encontramos es cmo saber cul es
el cdigo a asignar a esta propiedad dependiendo de la combinacin de teclas que se desee utilizar.
Una posibilidad es utilizar la funcin TShortCut, que podemos asignar a la propiedad ShortCut. Sin
embargo, an deberemos llevar a cabo algn proceso complejo, ya que tendremos que preguntar
al usuario qu combinacin es la que desea establecer, detectando la pulsacin de teclas como
<Alt>, <Control>, teclas de funcin, etc. La solucin al problema que se nos plantea la
encontramos en el control THotKey, cuya finalidad bsica es facilitar la entrada, por parte del
usuario del programa, de una tecla de acceso rpido. La apariencia de este control es la de un
TEdit, pero en l no es posible teclear texto, ya que en el momento en que se pulsa una tecla o
combinacin de teclas, lo que aparece en el control es una cadena descriptiva de esa combinacin.
Tecla representada
hcAlt
<Alt>
hcCtrl
<Control>
hcCtrlAlt
<Control> + <Alt>
hcNone
Ninguna
hcShift
<Mayscula>
hcShiftAlt
<Mayscula> + <Alt>
hcShiftCtrl
<Mayscula> + <Control>
hcShiftCtrlAlt
hkAlt
<Alt>
hkCtrl
<Control>
hkShift
<Mayscula>
hkExt
<Extra>
Tipo
Contenido
Alignment
TAlignment
AllowClick
Boolean
MaxWidth
Integer
MinWidth
Integer
Style
THeaderSectionStyle
Estilo de la seccin
Width
Integer
Al igual que ocurre con los paneles de una lnea de estado, las secciones de un control
THeaderControl pueden contener un texto, si la propiedad Style tiene asignado el valor hsText, o
bien ser dibujadas por el programa, si el estilo es hsOwnerDraw. El texto a mostrar lo facilitaremos
en la propiedad Text. Si hemos optado por el estilo hsOwnerDraw deberemos responder
adecuadamente al evento OnDrawSection, en el que recibiremos una referencia al THeaderControl,
otra a la seccin a dibujar, un objeto TRect con las coordenadas del rea de dibujo y un parmetro
de tipo Boolean que nos indicar si el botn est pulsado o no.
El ancho de cada una de las secciones de una cabecera es establecido por la propiedad Width de
cada objeto THeaderSection. Este valor habr de encontrarse entre los lmites fijados por las
propiedades MinWidth y MaxWidth.
Tipo
ActivePage
TTabSheet
MultiLine
Boolean
PageCount
Integer
Pages
TTabSheet
TabHeight
SmallInt
TabWidth
SmallInt
Cada una de las pginas contenidas en un control TPageControl es un objeto de tipo TTabSheet.
Podemos acceder o modificar la pgina activa mediante la propiedad ActivePage y acceder a cada
una de las pginas a travs de la propiedad Pages, que es una matriz de objetos TTabSheet. Esta
matriz contendr tantos elementos como indique la propiedad PageCount, que est disponible slo
en tiempo de ejecucin y, adems, es de slo lectura.
Mtodos de TPageControl
Ya sabemos que en tiempo de ejecucin el usuario puede cambiar la pgina activa de un
TPageControl con tan solo una pulsacin de ratn. Nosotros, desde el cdigo de nuestro programa,
tambin podemos cambiar de una pgina a otra, simplemente asignando a la propiedad ActivePage
el nombre del TTabSheet correspondiente.
Otra forma de cambiar de una pgina a otra en utilizar el mtodo SelectNextpage, que nos permite
desplazarnos a la pgina siguiente o anterior, dependiendo de que pasemos como parmetro el
valor True o False, respectivemente. Tambin podemos usar el mtodo FindNextPage, que facilita el
desplazamiento a la pgina siguiente o anterior a una dada. Al llamar a este mtodo pasaremos
tres parmetros: el nombre de la pgina de referencia, un valor de tipo Boolean indicando si se
desea ir a la siguiente, True, o a la anterior, False y por ltimo otro valor de tipo Boolean, que en
caso de ser True indicar al control que slo devuelva pginas que estn activas.
TTabControl
El control TTabControl
, es por el contrario un control simple, que muestra con una apariencia
prcticamente idntica a un TPageControl. Las diferencias, sin embargo, son muchas, ya que el
TTabControl no acta como un contenedor, ni intercambia automticamente pginas. Su finalidad
es, por lo tanto, servir simplemente como un conjunto de opciones que se muestran en forma de
pestaas, de las cuales se puede seleccionar una en cada momento.
Tipo
AllocBy
Integer
BkColor
TColor
BlendColor
TColor
Color de combinacin
Count
Integer
Integer
ImageType
TImageType
Masked
Boolean
ShareImages Boolean
Width
Integer
Todas las imgenes que se almacenan en un TImageList deben tener exactamente el mismo
tamao, por lo que si pretendemos tener disponibles imgenes de distinto tamao, tendremos que
usar varios componentes TImageList, uno por cada tamao.
En caso de que la imagen a cargar est almacenada en un archivo en forma de icono, archivos que
normalmente usan la extensin ICO, deberemos crear un objeto TIcon y cargar dicho archivo,
mediante el mtodo LoadFromFile, aadiendo la imagen a continuacin al TImageList mediante el
mtodo AddIcon, que toma como nico parmetro una referencia al TIcon, devolviendo un entero
indicando el ndice, en la lista de imgenes, de la imagen recin aadida.
Cuando se dibuja un icono, adems de los colores habituales de la paleta existe un color
transparente, con el que se pueden pintar aquellas zonas del icono que no deseamos que alteren el
fondo sobre el que posteriormente sern dibujados. Este "color" no existe en una imagen de mapa
de bits normal, que se almacena en un archivo BMP. Por ello, al aadir una imagen de este tipo al
TImageList, mediante el mtodo AddMasked, adems de una referencia al objeto TBitmap que
contiene la imagen, tambin debemos facilitar, como segundo parmetro, un TColor, indicando el
color de la imagen "mscara", que se usar a la hora de dibujar la imagen para evitar el borrado de
aquellas zonas del fondo que sean ocupadas por el color transparente de la imagen.
Otra opcin, a la hora de aadir una imagen, consiste en crear u obtener nosotros mismos la
mscara para la imagen, pasando los dos parmetros, imagen original y mscara, al mtodo Add,
que al igual que los dos anteriores devolver un entero facilitando el ndice de la imagen aadida.
Ciertos recursos de una aplicacin, como son las imgenes o iconos, pueden distribuirse de forma
conjunta con el ejecutable, en lugar de en archivos separados. Para ello se debe crear un archivo
de recursos cuyo nombre se facilita mediante la directiva $R al proyecto. Estos recursos pueden ser
cargados posteriormente mediante diversas funciones, siendo una de ellas el mtodo LoadResource
del componente TImageList. Al llamar a este mtodo debemos pasar tres parmetros: mediante el
primero indicamos el tipo de recurso que se va a cargar, que ser rtBitmap para una imagen de
mapa de bits, rtCursor para un cursor o rtIcon para un icono; el segundo parmetro ser un String
con el nombre que tiene el recurso en el archivo y el tercero un TColor que servir para crear la
mscara correspondiente.
Edicin de un Men
Veamos un ejemplo de creacin del men. Para ello, partimos de un men vaco recin insertado
en el form. Introducimos la cadena &Bloque uno, que se ir mostrando en el inspector de objetos
junto a la propiedad Caption, y pulsamos la tecla RETURN. Con esto ya tenemos la primera opcin,
cuya primera letra, la 'B' est subrayada, denotando as que adems se trata de una tecla de
acceso rpido.
A la derecha de esta opcin y en la misma barra, aparecer un borde punteado, que nos indicar la
posicin en la que se introducir la siguiente opcin principal, mientras que justo debajo de la
opcin que acabamos de crear tambin aparece un borde punteado en vdeo inverso indicndonos
que podemos teclear la primera opcin del men Bloque uno. Si tras varias opciones queremos
mostrar una separada del resto por una lnea, tan slo habr que introducir un guin y pulsar
<RETURN>. Aparecer as en la ventana una lnea horizontal separando las anteriores opciones de
la siguiente.
Tipo
Comentario
Break
TMenuBreak
Caption
String
Ttulo de la opcin
Checked
Boolean
Count
Integer
Enabled
Boolean
GroupIndex Byte
Items
RadioItem
Boolean
ShortCut
TShortCut
Para crear teclas de acceso rpido a cada una de las opciones, desplegaremos la lista de
posibilidades correspondiente a la propiedad ShortCut, en el inspector de objetos, y
seleccionaremos la combinacin de teclas que queramos, que aparecer a la derecha de la opcin.
Mens multicolumna
En caso de que la lista cuente con un gran nmero de opciones, resultando demasiado larga,
podemos dividirla en dos o ms columnas, mediante la propiedad Break. Esta propiedad puede
tomar los valores que se muestran en la siguiente tabla.
Constante
Tipo de divisin
mbNone
mbBreak
Finalizar la edicin
Cuando hayamos terminado el diseo de nuestro men, tendremos que cerrar el Diseador de
mens para volver a la edicin del form. Al hacerlo nos encontramos de nuevo con el componente
MainMenu y sus propiedades, as como el men que hemos diseado situado en la parte superior
del form. Si queremos acceder a las propiedades de cualquiera de los opciones existentes en el
men tenemos dos opciones: abrir de nuevo el Diseador de mens, realizando un doble clic sobre
el componente, o bien abrir la lista de componentes del Inspector de objetos, seleccionando el
objeto TMenuItem correspondiente a la opcin que deseamos manipular.
Tipo
Comentario
Alignment
AutoPopup
Boolean
PopupComponent TComponent
paLeft
paRight
paCenter
En el caso de que la activacin del men se produzca mediante el mtodo Popup, se visualizar en
la posicin determinada por los parmetros pasados a dicho mtodo.
Si estamos utilizando un determinado men emergente para varios componentes, al producirse la
activacin necesitaremos saber cul de ellos es el afectado por las acciones del men. Para ello
tenemos a nuestra disposicin la propiedad PopupComponent, que es una referencia a dicho
componente.
Cuando no queramos que el usuario pueda elegir una determinada opcin tenemos dos
posibilidades: desactivarla o hacerla no visible. Para ello utilizaremos las mismas propiedades
Enabled y Visible que ya conocemos, asignndoles el valor True o False segn nos interese.
Si alguna de las opciones de nuestro men pueden tomar dos estados, activa o desactiva, podemos
mostrar el estado actual mediante la propiedad Checked. Si damos el valor True a esta propiedad,
a la izquierda de la opcin aparecer una pequea marca, indicando que en ese momento est
activada.
Dando el valor True a la propiedad RadioItems, que por defecto es False, conseguiremos que las
marcas anteriores aparezcan como pequeos crculos, al estilo de los botones de radio. Adems,
tan slo podr estar marcada en un determinado momento una opcin del grupo. Los grupos de
opciones se forman mediante la propiedad GroupIndex, de tal forma que todas aquellas opciones
que tienen un mismo valor en esta propiedad, forman un grupo.
Combinacin de mens
Como sabemos, en un proyecto pueden existir mltiples forms, uno de los cuales acta como
principal. Cada uno de los forms existentes puede contar con su propio men, que se mostrar en
la parte superior del form al que corresponda.
Si lo queremos, podemos combinar automticamente el men del form principal y cualquiera de los
forms secundarios, el que est activo en cada momento, de tal forma que el men de ste ltimo
sustituya en todo o en parte al men de la ventana principal. Para ello nos serviremos bsicamente
de dos opciones: AutoMerge y GroupIndex.
Mediante la propiedad AutoMerge, con la que cuenta todo componente MainMenu,
determinaremos qu mens se combinarn con el men del form principal y cules no. Si
disponemos en un form de un men que nosotros queremos combinar con el del form principal,
habr que dar el valor True a esta propiedad. Si, por el contrario, queremos que el men aparezca
en su propio form, dejaremos el valor por defecto, que es False.
En principio, el men del form secundario que est activo sustituir totalmente al men del form
principal, a no ser que nosotros indiquemos lo contrario, para lo cual tendremos que utilizar la
propiedad GroupIndex.
Esta propiedad est presente en todos los objetos TMenuItem, aunque slo es habitual utilizarla en
aquellas opciones que forman parte de la barra principal. La norma general de funcionamiento es la
siguiente: una opcin del men del form secundario que tenga un valor en GroupIndex igual al de
una opcin del form, sustituir a dicha opcin.
Aquellas opciones cuyo valor de GroupIndex no tengan correspondencia en el men del form
principal sern insertadas, en las posiciones que le correspondan segn el orden establecido por el
valor de esa propiedad. De igual forma, todas aquellas opciones del men principal cuyo valor de
GroupIndex no tenga correspondencia con ninguna opcin del form secundario, permanecern en
el men.
correspondiente, e Insert, que nos permite insertar la nueva opcin en una determinada posicin,
para lo cual el primer parmetro indicar dicha posicin, sabiendo que el primer elemento del men
tiene ndice cero. Podemos conocer el ndice correspondiente a una opcin dada mediante el
mtodo IndexOf, que tomar como parmetro la referencia a la opcin cuya posicin deseamos
determinar.
ShowMessage(Cadena);
Tal y como su nombre indica, muestra el mensaje 'Cadena', que debe ser un string, en una
pequea ventanita que se muestra en el centro de la pantalla, como la del dibujo:
mtWarning
mtError
mtInformation
mtConfirmarion
mbYes
mbOk
OK
mbNO
No
mbCancel
Cancelar
mbHelp
Ayuda
mbAbort
Abortar
mbRetry
Reintentar
mbIgnore
Ignorar
mbAll
Todo
Por ltimo podremos facilitar un identificador asociado a una pgina de ayuda, que
aparecer en caso de que se pida ayuda estando activa la ventana mostrada por
MessageDlg. Si no vamos a poner ayuda, simplemente escribiremos un 0.
Una vez que el usuario pulsa cualquiera de los botones existentes en la ventana, sta se cierra y la
funcin MessageDlg devuelve un valor que nos servir para conocer qu botn ha sido el pulsado y,
por lo tanto, qu accin tenemos que llevar a cabo. En la siguiente tabla se muestran las
constantes que representan los distintos valores de retorno.
Constante
mrNone
mrOk
mbOk
mrYes
mbYes
mrNo
mbNo
mrCancel
mbCancel
mrAbort
mbAbort
mrRetry
mbRetry
mrIgnore
mbIgnore
mrAll
mbAll
Al igual que ocurre con ShowMessage, la ventana mostrada con MessageDlg aparecer en el centro
de la pantalla. Si queremos visualizarla en una cierta posicin utilizaremos la funcin
MessageDlgPos, que adems de los parmetros descritos anteriormente, toma dos enteros
especificando las coordenadas en la que se situar la ventana.
Constante Valor
Significado
IDABORT
IDCANCEL
IDIGNORE
IDNO
IDOK
IDRETRY
IDYES
Si, por ejemplo, queremos una vetana con un icono de exclamacin y los botones correspondientes
a la constante MB_YESNOCANCEL, pondremos en el parmetro Tipo de la funcin lo siguiente:
MB_ICONEXCLAMATION + MB_YESNOCANCEL
Los forms de un proyecto pueden ser creados al inicio del programa, cuando ste se carga en
memoria, de tal forma que podamos hacer referencia a ellos desde cualquier punto en que nos
convenga. La creacin automtica de los forms se determina en la pgina Forms de las opciones
del proyecto. Inicialmente, todos los forms aparecern en la lista de la izquierda, Auto-create
forms, indicando as que sern creados al inicio de la ejecucin sin intervencin nuestra.
Sirvindonos de los botones situados en la parte central, entre las dos listas, podremos mover
forms de una lista a otra. Los forms que desplacemos a la lista Avaible forms no sern creados al
inicio de la aplicacin, por lo que antes de poder usarlos en el programa habr que crearlos.
Crear un form
Antes de poder hacer referencia a un form desde otra Unit, habr que aadir a la clusula Uses de
dicha Unit la referencia, es decir, el nombre de la Unit asociada al form.
Vamos a suponer que tenemos un proyecto con dos forms y sus dos Units, UPrincipal y
USecundaria. Para poder hacer referencia al segundo form desde el cdigo del primero,
aadiramos a la clusula Uses de sta el mdulo USecundaria. Esta operacin se puede realizar
automticamente, mediante la opcin Use Unit del men File. Al seleccionarla aparece una lista
con los mdulos disponibles en el proyecto, slo aquellos que no estn ya en uso en el mdulo
actual, pudiendo seleccionar cualquiera de ellos.
Dada por supuesta la resolucin de referencia anterior, para crear un form (que no est en AutoCreate Forms, sino que est en Available Forms) tendremos que utilizar el constructor Create, que
acta como el de cualquier otro componente, tomando un parmetro que ser una referencia al
objeto que se convertir en padre del nuevo form.
Otro mtodo que nos permite crear un form en tiempo de ejecucin viene dado por el objeto
Application, del tipo TApplication y que se crea al comenzar el programa. Este objeto cuenta con
un mtodo, llamado CreateForm, al que pasndole como parmetro el tipo del form a crear y ua
variable donde almacenar la referencia, crear el form de forma similar a como lo hara el
constructor Create.
Cuando el form que hemos creado no nos vaya a servir ms, tendremos que liberar la memoria que
se asign al crearlo, para lo cual llamaremos al mtodo Free con el que cuentan todos los forms.
Vamos a aclarar un poco el punto del tipo del form. Cuando estamos creando un form, en tiempo
de edicin, ese form tiene asociado un Name, que es como se le distingue de otros objetos. Ahora
bien, si nos fijamos en el inspector de objetos, cuando tenemos seleccionado el form, supongamos
que con Name=FrmPrincipal, veremos que pone FrmPrincipal: TFrmPrincipal. Precisamente,
TFrmPrincipal es el tipo del form que estamos creando. As, en el caso que estamos describiendo,
para crear dinmicamente el form va el mtodo de TApplication, escribiremos:
Application.CreateForm(TFrmPrincipal, FrmPrincipal);
siendo TFrmPrincipal el tipo del form, y FrmPrincipal el nombre del form concreto que es de ese
tipo.
Ventajas y desventajas
Si en una aplicacin se cuenta con muchos forms y todos ellos son creados al inicio, est claro que
el programa consumir una cantidad de memoria muy superior a la que sera necesaria si los forms
se fuesen creando y liberando a medida que fuesen precisos.
Otra de las desventajas que tiene la creacin automtica de todos los forms al inicio de la
aplicacin, es el tiempo que sta tarda en cargarse y mostrarse activa. Obviamente, cuantos ms
forms se tengan que crear, el programa tardar ms en ponerse en funcionamiento.
Ahora bien, si se trata de una aplicacin con pocos forms, tres o cuatro, entonces es ms
recomendable que se creen automticamente al principio, pues minimizaremos los riesgos de que
se nos olvide liberar los forms cuando ya no vayamos a usarlos.
Mostrar un form
Independientemente del mtodo que hayamos seleccionado para crear un form, a la hora de
utilizarlo en nuestro programa tendremos que hacerlo visible, para lo cual podemos utilizar varios
mtodos. Uno de ellos consiste en dar el valor True a la propiedad Visible, lo que causar la
aparicin inmediata del form. El efecto ser similar si llmamos al mtodo Show, ya que ste
bsicamente lo que hace es dar el valor True a esa propiedad, aunque, adems, se asegura de que
el form est sobre los dems, llamando si es necesario al mtodo BringToFront.
Al mostrar el form mediante cualquiera de los dos mtodos anteriores, estaremos visualizando una
ventana no modal, lo que quiere decir que si el programa mantiene abiertas otras ventanas,
podemos activarlas sin cerrar necesariamente aquella en la que nos encontramos actualmente.
Para ocultar una ventana no modal podemos tambin utilizar dos mtodos: llamar al mtodo Hide,
o bien damos el valor False a la propiedad Visible.
El componente OpenDialog
Ttulo de la ventana
Por, defecto el cuadro de dilogo tendr un ttulo genrico, que nosotros podemos personalizar
utilizando la propiedad Title. La cadena que asignaremos a esta propiedad ser la que aparezca
como ttulo en la parte superior de la ventana. La propiedad Title del componente OpenDialog
sera equivalente a la propiedad Caption de un form.
Archivo seleccionado
El nombre de archivo que aparezca inicialmente seleccionado, en el apartado Nombre de archivo,
depender del valor que asignemos a la propiedad FileName. Asignando una cadena vaca dicho
apartado aparecer en blanco, mientras que si facilitamos una cadena conteniendo el nombre de
un archivo ste aparecer como el archivo elegido por defecto.
Una vez que el usuario haya seleccionado el archivo que desea abrir, tecleando su nombre o
eligindolo de la lista, y cerrado el cuadro de dilogo, podremos obtener el nombre y todo el
camino completo mediante la propiedad FileName.
Archivos que aparecen en la lista
Podemos facilitar una lista de tipos de archivos que deben aparecer en el cuadro de dilogo,
mediante la propiedad Filter, a la que asignaremos una cadena que contiene una descripcin del
tipo de archivo y la referencia correspondiente, que normalmente se compone de un asterisco, un
punto y la extensin. Estos dos componentes los separamos mediante el smbolo | (ASCII 124). Si
queremos, podemos dar varios tipos de archivo, separando los datos de uno de los del siguiente
mediante ese mismo carcter. En caso de que un determinado tipo de archivo est asociado con
varias extensiones distintas, stas se facilitarn separndolas por punto y coma.
Por ejemplo, si asignamos la cadena
Archivos de texto | *.txt | Pginas web | *.htm; *.html
a la propiedad Filter de este cuadro de dilogo, apareceran en la lista de archivo dos elementos,
Archivos de texto y Pginas web.
Cuando se facilitan varios filtros para un cuadro de dilogo, por defecto aparece seleccionado el
primero. Si queremos, podemos hacer aparecer cualquier otro modificando el valor de la propiedad
FilterIndex, que por defecto es 1. Por ejemplo, si antes de mostrar el cuadro de dilogo en el que
hemos establecido el filtro anterior damos el valor 2 a FilterIndex, en la lista aparecern por
defecto las Pginas web.
Extensin por defecto
La propiedad DefaultExt nos puede servir para aadir una extensin por defecto cuando el usuario
no la haya especificado. Por defecto el valor de la propiedad DefaultExt es una cadena vaca, lo que
indica que no se aadir extensin alguna a los nombres de archivo.
Directorio inicial
Si lo queremos, podemos especificar una carpeta inicial mediante la propiedad InitialDir, a la que
asignaremos una cadena conteniendo la unidad y camino completo de la carpeta que aparecer
inicialmente abierto.
Otras opciones
El aspecto y comportamiento del cuadro de dilogo OpenDialog puede ser modificado segn las
opciones que activemos en la propiedad Options, que es un conjunto del tipo TOpenOptions. Por
defecto esta propiedad tiene como valor el conjunto vaco. Veamos las propiedades:
ofHideReadOnly: Oculta la caja de seleccin Abrir como slo lectura, impidiendo as que
el usuario abra un archivo en este modo.
ofFileMustExist: Aunque el cuadro de dilogo que estamos tratando tiene como finalidad
solicitar un nombre de archivo a abrir, se permite introducir el nombre de un archivo
inexistente, suponiendo que es posible crearlo. Activando esta accin forzaremos al usuario
a que elija un archivo existente, avisndole si es necesario mediante un mensaje que el
archivo que especifica no existe.
ofPathMustExist: Funciona de forma similar a la opcin anterior, avisando al usuario
mediante un mensaje en caso de que introduzca un camino de acceso inexistente.
ofNoChangeDir: Durante la seleccin de un archivo el usuario puede alterar el directorio
establecido como actual, haciendo actual cualquier otro. Activando esta opcin
conseguiremos que al cerrar el cuadro de dilogo el directorio actual vuelva a ser el que era
al principio, al mostrar la ventana.
ofCreatePrompt: En caso de que el archivo especificado no exista, se mostrar una ventana
preguntando si se desea crear.
ofExtensionDifferent: Cuando antes de visualizar el cuadro de dilogo se ha establecido una
extensin por defecto, mediante la propiedad DefaultExt, y el usuario posteriormente ha
introducido un nombre de archivo con una extensin distinta, esta opcin se activa.
Comprobando la existencia de ofExtensionDiferent en la propiedad Options, mediante el
operador Is, podremos por lo tanto saber si la extensin del archivo es la establecida por
defecto o no.
ofShowHelp: Activando esta opcin forzaremos la aparicin en el cuadro de dilogo de un
botn de ayuda.
ofNoValidate: Por defecto el cuadro de dilogo comprueba que los caracteres introducidos
por el usuario sean vlidos en un nombre de archivo, avisando mediante un mensaje en
caso contrario. Si activamos esta opcin evitaremos la citada comprobacin, permitiendo al
usuario introducir cualquier carcter.
ofAllowMultiSelect: Mediante esta opcin daremos al usuario la posibilidad de seleccionar
varios archivos a abrir, utilizando el mtodo habitual de seleccin mltiple de una lista. Para
obtener los nombres de los archivos seleccionados, en lugar de usar la propiedad FileName
tenemos a nuestra disposicin la propiedad Files, que es un objeto del tipo TStrings de slo
lectura, en el cual cada elemento contiene un nombre junto con su camino completo.
Al utilizar cualquiera de estas opciones hay que recordar que la propiedad Options es un conjunto y
que, por lo tanto, hemos de facilitar la lista de componentes de esas opciones entre corchetes.
El Componente SaveDialog
La operacin complementaria a la carga de un archivo es su grabacin, para la que dispone de un
componente llamado SaveDialog, que podemos encontrarlo bajo el icono
. La apariencia y el
funcionamiento de este cuadro de dilogo es muy similar al que acabamos de ver. De hecho, el
componente SaveDialog tiene exactamente con las mismas propiedades que OpenDialog.
La propiedad Options
No todas las opciones que hemos visto para la propiedad Options tienen sentido cuando lo que se
desea es salvar un archivo en lugar de cargarlo, por ejemplo la opcin OfFileMustExit, pues
perfectamente podemos grabar un archivo si no existe, lo crearamos en primer lugar.
Adems de las opciones vistas para el componente OpenDialog, en un cuadro de dilogo para
salvar un archivo tambin podemos utilizar ofOverwritePrompt. Al hacerlo, el cuadro de dilogo
comprobar si el archivo en el que se desea grabar ya existe y, en caso afirmativo, preguntar al
usuario si desea o no sobreescribir el contenido actual de ese archivo.
FontDialog
Para facilitar la seleccin de un tipo y estilo de letra disponemos de l componente FontDialog, que
aparece en la Paleta de componentes como
Pantalla
fdPrinter
Impresora
fdBoth
Ambos
Opciones
Al igual que en los cuadros de dilogo vistos anteriormente, en este tambin existe una propiedad
Options que puede contener una o ms opciones, siendo el valor por defecto [fdEffects]. Las
opciones posibles y su finalidad son las siguientes:
fdTrueTypeOnly: En la lista aparecern slo fuentes TrueType, que se caracterizan por ser
escalables y poder utilizarse tanto en pantalla como en impresora.
fdScalableOnly: En la lista de tipos slo aparecern fuentes que sean escalables, ya sean
TrueType o no.
fdAnsiOnly: No se mostrarn en la lista aquellas fuentes que sean de smbolos, slo
aparecern las que tengan el conjunto de caracteres estndar.
fdFixedPitchOnly: En la lista slo apareceran tipos de letra de espaciado fijo.
fdNoVectorFonts: En al lista no aparecern los tipos de letra construidos con vectores.
fdWysiwyg: En la lista slo aparecern aquellos tipos de letra que estn disponibles tanto
para pantalla como para la impresora.
fdEffects: Esta opcin est activa por defecto, haciendo aparecer en el cuadro de dilogo
los apartados de efectos, en los cuales es posible elegir el color de letra y si est aparecer
subrayada o tachada.
fdForceFontExist: Al activar esta opcin no se permitir la entrada directa de un nombre de
tipo de letra que no exista.
fdNoFaceSel: Al mostrar el cuadrado de dilogo normalmente aparece seleccionado uno de
los tipos de letra disponibles, cuyos nombres se muestran en la parte superior de la lista.
Activando esta opcin conseguiremos que ese campo de edicin aparezca vacio.
fdNoSizeSel: Esta opcin es similar a la anterior aplicndola al tamao, de tal forma que al
activarla no aparecer preseleccionado un tamao.
fdNoStyleSel: Similar a las dos anteriores, no mostrando un estilo seleccionado por defecto.
fdLimitSize: El tamao de letra a elegir por el usuario puede ser limitado, activando esta
opcin y facilitando en las propiedades MinFontSize y MaxFontSize el tamao mnimo y
mximo permitidos.
fdShowHelp: Fuerza la aparicin en el cuadro de dilogo de un botn de ayuda.
Una vez hayamos establecido todas las propiedades del cuadro de dilogo, bien en tiempo de
diseo o en tiempo de ejecucin, no tendremos mas que usar el mtodo Execute para mostrarlo.
ColorDialog
Este cuadro de dilogo lo tendremos a nuestra disposicin gracias al componente ColorDialog, que
en la Paleta de componentes aparece como
Color seleccionado
La propiedad Color de este componente nos servir para obtener el color que el usuario haya
seleccionado en el cuadro de dilogo, pudiendo tambin usarla, antes de mostrar la ventana, para
fijar un color por defecto. Adems, podemos facilitar una serie de colores definidos a medida,
aparte de los colores del sistema Windows. Para ello tendremos que utilizar la propiedad
CustomColors, que es un objeto de tipo TString. A ella aadiremos una cadena por cada color que
deseemos definir, conteniendo la palabra Color seguida de una letra, de la A a la P, un signo igual
y una secuencia en hexadecimal, especificando los componentes BGR del color. Por ejemplo,
podemos escribir algo as dentro del editor de lneas de la propiedad:
ColorA=FCDDDA
ColorB=BC875C
ColorC=E7BEAF
Opciones
Al igual que los anteriores componentes, ste tambin cuenta con una propiedad Options, que es
un conjunto, en principio vaco, y puede contener una o ms opciones de las siguientes:
Impresin
Para dar las opciones comunes de imprimir algo podemos usar el cuadro que encontraremos en la
Paleta de componentes bajo el icono
. El comportamiento de ste est controlado en parte por
la propiedad Options, que en este caso puede tomar los valores:
poPageNums: Permite que el usuario seleccione una pgina de inicio y otra de fin de
impresin. Podemos poner lmites a los nmeros de pgina posibles mediante las
propiedades MinPage y MaxPage.
poSelection: Permite que el usuario elija imprimir la seleccin actual en el documento.
poWarning: En caso de que no haya una impresora instalada, al especificar esta opcin el
cuadro de dilogo avisar al usuario de esta circunstancia.
poPrintToFile: Visualiza una opcin por la cual el usuario puede elegir imprimir en un
archivo, en lugar de en la impresora.
Informacin a imprimir
El usuario puede elegir, si nosotros lo permitimos, entre imprimir la seleccin actual, un
determinado nmero de pginas o bien todo el documento. Mediante la propiedad PrintRange
podremos conocer cul ha sido la opcin elegida. En la tabla siguiente se muestran los posibles
valores:
Constante
prSelection
Informacin a imprimir
La seleccin actual
Todo el documento
Si una de las opciones del cuadro es poPageNums, en las propiedades FromPage y ToPage
encontraremos la pgina de inicio y fin, respectivamente.
Por defecto, el nmero de copias a imprimir es uno, aunque nosotros podemos modificar este valor
por defecto estableciendo el nuevo nmero en la propiedad Copies. En caso de que el usuario
indique un nmero distinto de copias en el cuadro, esta misma propiedad nos servir para conocer
dicho nmero. El orden en que habrn de imprimirse las copias vendr determinado por el valor de
la propiedad Collate, que puede ser True o False, dependiendo de lo cual las copias sern
consecutivas, de cada pgina, o bien se imprimir una copia completa cada vez.
Por ltimo nos encontramos con la propiedad PrintToFile, que tomar el valor True en caso de que
el usuario haya elegido realizar la impresin en un archivo, en lugar de en la impresora.
Debe quedar claro que este componente simplemente nos facilita la edicin de las opciones que
queremos dar al imprimir, y que nos va a devolver los valores adecuados para saber cmo hemos
de imprimir, pero la tarea especfica de imprimir el documento/imagen/etc la debemos realizar
nosotros, no se imprime automticamente por el mero hecho de usar este cuadro, slo es una
ayuda.
Configuracin de la impresora
Aunque el cuadro de dilogo que contiene las opciones de impresin cuenta con un botn que
permite el acceso a las propiedades de la impresora, nuestro programa tambin puede contar con
una opcin que d acceso directamente a la ventana de configuracin de impresin. Para ello existe
el componente que es una impresora con una herramienta encima, y que recibe el nombre de
PrintSetupDialog, siendo este el icono que encontraremos en la Paleta de componentes
.
Este componente no cuenta con ninguna propiedad especfica, por lo que para utilizarlo tan slo
habremos de llamar al mtodo Execute.
El cuadro FindDialog
La propiedad Options de este componente nos permitir configurar las opciones que estarn
disponibles en el cuadro de dilogo, antes de mostrarlo, as como conocer cules ha seleccionado el
usuario, despus de haberlo mostrado. Se trata de un conjunto que puede tomar los siguientes
valores:
frHideMatchCase: Oculta la opcin Match Case, cuya finalidad es indicar que la bsqueda
se ha de realizar respetando el orden de maysculas y minsculas.
frDisableMatchCase: Desactiva la misma opcin anterior, de tal forma que aunque es visible
el usuario no puede seleccionarla.
frMatchCase: Indica que la opcin Match Case ha sido activada por el usuario.
frHideWholeWord: Oculta la opcin Match Whole Word Only, cuya finalidad es indicar
que la bsqueda se ha de realizar sobre palabras completas.
frDisableWholeWord: Desactiva la opcin anterior, dejndola visible pero inaccesible para el
usuario.
frWholeWord: Indica que el usuario ha seleccionado la opcin Match Whole Word Only
en el cuadro de dilogo.
frHideUpDown: Oculta la opcin Direction, cuya finalidad es facilitar la indicacin de la
direccin de bsqueda.
frDisableUpDown: Desactiva la opcin anterior, no permitiendo que el usuario la seleccione.
frDown: Cuando est activa inidica que el usuario ha seleccionado el botn Down,
mientras que si no lo est el botn elegido ser Up.
frFindNext: Indica que se ha pulsado el botn Find Next del cuadro de dilogo.
frShowHelp: Fuerza la aparicin de un botn de ayuda en la ventana.
Cada vez que el usuario pulse el botn Find Next, el componente generar un evento OnFind, en
cuyo manejador podemos aadir el cdigo necesario para obtener el texto a buscar, de la
propiedad FindText, y poner en marcha el proceso segn las opciones seleccionadas. El cuadro de
dilogo no se oculta, de tal forma que el usuario puede volver a pulsar el botn Find Next para
repetir la bsqueda, o bien modificar el texto y las opciones a buscar. Si lo deseamos podemos
cerrar el cuadro de dilogo desde nuestro programa, utilizando el mtodo CloseDialog, si no lo
hacemos ser el usuario el responsable de cerrarlo, para lo cual tendr que pulsar el botn Cancel.
Mientras est en marcha el proceso de bsqueda, en caso de que el cuadro de dilogo pueda
interferir con la visualizacin de nuestro programa, podemos utilizar la propiedad Position para
desplazarlo a otro punto. Esta propiedad toma como parmetro un TPoint, que es un registro
conteniendo dos miembros, X e Y, correspondientes a la coordenada horizontal y vertical,
respectivamente, del punto en el que deseamos posicionar la ventana.
Sustituciones
La apariencia y funcionamiento del cuadro de dilogo para bsqueda y sustitucin es similar al
anterior. El componente est representado en la Paleta de componentes como el icono
En este existe un campo adicional, en el que se introduce el texto que sustituir al texto buscado, y
otros dos botones, cuya finalidad es sustituir una vez o todas las veces que el texto aparezca.
Al igual que ocurre con el cuadro de dilogo de bsqueda, cada vez que el usuario pulsa el botn
Find Next se genera un evento OnFind. De forma similar, al pulsar el botn Replace o Replace
All se producir un evento OnReplace. Para saber cul de los dos botones ha sido pulsado nos
servir la propiedad Options, ya que dependiendo de ello en esta propiedad encontraremos activa
la constante frReplace o frReplaceAll.
Tenemos en la ayuda de Delphi sobre estos componentes un ejemplo sobre cmo realizar la
bsqueda de la palabra que nos hayan introducido. Hay que recordar que estos componentes no
nos buscan la palabra, simplemente nos facilitan mostrar las opciones que hay que dar al usuario y
la recogida de datos correspondiente.