Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Unidad
2b
Propiedad
Significado
Nombre de la ficha. Esta propiedad contiene el identificador de la ficha que es utilizado dentro del programa como una variable. Es conveniente que todas las fichas de nuestro programa posean identificadores propios y que den pistas sobre el contenido de la ficha. Su contenido es un identificador. Ttulo de la ficha. Todas las fichas poseen en la parte superior un ttulo, el cual se modifica mediante la propiedad Caption. El contenido de Caption coincide, inicialmente, con el contenido de Name, pero no tienen que coincidir a la fuerza. El contenido es de tipo AnsiString. La propiedad Position toma un valor por defecto que es poDesigned. Este valor hace que la ficha aparezca en pantalla con la misma posicin que tena cuando se dise. Este valor no es el ms adecuado cuando el diseo de la aplicacin se realiza con monitores de gran tamao.
Name
Caption
Position.poDesigned
Entornos de desarrollo
Position.poDefault
Este valor produce que los valores de las 4 propiedades anteriores varen de forma aleatoria en cada ejecucin del programa. Esta opcin tampoco es muy apropiada ya que puede ocurrir que una ficha no aparezca en pantalla estando abierta. Con este valor en la propiedad Position se hace que el tamao de la ficha permanezca fijo, mientras que la posicin va cambiando con cada ejecucin. Inversa a la anterior, conserva la posicin de la ficha pero el tamao es fijado en tiempo de ejecucin. Con este valor se consigue que la ficha aparezca en el centro de la pantalla con el tamao original de diseo. Es una propiedad que puede contener tres valores posibles: wsNormal, wsMinimize y wsMaximize. Con el primer valor, la ficha aparece segn el diseo y segn el valor de la propiedad Position. Con el segundo valor, la ficha aparece minimizada en forma de un icono. Con el tercer valor, la ficha aparece ocupando toda la pantalla o maximizada. Esta propiedad permite escalar la ficha y su contenido. Si contiene el valor TRUE, permite el escalado. Si posee el valor de FALSE, no permite el escalado. Es un conjunto de valores que cada uno de ellos tiene el siguiente significado: TRUE: visualiza un botn en la esquina superior derecha que permite minimizar la ventana. FALSE: no aparece dicho botn. TRUE: visualiza un botn en la esquina superior derecha que permite maximizar la ventana abierta. TRUE: visualiza un botn en la esquina superior derecha que sirve para cerrar la ventana. Tambin visualiza un botn en la esquina superior izquierda con un men de sistema. Esta propiedad puede tener 6 valores diferentes: Este valor lo coge la ficha por defecto. Permite hacer la ficha lo grande que el usuario desee. Hace que el borde de la ficha aparezca algo ms fino que en el estado normal.
WindowState
Scaled
Entornos de desarrollo
Como el anterior, pero con una barra de ttulo menor, al estilo de las barras de herramientas. Con este valor, la ficha aparece segn se ha diseado, sin los botones minimizar y maximizar. Elimina el borde de la ventana, as como la barra de ttulo con todos sus controles. Esta opcin hace los bordes redimensionables con una barra de ttulo menor de lo normal. Por defecto esta propiedad tiene el valor TRUE. Dndole el valor de FALSE a esta propiedad desactivaremos el efecto tridimensional, quedando el fondo de la ficha en blanco. Esta propiedad permite cambiar el color de la parte cliente de la ficha. Esta propiedad almacena el identificador de la propiedad Name del men principal insertado en la ficha. Esta propiedad almacena el identificador de la propiedad Name del men flotante asignado a la ficha. Propiedad que contiene la cadena de caracteres que aparece en la ayuda flotante junto al ratn. Si esta propiedad est con el valor TRUE se visualiza la ayuda flotante y si est a FALSE no se visualiza dicha ayuda. TRUE: la ficha est activa. FALSE: la ficha no est activa. TRUE: la ficha se hace visible si Enabled est a true. FALSE: la ficha no es visible. fsNormal: no puede contener otras ventanas en su interior ni ser a su vez contenida en otra ventana. fsMDIForm: puede contener en su interior otras ventanas. fsMDIChild: son las ventanas que van a estar dentro de otra. fsStayOnTop: es para una ventana que siempre estar en el primer plano o visible en su totalidad. Es la propiedad que permite dar formato a todos los caracteres que existan dentro de la ficha. Cuando est con el valor de TRUE permite que aparezcan barras de desplazamiento dentro de la ventana cuando las dimensiones de sta se reducen con el ratn.
Ctl3D
FormStyle
Font AutoScroll
Entornos de desarrollo
Permite seleccionar el componente de los que contiene la ficha para que aparezca activado al abrir la ficha. Mediante esta propiedad podemos asociar a la ficha una determinada pgina de ayuda contextual. Se utiliza para indicar las opciones de un men que se activaran cuando se seleccione un objeto mediante el OLE. poNone: no mantiene proporcin alguna. poProportional: imprime el mismo nmero de puntos en impresora que en pantalla. poPrintToFit: ocupa el mayor espacio posible de la pgina manteniendo la proporcin de la ficha. No tiene significado alguno. Esta propiedad es de tipo Longint y se utiliza como variable para poder almacenar valores enteros. FALSE: las pulsaciones de teclas que se produzcan durante la ejecucin del programa pasan directamente al control de la ficha. TRUE: las pulsaciones de teclas son enviadas a la ficha y despus al control de la ficha. Esta propiedad de slo lectura podr ser consultada por el cdigo de la ficha principal o desde donde se llama a la actual ficha. Los valores que puede tomar esta propiedad estn desglosados en el componente Button.
PrintScale
Tag
KeyPreview
ModalResult
Los eventos son procedimientos que se ejecutan cuando se produce algn suceso que se pretende controlar mediante programa. Algunos eventos de la ficha se repiten en otros componentes que puede contener la ficha. Los eventos de una ficha son:
Eventos
Significado
Cuando el puntero del ratn se mueve por la ficha se ejecuta este evento. El evento recibe 3 parmetros: X e Y que son de tipo entero e indican la posicin del cursor expresada en puntos, y Shift que es de tipo conjunto que contendr uno de los siguientes valores dependiendo de qu teclas y botones del ratn estn pulsados.
OnMouseMove
Entornos de desarrollo
Una de las teclas de maysculas. La tecla <Alt> La tecla <Control> El botn derecho del ratn El botn izquierdo del ratn El botn central del ratn Los botones izquierdo y derecho del ratn.
OnMouseDown
Se ejecuta cuando se pulsa cualquiera de los botones del ratn estando ste sobre la ficha. Si el botn pulsado es el izquierdo y el puntero est encima de un componente toma el control este componente y no se ejecuta el evento. El evento recibe 3 parmetros: X, Y, Shift y Button. Este ltimo puede tomar tres valores: mbRight (botn derecho), mbLeft (botn izquierdo) y mbMiddle (botn central). Cada vez que se libera un botn del ratn sobre un control, ste recibe el evento OnMouseUp. Los parmetros son idnticos al evento anterior. Este evento tambin puede ejecutarse por la pulsacin de la barra espaciadora sobre un control o la pulsacin de la tecla <Intro> o <Escape>. En la mayora de las ocasiones se ejecuta por la pulsacin del botn izquierdo del ratn. Se ejecutar cuando se pulse dos veces seguidas con el botn izquierdo del ratn. Se ejecuta al pulsarse una tecla. Se ejecuta al liberar una tecla. Se ejecuta cuando se pulsa una tecla alfanumrica. Cuando se arrastra un objeto, aplicando la filosofa de arrastrar y soltar, al pasar el objeto por encima de un control se ejecuta varias veces el evento OnDragOver correspondiente al control. Se ejecuta una sola vez al soltar el objeto encima del control. Se ejecuta cuando la ficha va a ser creada permitiendo realizar inicializaciones. Este evento se ejecuta en el momento en que la ficha se convierte en la ventana activa en el entorno.
OnMouseUp
OnClick
Entornos de desarrollo
Se ejecuta justo antes de que la ficha se haga visible. Se ejecuta justo antes de que la ficha sea ocultada. Este evento se ejecuta cuando la ficha se vuelve inactiva, porque se haya cambiado a otra ventana o aplicacin. Antes de realizar el cierre de la ventana se ejecuta este evento, que recibe como parmetro por referencia el llamado Action que puede contener los valores: caFree, cuando la ficha es cerrada; caMinimize, cuando la ficha se minimiza; caHide, cuando la ficha se oculta; caNone, cuando no se permite el cierre de la ficha. Se ejecuta cuando se va a cerrar la ficha. Este evento recibe el parmetro por referencia CanClose al que daremos el valor TRUE o FALSE dependiendo de que se permita o no dicho cierre. Cuando la ficha se va a destruir y a liberar la memoria ocupada, se ejecuta este evento. El evento OnEnter entra en ejecucin en el componente que se activa y OnExit en el componente que se desactiva. Este evento se ejecuta cada vez que la ficha necesita ser dibujada. Cada vez que el tamao de una ficha sea modificado durante la ejecucin se generar este evento, que se puede aprovechar para modificar la disposicin de los controles en su interior segn el nuevo tamao.
OnClose
OnCloseQuery
OnResize
Las fichas, como objetos que son, tambin tienen mtodos, entre los ms usuales estn:
Mtodos
Show BringToFront SendToBack Hide Close
Significado
Visualiza la ficha encima de las ventanas que estn abiertas. Trae la ficha del fondo al primer plano. Enva la ficha del primer plano al fondo de la pantalla. Hace que se oculte la ficha pero no se cierra, pudiendo acceder a los componentes de la ficha. Cierra la ficha
Entornos de desarrollo
Destruye la ventana. Una vez que la ficha ha sido destruida no ser posible acceder a sus componentes. Se utiliza para imprimir la ficha. Hace que la ficha se visualice y la aplicacin no pueda continuar mientras est abierta, para continuar con la aplicacin se debe cerrar la ficha abierta con ShowModal.
Label (etiquetas)
Las propiedades ms usuales son:
Propiedades
Name Caption Left Top Visible Width Height
Significado
Contiene un identificador mediante el cual se identifica el objeto. Es una cadena de caracteres la cual es visualizada en el interior del objeto. Es la coordenada que tiene el objeto respecto al borde izquierdo de su contenedor. Es la posicin en puntos que tiene el objeto con respecto al primer borde superior de la ficha. Si contiene el valor TRUE se hace visible. Si contiene el valor FALSE dicha etiqueta no ser visible. Expresa el ancho del objeto. Expresa cuntos puntos mide de alto el objeto. Hay que ponerle a TRUE cuando se quiere que el tamao del objeto se adapte al texto mostrado en tiempo de ejecucin. Se pone a FALSE cuando se quiere que el objeto tenga siempre la misma forma. Puede tomar distintos valores dependiendo de las necesidades:
AutoSize
Align
Entornos de desarrollo
Conserva la posicin y dimensiones originales. Se coloca en el margen superior del contenedor. Se adapta al margen inferior del contenedor. Se coloca en el margen izquierdo del contenedor. Se adapta al margen derecho del contenedor. Toma todo el espacio disponible del contenedor.
Si AutoSize contiene el valor FALSE, esta propiedad puede tomar 3 valores diferentes: Alignmemt taLeftJustify taRightJustify taCenter Justificado a la izquierda. Justificado a la derecha. Justificado al centro.
WordWrap
Cuando est a FALSE, el texto que contiene la propiedad Caption solamente se visualiza en una nica lnea independientemente del valor que contenga la propiedad AutoSize. Si posee el valor TRUE y la propiedad AutoSize tambin contiene TRUE, la etiqueta contiene varias lneas de texto con los mrgenes de la caja de texto ajustados a la dimensin de la palabra ms larga; si AutoSize es FALSE el texto se adapta a las dimensiones que el programador le asigne a la caja de texto. Esta es una propiedad mediante la cual se puede apreciar fcilmente la herencia. Si a la propiedad Font de la ficha se le ha asignado algunas caractersticas diferentes de las que contiene por defecto, las etiquetas que se aadan a la ficha tendrn por defecto las caractersticas de las fuentes de la ficha. La gran ventaja de la POO permite que las caractersticas de sta propiedad sean diferentes de las heredadas de la ficha. Esta propiedad hace referencia al color de fondo del objeto. Esta propiedad permite que el fondo de un objeto sea transparente, es decir, que se pueda observar otro objeto que est debajo. TRUE: permite en Caption la escritura de letras subrayadas anteponindole el smbolo & a dicha letra. FALSE: el smbolo & pierde su significado y aparece en la etiqueta como un carcter ms.
Font
Color
Transparent
ShowAccelChar
Entornos de desarrollo
FocusControl
Nos permite seleccionar el objeto al cual va a estar ligada la etiqueta. Pulsando ALT y la letra de la etiqueta que est subrayada se activa el objeto que est asociado a la etiqueta. TRUE: permite visualizar la etiqueta de ayuda que aparece escrita en la propiedad Hint. FALSE: no visualiza la etiqueta de ayuda. Propiedad que contiene la etiqueta de ayuda que se visualizar cuando se pase con el ratn por encima del objeto. TRUE: si ShowHint est a falso implica que se visualizar la etiqueta de ayuda del objeto contenedor. FALSE: no visualiza la etiqueta del objeto contenedor. TRUE: en este caso la etiqueta se visualiza con todas sus propiedades, es decir, est activa. FALSE: la etiqueta se visualiza desactivada. TRUE: la etiqueta se visualiza. FALSE: la etiqueta no se visualiza. Permite seleccionar la forma que tendr el cursor del ratn cuando pase por encima de la etiqueta. Los valores posibles de esta propiedad son: CrDefault CrArrow CrCross CrlBeam CrSize CrSizeNESW CrSizeNS CrSizeNWSE CrSizeWE CrUpArrow CrHourglass CrDrag CrNoDrop CrHSplit crVSplit La que tenga actualmente. Puntero habitual en forma de flecha inclinada. Una cruz. El cursor de texto. Cuatro flechas unidas indicando reposicionamiento Flecha doble indicando cambio de tamao. Flecha doble indicando cambio de tamao. Flecha doble indicando cambio de tamao. Flecha doble indicando cambio de tamao. Flecha vertical con la punta hacia arriba. Reloj de arena. Flecha con documento para arrastrar y soltar. Seal de prohibido. Doble flecha horizontal. Doble flecha vertical.
ShowHint
Hint
ParentShowHint
Enabled
Visible
Cursor
Entornos de desarrollo
Propiedades
Name
Significado
Contiene un identificador mediante el cual se identifica el objeto. Es una propiedad de tipo cadena (string). Su contenido puede ser editado en tiempo de ejecucin. Cuando est activo este componente se puede introducir a travs de l una cadena de caracteres, la cual se almacena en esta propiedad. A esta propiedad se le puede asignar cualquier valor inicial que el programador desee.
Text
Left, Top, Width y Son propiedades cuyo significado coincide con los vistos en la Height ficha. Visible Si contiene el valor TRUE se hace visible. Si contiene el valor FALSE dicho objeto no ser visible. TRUE: El componente est activo y puede ser editado en tiempo de ejecucin. FALSE: el componente est inactivo y, aunque sea visible, el componente no puede ser editado hasta que no se ponga esta propiedad a verdad. TRUE: el componente se ajusta a la dimensin de letra que contiene. FALSE: El componente tiene siempre la dimensin que le asigne el programador. Propiedades que permiten asignar al componente una etiqueta de ayuda contextual. Permite dar color al fondo del componente. Permite asignarle al componente un tipo de letra particular. Esta propiedad hereda el tipo de letra del componente que contenedor.
Enabled
AutoSize
Hint, ShowHint
Color Font
Entornos de desarrollo
10
Cursor
Mediante esta propiedad se elige la forma del puntero del ratn cuando ste se encuentre sobre el componente. No est disponible en tiempo de diseo. Tiene los mismos valores que en el componente Label. Si se quiere utilizar, se le tiene que dar el valor correspondiente en tiempo de ejecucin. Esta propiedad es de tipo integer. Contiene el nmero mximo de caracteres que puede almacenar. Inicialmente contiene el valor cero para indicar que en principio no existe ningn lmite. Los valores que puede tener esta propiedad son: ecNormal: no se realiza ninguna conversin. EcLowerCase: todas las maysculas a minsculas. EcUpperCase: todas las minsculas a maysculas Inicialmente contiene el valor de FALSE. Cuando se modifica la primera vez toma el valor TRUE y as permanece hasta que nos interese. Cuando nos interese que vuelva a tomar el valor FALSE se debe realizar en tiempo de ejecucin. FALSE: el contenido de la propiedad Text puede ser modificado por el teclado. TRUE: el contenido de Text no puede ser modificado por el teclado pero s puede ser modificado por el cdigo de nuestro programa. El carcter contenido en esta propiedad es el que se visualiza en el lugar de las letras que se pulsan. Inicialmente contiene el carcter nulo (#0) que permite visualizar los caracteres tecleados. En la propiedad Text estarn los caracteres tecleados. Permite conocer la primera posicin de los caracteres seleccionados. Hay que tener en cuenta que el primer carcter por la izquierda ocupa la posicin cero. Esta propiedad nos devuelve el nmero de caracteres selecionados Nos permite obtener el texto que se encuentra seleccionado. Tambin permite cambiar el texto seleccionado por otro. TRUE: oculta la seleccin cuando se desactiva el componente edit. FALSE: permanece el texto seleccionado cuando se desactiva el componente edit.
Align
MaxLength
CharCase
Modified
ReadOnly
PasswordChar
HideSelection
Entornos de desarrollo
11
AutoSelect
TRUE: cada vez que se active el componente edit se selecciona todo el texto. FALSE: cuando se activa el componente permanece como se dej antes de perder la activacin. TRUE: permite que el componente sea activado con la tecla tabulador. FASE: el componente no se puede activar mediante la tecla tabulador, pero s se puede activar con el ratn. Su contenido representa el orden en que se activar el componente dentro de todos los componentes existentes en la ficha. Este orden de activacin se puede variar con la opcin Tab Order del men emergente que aparece al pulsar con el botn derecho sobre la ficha. En la ventana de dilogo que se abre se pueden ordenar los componentes segn el criterio que el programador considere oportuno. Estas propiedades pueden tomar uno de los dos valores TRUE o FALSE. Cuando ParentColor contiene el valor verdad quiere decir que la propiedad Color del componente Edit hereda los valores de la propiedad Edit del componente contenedor. Cuando est a falso quiere decir que el componente actual tendr sus propios valores independientes del componente contenedor.
TabStop
TabOrder
Mtodos
SelectAll ClearSelection Clear CopyToClipboard CutToClipboard
Significado
Selecciona todo el texto existente en el componente. Elimina todo el texto seleccionado en ese momento. Elimina todo el texto del componente. Todo el texto seleccionado es copiado en el portapapeles. Todo el texto seleccionado es copiado en el portapapeles y eliminado del componente que se est editando.
Eventos
Significado
Entornos de desarrollo
12
Se ejecuta en el momento en que el componente Edit se convierte en el control activo de la ficha. Se ejecutar cuando deje de ser el componente activo. Cada vez que se inserte o elimine un carcter se ejecutar este evento. La programacin de este evento es muy habitual.
Botones (Button)
Este componente tiene varias propiedades en comn con los componentes vistos hasta ahora. Las propiedades ms usuales son:
Propiedades
Name Caption
Significado
Contiene un identificador mediante el cual se identifica el objeto. Esta propiedad contiene la cadena de caracteres que se visualiza con l. Cuando contiene el valor TRUE el botn est activo y se pueden ejecutar las acciones atribuidas a dicho botn. Si contiene el valor FALSE, el botn se desactiva y el cdigo asociado no se ejecuta aun cuando se intente pulsar dicho botn. Mediante esta propiedad se le puede dar formato al texto que se visualiza y contenido en la propiedad Caption. TRUE: este botn se hace el botn por defecto, es decir, cuando en una ficha existen varios botones, al pulsar la tecla <Intro> se ejecutar el evento OnClick del botn que tenga esta propiedad a verdad. En una ficha solamente puede existir un botn con el valor True en esta propiedad.
Enabled
Font
Default
Entornos de desarrollo
13
Cancel
TRUE: cuando esta propiedad es verdadera, este botn sera el que ejecutara su evento OnClick al pulsar la tecla <Escape>. En una ficha solamente puede existir un botn con el valor True en esta propiedad. Esta propiedad se utiliza para construir fichas de dilogo. Al pulsar el botn se cerrara la ficha de dilogo y se devolvera el valor correspondiente a la constante elegida en esta propiedad. Seguidamente se enumeran las constantes que sta propiedad puede tomar y los valores que devuelve al pulsar el botn. Constante Valor devuelto 0 idYes idNo idOk idCancel idAbort idRetry idIgnore
ModalResult
Ejemplo 2b.1
Enunciado Se desea construir una ficha como la siguiente:
Entornos de desarrollo
14
Al pulsar el botn Borrar cadena se debe limpiar el componente Edit y dejarlo vaco. El componente Edit solamente debe visualizar una cadena pero no editarla. El orden de activacin de los componentes para la tecla tabulador es: BotonLeer -> BotonBorrar -> Edit1. La ficha debe tener el formato de un cuadro de dilogo y debe aparecer centrada en la pantalla. Al pulsar el botn Leer cadena se debe llamar a la siguiente ficha:
Esta ficha es tambin un cuadro de dilogo. En este caso, el componente Edit s se puede editar. El orden de tabulacin es el siguiente: EditEntrada -> BotonAceptar -> BotonCancelar -> BotonSalir. Siempre que se llame a esta ficha tiene que aparecer el componente Edit a foco (activado). Cuando se pulse la tecla retorno equivale a pulsar el botn Aceptar. Cuando se pulse la tecla ESCape equivale a pulsar el botn Cancelar. Cuando se pulse el botn Aceptar, ste debe pasar a la propiedad ModalResult el valor idYes. La pulsacin del botn Cancelar pasa el valor idCancel. La pulsacin del botn Salir pasa el valor de idAbort. Cuando se activa la ficha se debe borrar el contenido del componente Edit. Despus de llamar a la ficha de entrada de cadenas, se debe tratar la causa de la salida de dicha ficha. Si se ha salido porque se ha pulsado el botn Aceptar, se debe visualizar en el componente Edit la cadena de caracteres que contena el componente Edit de la segunda ficha. Si la salida se ha producido porque se ha pulsado el botn Cancelar, en el componente Edit de la ficha principal se debe visualizar el mensaje Ha pulsado el botn CANCELAR. Si se ha salido porque se ha pulsado el botn Salir, hay que visualizar la cadena Ha pulsado el botn SALIR. Al pulsar el botn Aceptar y regresar a la ficha principal, sta queda de la siguiente forma:
Entornos de desarrollo
15
Solucin 2b.1 1. Abre el C++ Builder o, si ya ests en l, cierra todo (File -> Close all) y pulsa File -> New -> Application. 2. Salvar el proyecto. Para ello, sigue los siguientes pasos: a. Pulsa File -> Save Project as. b. Crea la carpeta Ejemplo0201 en la carpeta D:\Datos\Cbuilder6\. c. Renombra la propuesta de Unit1 como UnidadPrincipal y pulsa el botn Guardar. d. Renombra la propuesta de Project1 como Ejemplo0201. 3. Modifica las propiedades de la ventana (Form1) como se indica en la tabla siguiente:
Propiedad
BorderStyle Hint Position
Valor
BsDialog Prueba de ShowModal PoScreenCenter
Propiedad
Caption Name ShowHint
Valor
Prueba de ventanas. conexin de
VentanaPrincipal TRUE
4. Disea la ventana principal segn indica el enunciado de tal forma que: a. El campo de edicin se llame Salida (Name = Salida). La propiedad ReadOnly de Salida debe valer TRUE para que no se pueda modificar el contenido del campo de edicin. Pon la fuente que desees al campo de edicin (ej.: arial, negrita, 16 puntos). Elimina el contenido de la propiedad Text.
Entornos de desarrollo
16
b. En el botn para leer la cadena de caracteres se deben modificar las siguientes propiedades: Name = BotonLeerCadena, Caption = Leer cadena, Font = Arial, negrita, 20 puntos. c. En el botn para borrar la cadena de caracteres del campo de edicin, se deben modificar las siguientes propiedades: Name = BotonBorrarCadena, Caption = Borrar cadena, Font = Arial, negrita, 20 puntos. d. Hacer que la propiedad TabOrder de los botones y el componente de edicin quede de la siguiente forma: BotonLeerCadena=1, BotonBorrarCadena=2 y Salida=3. 5. Pulsa el icono de los disquetes para guardar las modificaciones. 6. Crear un nuevo formulario (ventana o ficha). Pulsa File -> new -> Form. Aparecer una nueva ventana vaca llamada Form1. Modifica las propiedades de esta nueva ventana que se indica en la siguiente tabla:
Propiedad
BorderStyle Position
Valor
BsDialog PoScreenCenter
Propiedad
Caption Name
Valor
Entrada de cadenas. VentanaDeLectura
7. Guardar la nueva ventana. Pulsa File -> Save As ..., sustituye el nombre Unit1 por UnidadEntrada y pulsa el botn Guardar. 8. Disea la nueva ventana segn indica el enunciado del ejemplo. Coloca en la ventana los siguientes componentes: 1 label, 1 campo Edit y tres botones. Al campo Edit llmale Entrada (Name = Entrada); modifcale la propiedad Font para que quede como Arial, negrita, 16 puntos; elimina el contenido de la propiedad Text. Al componente label modifcale la propiedad Caption para que tome el valor "Introduce aqu la cadena de caracteres". 9. En el botn de la izquierda se deben modificar las siguientes propiedades:
Propiedad
Caption Name TabOrder Aceptar
Valor
Propiedad
Default ModalResult Font TRUE. mrYes
Valor
BotonAceptar 1
Entornos de desarrollo
17
Propiedad
Caption Name TabOrder
Valor
Cancelar BotonCancelar 2
Propiedad
Cancel ModalResult Font TRUE. mrCancel
Valor
Propiedad
Caption ModalResult Font Salir MrAbort
Valor
Propiedad
Name TabOrder
Valor
BotonSalir. 3
12. Guardar los cambios pulsando el icono de los disquetes. 13. Enlazar las ventanas. Pincha con el ratn sobre la ventana principal y observa que en el Object Inspector aparece el valor VentanaPrincipal. Pincha en File y selecciona la opcin Include Unit Hdr ..., en la ventana Use Unit que se abre debes seleccionar la opcin UnidadEntrada y pulsar el botn OK. Pulsa el icono de los disquetes para guardar los cambios. Haz doble clic sobre el botn LeerCadena, observa que se ha creado el mtodo OnClic de dicho botn, introduce en dicho mtodo el siguiente cdigo:
VentanaDeLectura->ShowModal(); switch (VentanaDeLectura->ModalResult) { case mrYes : Salida->Text=VentanaDeLectura->Entrada->Text; break; case mrCancel : Salida->Text="Ha pulsado el botn CANCELAR"; break; case mrAbort : Salida->Text="Ha pulsado el botn SALIR"; break; }
14. Para borrar la cadena del campo edit de la ventana principal, haz doble clic en el botn BotonBorrarCadena y teclea el siguiente cdigo:
Salida->Text="";
15. Haz que el campo edit de la ventana de entrada de texto tome el valor de cadena vaca cada vez que se activa la ficha y que dicho componente quede a foco en dicha activacin. Para hacer esto sigue los siguientes pasos: a. Haz clic en la ventana de entrada de texto y observa que el Object inspector toma el valor de VentanaDeLectura.
Entornos de desarrollo
18
b. Selecciona los eventos de dicha ventana. c. Haz doble clic en el evento OnActivate. d. Escribe el siguiente cdigo en el mtodo que se ha creado:
Entrada->Text=""; Entrada->SetFocus();
16. Guarda pulsando sobre el icono del disquete. 17. Selecciona la opcin Project del men principal y selecciona la opcin Build all Project, el proyecto se compila y si no hay errores ya se puede ejecutar. 18. Ejecuta el proyecto pulsando el icono que tiene un tringulo verde. El cdigo de la ventana principal es el siguiente:
//--------------------------------------------------------------------------#include <vcl.h> #pragma hdrstop #include "UnidadPrincipal.h" #include "UnidadEntradaCadenas.h" //--------------------------------------------------------------------------#pragma package(smart_init) #pragma resource "*.dfm" TVentanaPrincipal *VentanaPrincipal; //--------------------------------------------------------------------------__fastcall TVentanaPrincipal::TVentanaPrincipal(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::BotonLeerCadenaClick(TObject *Sender) { VentanaDeLectura->ShowModal(); switch (VentanaDeLectura->ModalResult) { case mrYes : Salida->Text=VentanaDeLectura->Entrada->Text; break; case mrCancel : Salida->Text="Ha pulsado el botn CANCELAR"; break; case mrAbort : Salida->Text="Ha pulsado el botn SALIR"; break; } } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::BotonBorrarCadenaClick(TObject *Sender) { Salida->Text=""; } //---------------------------------------------------------------------------
Entornos de desarrollo
19
//--------------------------------------------------------------------------#pragma package(smart_init) #pragma resource "*.dfm" TVentanaDeLectura *VentanaDeLectura; //--------------------------------------------------------------------------__fastcall TVentanaDeLectura::TVentanaDeLectura(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------void __fastcall TVentanaDeLectura::FormActivate(TObject *Sender) { Entrada->Text=""; Entrada->SetFocus(); } //---------------------------------------------------------------------------
Entornos de desarrollo
20
Panel
Es un componente pensado especialmente para agrupar una serie de componentes que se desea que tengan alguna relacin entre ellos. Este control se suele utilizar para la creacin de barras de herramientas personalizadas, fondos, barras de estado, etc. Cuando se incluyen componentes en componentes de contenedor, se establece una nueva relacin padre-hijo entre el contenedor y los componentes que alberga. Las operaciones realizadas con el panel en la fase de diseo, como desplazamientos, copias y eliminaciones, tambin afectan a los componentes incluidos dentro de l. Los paneles son los primeros componentes que se aaden a la ficha en tiempo de diseo. Si existe algn componente en la ficha que se quiere forme parte del panel, se debe cortar y luego pegar dentro del panel. Las propiedades ms usuales del componente son:
Propiedades
Name
Significado
Contiene un identificador mediante el cual se identifica el objeto. Esta propiedad contiene la cadena de caracteres que se visualiza con l. Normalmente se suele vaciar si el componente se utiliza como un contenedor. Si se utiliza para disear una barra de estado, esta propiedad contendra la cadena que se quiera visualizar. Estas propiedades pueden tomar cualquiera de los siguientes valores de constantes:
Caption
BevelInner, BevelOuter
BevelWidth
Esta propiedad contiene un valor numrico entero positivo que indica la anchura del efecto producido por las dos propiedades anteriores. El valor de esta propiedad establece el ancho del borde del panel. Se ruega jugar con estas 4 propiedades para coger prctica en el aspecto visual.
BorderWidth
Entornos de desarrollo
21
MaskEdit
Este componente es idntico al componente Edit si no se establece ninguna mscara de control. Las propiedades de ste componente ms fundamentales son:
Propiedades
Significado
Contiene una cadena de caracteres que representa la mscara y algunos de ellos tienen un significado especial. Esta propiedad permite disear mscaras segn las necesidades del programador. Las mscaras se construyen a partir de la siguiente tabla de caracteres, los cuales tienen un significado especfico: Carcter C c A a L l 0 9 # < > <> \ : / ; Significado Obligatorio entrar un carcter. Permite la entrada de un carcter. Obligatorio entrar un carcter alfanumrico. Permite la entrada de un carcter alfanumrico. Obligatorio la entrada de un carcter alfabtico. Permite la entrada de un carcter alfabtico. Obligatorio la entrada de un carcter numrico. Permite la entrada de un carcter numrico. Permite la entrada de un carcter numrico o de signo. Los caracteres siguientes aparecern en maysculas. Los caracteres siguientes aparecern en minsculas. Desactiva la funcin de los dos caracteres anteriores. Interpreta el carcter siguiente como no especial. Representa un espacio en blanco. Separador de horas y minutos. Separador de fechas. Separador interno de la mscara.
EditMask
Text
Esta propiedad contendr los caracteres tecleados con formato o sin formato dependiendo de si la opcin Save Literal Characters en el cuadro de dilogo Input Mask Editor est activada o no respectivamente. Esta propiedad que es de slo lectura, contiene en cada momento el texto introducido junto con la mscara.
EditText
Entornos de desarrollo
22
El componente Image
Este componente se utiliza para poner imgenes sobre la ficha.
Propiedades
Picture AutoSize Stretch
Significado
Esta propiedad permite seleccionar el fichero de mapa de bits. TRUE: el rea del componente se adapta a la dimensin de la imagen. TRUE: la imagen se adapta al rea del componente.
BitBtn
Este componente es bsicamente un botn que cuenta con ciertas propiedades adicionales que le permiten visualizar una imagen al lado de un texto. Las propiedades ms caractersticas de este componente son:
Propiedades
Caption
Significado
Por defecto los ttulos aparecen en ingls. Para que aparezca en castellano debe cambiarse esta propiedad por el valor que se desee. La seleccin del tipo de botn se realiza en esta propiedad. Los valores que puede tomar esta propiedad son: Constante bkOk Botn
Entornos de desarrollo
23
bkHelp bkClose bkAbort bkRetry bkIgnore bkAll Glyph NumGlyphs Propiedad mediante la cual se selecciona el fichero donde se encuentra la imagen que se quiere visualizar. Indica el nmero de grficos distintos que se visualizarn con los distintos estados del botn. Indica la posicin del grfico en el interior del botn. Esta propiedad puede tener los siguientes valores: Constante Layout BlGlyphLeft BlGlyphTop BlGlyphRight blGlyphBottom Significado A la izquierda En la parte superior central. A la derecha. En la parte inferior central.
Spacing Margin
Nmero de puntos que existirn entre el borde de la imagen y el texto. Nmero de puntos que existirn entre el borde del botn y la imagen.
En el fichero que se asigna a la propiedad Glyph pueden existir hasta un mximo de 4 imgenes dispuestas una junto a la otra horizontalmente, de las mismas dimensiones. La primera de ellas ser usada cuando el botn est en estado normal, la segunda cuando se halle desactivado, la tercera cuando est pulsado y la cuarta cuando permanezca en este ltimo estado. Si solamente se adjunta una imagen, sta tendr distintos aspectos en los distintos estados del botn.
Entornos de desarrollo
24
Ejemplo 2b.2
Hacer el ejemplo 2b.1 utilizando los BitBtn. Utilizar una imagen en la ficha de entrada de cadena para adornar la ficha. Solucin La ficha principal queda de la siguiente forma:
Entornos de desarrollo
25
El cdigo de la unidad UnidadEntradaCadenas queda igual que en el ejemplo 1. Los valores de la propiedad ModalResult de los botones de la VentanaDeLectura son los que se muestran en la sentencia switch del cdigo.
Entornos de desarrollo
26
CheckBox
Se utiliza para indicar las distintas opciones que se pueden seleccionar. Se pueden construir grupos de este componente de tal forma que todos los elementos del grupo tienen una o varias caractersticas que les unen. Cada elemento CheckBox puede estar o no activado. Pueden existir varios de ellos seleccionados al mismo tiempo. La forma de este componente est representada en la siguiente figura por el grupo de componentes Propiedades del texto:
Propiedades
Caption ChecKed
Significado
Esta propiedad contiene la cadena de caracteres que se visualiza junto al componente. TRUE: si est marcado. FALSE: si no est marcado. TRUE: el estado del componente est reflejado en la propiedad State. FALSE: el estado del componente est indicado por la propiedad ChecKed. CbChecKed = marcado. CbUnchecKed = Desmarcado. CbGrayed = Indeterminado.
AllowGrayed
State
Entornos de desarrollo
27
RadioButtton
Cuando se quiere que solamente se pueda seleccionar uno de los componentes del grupo de componentes que se estn visualizando, se debe introducir el componente RadioButton. Un ejemplo son los componentes que estn introducidos en los grupos de componentes Tipos de letras y Puntos, como se muestra en la siguiente figura:
GroupBox
Este componente tiene como finalidad la de agrupar otros componentes que tienen caractersticas comunes y necesitan un mismo tipo de control. Por ejemplo, los componentes que hay dentro del grupo Tipos de letras son excluyentes entre ellos pero esta exclusin es independiente de la aplicada al grupo Puntos. La nica propiedad importante de este componente es Caption, donde se introduce la cadena de caracteres que hace de ttulo de dicho componente; si no se quiere que aparezca ttulo alguno, esta propiedad debe estar vaca. Si se cambia de posicin el componente, todos los componentes contenidos dentro de l se vern desplazados con l.
Entornos de desarrollo
28
RadioGroup
A veces es necesario saber cul de los botones de radio ha sido seleccionado, el componente GroupBox no aporta informacin sobre este suceso, para ello, se dispone del componente RadioGroup. Este nuevo componente permite aadir o insertar botones de radio al grupo en tiempo de ejecucin. Estas operaciones se realizan con los mtodos Add e Insert de la propiedad Items. Si existen dos RadioGroup con botones de radio, la exclusin de los botones de radio en los dos grupos no es independiente. Las propiedades ms importantes son:
Propiedades
Caption
Significado
Esta propiedad contiene la cadena de caracteres que se visualiza con el componente. Indica el nmero de columnas en las que se va a visualizar la lista de botones de radio. Esta propiedad es de tipo Tstrings, es decir, es un objeto cuya estructura es una lista de cadenas. Sobre esta lista de cadenas se pueden realizar operaciones tales como: Insertar, Aadir, Borrar, etc. con los mtodos Insert, Add, Delete, etc. Esta propiedad indica el orden del botn de radio que ha sido seleccionado. El valor 1 indica que no hay ninguno seleccionado. El valor 0 indica que est seleccionado el primer botn de radio de la lista, el valor 1 es para el segundo y as sucesivamente.
Columns
Items
ItemIndex
Ejemplo 2b.3
Hacer una aplicacin que muestre la ventana anterior. Debe visualizar en el campo (componente) label ms inferior el texto que est introducido en el campo edit. Dicho texto se debe visualizar segn la seleccin que se haya hecho en Tipos de letras, Propiedades del texto y Puntos. Cuando se selecciona la propiedad de texto Normal se deben deseleccionar el resto de las propiedades de texto. Para ver la implementacin de las propiedades del texto se debe consultar la ayuda del C++ Builder en Style para la VCL. Style es una propiedad de tipo conjunto con los valores (cursiva, negrita, tachado y subrayado). El aspecto de la ventana de la aplicacin debe ser parecido al siguiente:
Entornos de desarrollo
29
Solucin
//--------------------------------------------------------------------------#include <vcl.h> #pragma hdrstop #include "UnidadPrincipal.h" //--------------------------------------------------------------------------#pragma package(smart_init) #pragma resource "*.dfm" TVentanaPrincipal *VentanaPrincipal; //--------------------------------------------------------------------------__fastcall TVentanaPrincipal::TVentanaPrincipal(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::EntradaClick(TObject *Sender) { Entrada->Text=""; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::EntradaChange(TObject *Sender) { Salida->Caption=Entrada->Text;
Entornos de desarrollo
30
} //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::RadioButton1Click(TObject *Sender) { Salida->Font->Name="Arial"; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::RadioButton2Click(TObject *Sender) { Salida->Font->Name="Courier New"; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::RadioButton3Click(TObject *Sender) { Salida->Font->Name="Georgia"; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::RadioButton4Click(TObject *Sender) { Salida->Font->Name="Times New Roman"; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::RadioButton5Click(TObject *Sender) { Salida->Font->Size=6; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::RadioButton6Click(TObject *Sender) { Salida->Font->Size=8; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::RadioButton7Click(TObject *Sender) { Salida->Font->Size=9; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::RadioButton8Click(TObject *Sender) { Salida->Font->Size=10; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::RadioButton9Click(TObject *Sender) { Salida->Font->Size=11; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::RadioButton10Click(TObject *Sender) { Salida->Font->Size=12; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::RadioButton11Click(TObject *Sender) { Salida->Font->Size=14; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::RadioButton12Click(TObject *Sender) { Salida->Font->Size=16; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::RadioButton13Click(TObject *Sender) {
Entornos de desarrollo
31
Salida->Font->Size=18; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::RadioButton14Click(TObject *Sender) { Salida->Font->Size=20; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::RadioButton15Click(TObject *Sender) { Salida->Font->Size=24; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::RadioButton16Click(TObject *Sender) { Salida->Font->Size=26; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::RadioButton17Click(TObject *Sender) { Salida->Font->Size=32; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::RadioButton18Click(TObject *Sender) { Salida->Font->Size=36; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::RadioButton19Click(TObject *Sender) { Salida->Font->Size=48; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::RadioButton20Click(TObject *Sender) { Salida->Font->Size=56; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::RadioButton21Click(TObject *Sender) { Salida->Font->Size=72; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::NormalClick(TObject *Sender) { if (Normal->Checked) { Salida->Font->Style=TFontStyles(); if (Cursiva->Checked) Cursiva->Checked=false; if (Negrita->Checked) Negrita->Checked=false; if (Tachado->Checked) Tachado->Checked=false; if (Subrayado->Checked) Subrayado->Checked=false; } } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::CursivaClick(TObject *Sender) { if (Cursiva->Checked) { Salida->Font->Style=Salida->Font->Style << fsItalic; if (Normal->Checked) Normal->Checked=false; } else Salida->Font->Style=Salida->Font->Style >> fsItalic; }
Entornos de desarrollo
32
//--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::NegritaClick(TObject *Sender) { if (Negrita->Checked) { Salida->Font->Style=Salida->Font->Style << fsBold; if (Normal->Checked) Normal->Checked=false; } else Salida->Font->Style=Salida->Font->Style >> fsBold; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::TachadoClick(TObject *Sender) { if (Tachado->Checked) { Salida->Font->Style=Salida->Font->Style << fsStrikeOut; if (Normal->Checked) Normal->Checked=false; } else Salida->Font->Style=Salida->Font->Style >> fsStrikeOut; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::SubrayadoClick(TObject *Sender) { if (Subrayado->Checked) { Salida->Font->Style=Salida->Font->Style << fsUnderline; if (Normal->Checked) Normal->Checked=false; } else Salida->Font->Style=Salida->Font->Style >> fsUnderline; } //---------------------------------------------------------------------------
Entornos de desarrollo
33
ListBox
Este componente se utiliza para almacenar una lista de cadenas que pueden estar ordenadas o no. De dicha lista se selecciona un elemento o cadena que es con el que se va a trabajar. El elemento seleccionado ocupa un lugar dentro de la lista que viene indicado por la propiedad ItemIndex. La propiedad Items es la que contiene los elementos de la lista. Las propiedades ms importantes son:
Propiedades
Columns
Significado
Indica el nmero de columnas en las que se va a visualizar la lista de cadenas. Esta propiedad es de tipo Tstrings, es decir, es un objeto cuya estructura es una lista de cadenas. Sobre esta lista de cadenas se pueden realizar operaciones tales como: Insertar, Aadir, Borrar, etc. con los mtodos Insert, Add, Delete, etc. Esta propiedad indica el orden de la cadena que ha sido seleccionada. El valor 1 indica que no hay ninguna seleccionada. El valor 0 indica que est seleccionado la primera cadena de la lista, el valor 1 es para la segunda y as sucesivamente. TRUE: ordena automticamente la lista de cadena. FALSE: los elementos se muestran en el orden en que se aaden a la lista. TRUE: permite visualizar los elementos completamente en vez de la parte superior o inferior del texto. FALSE: indica que solamente puede haber un elemento seleccionado en un instante determinado. TRUE: en un instante determinado pueden existir varios elementos de la lista seleccionados. TRUE: la seleccin de los elementos se realiza con las teclas <Maysculas> y <Control> junto con el botn izquierdo del ratn. FALSE: la seleccin se realiza con el botn izquierdo del ratn. Esta propiedad es de tipo integer e indica cuntos elementos estn marcados o seleccionados en un instante determinado.
Items
ItemIndex
Sorted IntegralHeight
MultiSelect
ExtendedSelect
SelCount
Entornos de desarrollo
34
Selected
Propiedad de tipo tabla de booleanos. Contiene tantos elementos booleanos como elementos existen en la lista. Cuando un elemento de la lista est seleccionado su correspondiente elemento de Selected contiene el valor de TRUE, si no est seleccionado su correspondiente posicin en Selected contiene el valor FALSE. Esta propiedad se utiliza para indicar si el componente va a almacenar una lista de cadenas o de otros objetos. Esta propiedad puede tomar tres valores:
Style
Constante
lbStandard lbOwnerDrawFixed
Tipo de elemento
Todos los elementos son cadenas.
Cada elemento es distinto pero con una altura fija. lbOwnerDrawVariable Cada elemento es distinto y tiene una altura variable. ItemHeight Altura en puntos de los elementos de la lista. Esta propiedad tiene efecto siempre y cuando la propiedad Style contenga el valor de lbOwnerDrawFixed.
Entornos de desarrollo
35
Ejemplo 2b.4
Modificar el ejercicio anterior para que en lugar del grupo Tipos de letras, este grupo se implemente con una lista ListBox donde aparezcan todas las fuentes de letras que contenga el ordenador en ese momento. Para enlazar este componente hay que tener en cuenta que las fuentes que se van a visualizar tienen que ser asignadas a la propiedad Items y estas fuentes son heredadas del componente Screen. La lista de fuentes debe aparecer ordenada. En el mismo instante que se selecciona una fuente debe aplicarse su efecto en el texto de la etiqueta (label) ms baja. El aspecto que tiene que presentar la aplicacin es el siguiente:
Solucin
//--------------------------------------------------------------------------#include <vcl.h> #pragma hdrstop #include "UnidadPrincipal.h" //--------------------------------------------------------------------------#pragma package(smart_init) #pragma resource "*.dfm" TVentanaPrincipal *VentanaPrincipal; //---------------------------------------------------------------------------
Entornos de desarrollo
36
__fastcall TVentanaPrincipal::TVentanaPrincipal(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::EntradaClick(TObject *Sender) { Entrada->Text=""; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::EntradaChange(TObject *Sender) { Salida->Caption=Entrada->Text; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::RadioButton5Click(TObject *Sender) { Salida->Font->Size=6; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::RadioButton6Click(TObject *Sender) { Salida->Font->Size=8; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::RadioButton7Click(TObject *Sender) { Salida->Font->Size=9; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::RadioButton8Click(TObject *Sender) { Salida->Font->Size=10; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::RadioButton9Click(TObject *Sender) { Salida->Font->Size=11; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::RadioButton10Click(TObject *Sender) { Salida->Font->Size=12; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::RadioButton11Click(TObject *Sender) { Salida->Font->Size=14; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::RadioButton12Click(TObject *Sender) { Salida->Font->Size=16; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::RadioButton13Click(TObject *Sender) { Salida->Font->Size=18; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::RadioButton14Click(TObject *Sender) { Salida->Font->Size=20; }
Entornos de desarrollo
37
//--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::RadioButton15Click(TObject *Sender) { Salida->Font->Size=24; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::RadioButton16Click(TObject *Sender) { Salida->Font->Size=26; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::RadioButton17Click(TObject *Sender) { Salida->Font->Size=32; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::RadioButton18Click(TObject *Sender) { Salida->Font->Size=36; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::RadioButton19Click(TObject *Sender) { Salida->Font->Size=48; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::RadioButton20Click(TObject *Sender) { Salida->Font->Size=56; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::RadioButton21Click(TObject *Sender) { Salida->Font->Size=72; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::NormalClick(TObject *Sender) { if (Normal->Checked) { Salida->Font->Style=TFontStyles(); if (Cursiva->Checked) Cursiva->Checked=false; if (Negrita->Checked) Negrita->Checked=false; if (Tachado->Checked) Tachado->Checked=false; if (Subrayado->Checked) Subrayado->Checked=false; } } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::CursivaClick(TObject *Sender) { if (Cursiva->Checked) { Salida->Font->Style=Salida->Font->Style << fsItalic; if (Normal->Checked) Normal->Checked=false; } else Salida->Font->Style=Salida->Font->Style >> fsItalic; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::NegritaClick(TObject *Sender) { if (Negrita->Checked) { Salida->Font->Style=Salida->Font->Style << fsBold; if (Normal->Checked) Normal->Checked=false;
Entornos de desarrollo
38
} else Salida->Font->Style=Salida->Font->Style >> fsBold; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::TachadoClick(TObject *Sender) { if (Tachado->Checked) { Salida->Font->Style=Salida->Font->Style << fsStrikeOut; if (Normal->Checked) Normal->Checked=false; } else Salida->Font->Style=Salida->Font->Style >> fsStrikeOut; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::SubrayadoClick(TObject *Sender) { if (Subrayado->Checked) { Salida->Font->Style=Salida->Font->Style << fsUnderline; if (Normal->Checked) Normal->Checked=false; } else Salida->Font->Style=Salida->Font->Style >> fsUnderline; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::RadioButton1Click(TObject *Sender) { Salida->Font->Size=102; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::FormActivate(TObject *Sender) { TipoTexto->Items=Screen->Fonts; Salida->Caption=""; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::TipoTextoClick(TObject *Sender) { Salida->Font->Name=TipoTexto->Items->Strings[TipoTexto->ItemIndex]; } //---------------------------------------------------------------------------
Entornos de desarrollo
39
ComboBox
Las dos anteriores listas no permitan editar un elemento, para que esta posibilidad se contemple se invent el componente ComboBox, que es una combinacin de los componentes ListBox y Edit. Por influencia de la herencia, las propiedades de este nuevo componente sern la suma de las propiedades de los anteriores ms unas nuevas que le caracterizan. En este tipo de listas no es posible seleccionar ms de un elemento en un instante determinado. Estas propiedades son:
Propiedades
Significado
Esta propiedad se utiliza para indicar el estilo de componente que se va a utilizar. Esta propiedad puede tomar cinco valores:
Constante
Style csDropDown csSimple csDropDownList csOwnerDrawFixed csOwnerDrawVariable
Estilo
Lista con campo de edicin asociado. Campo de edicin sin lista. Lista sin campo de edicin. Elementos distintos con altura fija. Elementos distintos con altura variable.
DropDownCount Text
Contiene el nmero de lneas mximo que se visualizarn simultneamente cuando se despliegue la lista. Esta propiedad contendr el texto del elemento seleccionado.
Entornos de desarrollo
40
Ejemplo 2b.5
Modificar el ejercicio anterior de forma que se utilice la lista ComboBox en vez de ListBox. La aplicacin debe tener el siguiente aspecto:
Solucin
//--------------------------------------------------------------------------#include <vcl.h> #pragma hdrstop #include "UnidadPrincipal.h" //--------------------------------------------------------------------------#pragma package(smart_init) #pragma resource "*.dfm" TVentanaPrincipal *VentanaPrincipal; //--------------------------------------------------------------------------__fastcall TVentanaPrincipal::TVentanaPrincipal(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::EntradaClick(TObject *Sender) {
Entornos de desarrollo
41
Entrada->Text=""; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::EntradaChange(TObject *Sender) { Salida->Caption=Entrada->Text; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::RadioButton5Click(TObject *Sender) { Salida->Font->Size=6; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::RadioButton6Click(TObject *Sender) { Salida->Font->Size=8; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::RadioButton7Click(TObject *Sender) { Salida->Font->Size=9; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::RadioButton8Click(TObject *Sender) { Salida->Font->Size=10; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::RadioButton9Click(TObject *Sender) { Salida->Font->Size=11; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::RadioButton10Click(TObject *Sender) { Salida->Font->Size=12; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::RadioButton11Click(TObject *Sender) { Salida->Font->Size=14; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::RadioButton12Click(TObject *Sender) { Salida->Font->Size=16; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::RadioButton13Click(TObject *Sender) { Salida->Font->Size=18; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::RadioButton14Click(TObject *Sender) { Salida->Font->Size=20; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::RadioButton15Click(TObject *Sender) { Salida->Font->Size=24; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::RadioButton16Click(TObject *Sender)
Entornos de desarrollo
42
{ Salida->Font->Size=26; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::RadioButton17Click(TObject *Sender) { Salida->Font->Size=32; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::RadioButton18Click(TObject *Sender) { Salida->Font->Size=36; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::RadioButton19Click(TObject *Sender) { Salida->Font->Size=48; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::RadioButton20Click(TObject *Sender) { Salida->Font->Size=56; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::RadioButton21Click(TObject *Sender) { Salida->Font->Size=72; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::NormalClick(TObject *Sender) { if (Normal->Checked) { Salida->Font->Style=TFontStyles(); if (Cursiva->Checked) Cursiva->Checked=false; if (Negrita->Checked) Negrita->Checked=false; if (Tachado->Checked) Tachado->Checked=false; if (Subrayado->Checked) Subrayado->Checked=false; } } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::CursivaClick(TObject *Sender) { if (Cursiva->Checked) { Salida->Font->Style=Salida->Font->Style << fsItalic; if (Normal->Checked) Normal->Checked=false; } else Salida->Font->Style=Salida->Font->Style >> fsItalic; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::NegritaClick(TObject *Sender) { if (Negrita->Checked) { Salida->Font->Style=Salida->Font->Style << fsBold; if (Normal->Checked) Normal->Checked=false; } else Salida->Font->Style=Salida->Font->Style >> fsBold; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::TachadoClick(TObject *Sender) { if (Tachado->Checked)
Entornos de desarrollo
43
{ Salida->Font->Style=Salida->Font->Style << fsStrikeOut; if (Normal->Checked) Normal->Checked=false; } else Salida->Font->Style=Salida->Font->Style >> fsStrikeOut; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::SubrayadoClick(TObject *Sender) { if (Subrayado->Checked) { Salida->Font->Style=Salida->Font->Style << fsUnderline; if (Normal->Checked) Normal->Checked=false; } else Salida->Font->Style=Salida->Font->Style >> fsUnderline; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::RadioButton1Click(TObject *Sender) { Salida->Font->Size=102; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::FormActivate(TObject *Sender) { TipoTexto->Items=Screen->Fonts; Salida->Caption=""; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::TipoTextoChange(TObject *Sender) { Salida->Font->Name=TipoTexto->Text; } //---------------------------------------------------------------------------
Entornos de desarrollo
44
Memo
Cuando el texto que debe introducir el usuario es extenso, el componente Edit no cubre esta necesidad y se debe utilizar el componente Memo. Este nuevo componente puede contener mltiples lneas de texto. La mayor parte de las propiedades del componente Edit tambin las posee el componente Memo. Las propiedades tpicas de este componente son:
Propiedades
Significado
El texto del componente se estructura en mltiples cadenas que estn contenidas en esta propiedad. En tiempo de ejecucin se puede tratar esta propiedad como si se tratase de una matriz en la que cada elemento es una lnea de texto. Esta propiedad es, a su vez, un objeto. Propiedad de Lines que contiene el nmero de lneas que existen en cada momento en el componente Memo. La primera lnea tiene como ndice el cero. Mtodo de Lines que permite aadir texto al componente Memo. Mtodo que permite insertar una lnea en una determinada posicin. Mtodo que permite eliminar una determinada lnea de texto. Mtodo que permite mover una lnea de posicin. Mtodo que permite intercambiar dos lneas de texto.
Lines
Lines->Count
Lines->LoadFromFile Mtodo que permite leer texto de un archivo de texto. Lines->SaveToFile Mtodo que permite guardar en un fichero de texto el contenido de Memo. TRUE: una cadena o lnea de texto ocupa varias lneas del componente Memo. FALSE: una lnea de texto solamente ocupa una lnea del componente Memo.
WordWrap
Entornos de desarrollo
45
Esta propiedad permite que aparezca o no desplazamiento. Los valores de esta propiedad son: ScrollBars
barras
de
Constante
SsNone SsHorizontal SsVertical ssBoth
Tipo de barra
Ninguna barra de desplazamiento. Horizontal Vertical Ambas
WantTabs
TRUE: cuando el componente Memo est activo y se pulsa la tecla de tabulacin se produce un salto de tabulacin. FALSE: al pulsar la tecla de tabulacin se le quita el control al componente Memo. Tiene el mismo efecto que la anterior propiedad pero con la tecla de retorno.
WantReturns
Entornos de desarrollo
46
Ejemplo 2b.6
Hacer el mismo ejemplo anterior pero utilizando el componente Memo para introducir el texto y darle formato. Poner un botn para borrar el contenido del componente Memo. La ventana debe tener un aspecto parecido al siguiente:
Solucin
//--------------------------------------------------------------------------#include <vcl.h> #pragma hdrstop #include "UnidadPrincipal.h" //--------------------------------------------------------------------------#pragma package(smart_init) #pragma resource "*.dfm" TVentanaPrincipal *VentanaPrincipal; //--------------------------------------------------------------------------__fastcall TVentanaPrincipal::TVentanaPrincipal(TComponent* Owner)
Entornos de desarrollo
47
: TForm(Owner) { } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::RadioButton5Click(TObject *Sender) { Salida->Font->Size=6; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::RadioButton6Click(TObject *Sender) { Salida->Font->Size=8; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::RadioButton7Click(TObject *Sender) { Salida->Font->Size=9; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::RadioButton8Click(TObject *Sender) { Salida->Font->Size=10; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::RadioButton9Click(TObject *Sender) { Salida->Font->Size=11; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::RadioButton10Click(TObject *Sender) { Salida->Font->Size=12; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::RadioButton11Click(TObject *Sender) { Salida->Font->Size=14; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::RadioButton12Click(TObject *Sender) { Salida->Font->Size=16; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::RadioButton13Click(TObject *Sender) { Salida->Font->Size=18; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::RadioButton14Click(TObject *Sender) { Salida->Font->Size=20; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::RadioButton15Click(TObject *Sender) { Salida->Font->Size=24; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::RadioButton16Click(TObject *Sender) { Salida->Font->Size=26; } //---------------------------------------------------------------------------
Entornos de desarrollo
48
void __fastcall TVentanaPrincipal::RadioButton17Click(TObject *Sender) { Salida->Font->Size=32; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::RadioButton18Click(TObject *Sender) { Salida->Font->Size=36; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::RadioButton19Click(TObject *Sender) { Salida->Font->Size=48; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::RadioButton20Click(TObject *Sender) { Salida->Font->Size=56; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::RadioButton21Click(TObject *Sender) { Salida->Font->Size=72; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::NormalClick(TObject *Sender) { if (Normal->Checked) { Salida->Font->Style=TFontStyles(); if (Cursiva->Checked) Cursiva->Checked=false; if (Negrita->Checked) Negrita->Checked=false; if (Tachado->Checked) Tachado->Checked=false; if (Subrayado->Checked) Subrayado->Checked=false; } } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::CursivaClick(TObject *Sender) { if (Cursiva->Checked) { Salida->Font->Style=Salida->Font->Style << fsItalic; if (Normal->Checked) Normal->Checked=false; } else Salida->Font->Style=Salida->Font->Style >> fsItalic; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::NegritaClick(TObject *Sender) { if (Negrita->Checked) { Salida->Font->Style=Salida->Font->Style << fsBold; if (Normal->Checked) Normal->Checked=false; } else Salida->Font->Style=Salida->Font->Style >> fsBold; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::TachadoClick(TObject *Sender) { if (Tachado->Checked) { Salida->Font->Style=Salida->Font->Style << fsStrikeOut; if (Normal->Checked) Normal->Checked=false; }
Entornos de desarrollo
49
else Salida->Font->Style=Salida->Font->Style >> fsStrikeOut; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::SubrayadoClick(TObject *Sender) { if (Subrayado->Checked) { Salida->Font->Style=Salida->Font->Style << fsUnderline; if (Normal->Checked) Normal->Checked=false; } else Salida->Font->Style=Salida->Font->Style >> fsUnderline; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::RadioButton1Click(TObject *Sender) { Salida->Font->Size=102; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::FormActivate(TObject *Sender) { TipoTexto->Items=Screen->Fonts; Salida->Text=""; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::TipoTextoChange(TObject *Sender) { Salida->Font->Name=TipoTexto->Text; } //--------------------------------------------------------------------------void __fastcall TVentanaPrincipal::BotonBorrarClick(TObject *Sender) { Salida->Clear(); } //---------------------------------------------------------------------------
Entornos de desarrollo
50
Ejercicios
Ejercicio 2b.1
Hacer una aplicacin en Delphi que pida la introduccin de una fecha a travs de un componente TEdit y cuando se pulse el botn Aceptar muestre en un componente TLabel el da de la semana correspondiente a dicha fecha. La ventana puede tener el siguiente formato:
Ejercicio 2b.2
Hacer una aplicacin en Delphi que pida la introduccin de dos nmeros enteros positivos. El ms pequeo se utilizar como ao inicial y el mayor se utilizar como ao final. El programa debe calcular los aos que son bisiestos comprendidos entre los dos nmeros anteriores. Los aos que son bisiestos se deben introducir en un componente TListBox. Se deben contar la cantidad de aos bisiestos y mostrarla en la ventana. Se deben hacer validaciones, de tal forma que si se introduce una cadena que no es un nmero entero se debe mostrar un mensaje de error. Un formato de esta ventana podra ser:
Entornos de desarrollo
51
Ejercicio 2b.3
Hacer una aplicacin en Delphi que pida la introduccin de dos nmeros enteros positivos. El ms pequeo se utilizar como ao inicial y el mayor se utilizar como ao final. El programa debe calcular los aos jacobeos que hay entre el ao inicial y el ao final. Los aos que son jacobeos los debe mostrar en un componente TListBox. Se deben hacer validaciones, de tal forma que si se introduce una cadena que no es un nmero entero se debe mostrar un mensaje de error. Un formato de esta ventana podra ser:
Ejercicio 2b.4
Hacer un programa en Delphi que pida la introduccin de un nmero entero positivo y calcule todos los nmeros amigos que hay entre el uno y el nmero introducido. Un nmero entero es amigo de otro cuando la suma de todos los divisores del primer nmero da como resultado el segundo y la suma de todos los divisores del segundo nmero da como resultado el primer nmero. Utilizar componentes TListBox para mostrar los nmeros que son amigos y sus divisores. Cuando se seleccione un nmero deben aparecer sus divisores en el componente TListBox destinado a tal cuestin. El formato de la ventana debe ser el siguiente:
Entornos de desarrollo
52
Ejercicio 2b.5
Hacer un programa en Delphi que muestre el factorial de los 33 primeros nmeros enteros y el factorial del nmero entero mayor que 33 que se introduzca en un componente TEdit. Tambin debe mostrar los tiempos inicial, final y diferencia de la ejecucin del bucle de clculo. Los factoriales se deben mostrar en un componente TMemo. El formato de la ventana debe ser el siguiente:
Entornos de desarrollo
53