República Bolivariana de Venezuela

Universidad Nacional Experimental del Táchira

Departamento de Ingeniería Informática

Computacion II-Ingeniería Electrónica (6010)
San Cristóbal-Venezuela

 

 

 

 

 

 

 

 

 

 

 

 

E/S en C++ Builder
 

 

 

 

Parte III
 

 

 


Tema Perteneciente a la Unidad Nº 4: Programación en C++ Builder.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Autor: Lcdo. José Froilán Guerrero Pulido

 

 

 

Mayo, 2004

 

Creación de Menús en una Ventana

 

TMainMenu (Standard): Este componente nos permite diseñar en el formulario en la parte superior de las ventanas, justo debajo de la barra de título. Este menú aparece como una barra horizontal con una serie de opciones principales que generalmente dan paso a una lista de opciones, la cual se despliega en forma persiana.

 

Propiedad

Significado

Items

Representa una matriz de objetos TMenuItem, cada uno de los cuales representa una opción del menú.

AutoHotKeys

Cuando la propiedad tiene el valor maAutomatic no se tiene que preocuparse de asignar atajos de teclado a las opciones, ya que de ello se ocupará automáticamente el propio componente al ejecutar la aplicación.

AutoMerge

Determina que menús se combinarán con el menú principal y cuales no. Si dispone en un formulario de un menú y lo desea combinar con el formulario principal, el valor de la propiedad toma el valor de verdadero. Si el valor de la propiedad es falso, el menú aparecerá en su propio formulario. 

 

Cada opción insertada en el menú es un componente TMenuItem cuenta con sus propiedades, entre las cuales se mencionan:

 

Propiedad

Significado

Bitmap

Imagen asociada a la opción.

Break

Tipo de división en el menú. Valores:

mbNone = Ninguna división. Es el valor por defecto.

mbBreak = División separada por un espacio.

mbBarBreak = División separada por una línea vertical.

Caption

Titulo de la opción.

Checked

Indica si la opción está marcada o no.

Default

Indica si la opción es la acción por defecto.

Enabled

Indica si la opción está activa.

GroupIndex

Facilita la unión de múltiples menús.

Hint

Mensaje de ayuda asociado a la opción.

ImageIndex

Índice de la imagen asociada a la opción.

ShorCut

Tecla de acceso rápido.

Visible

Si el valor es verdadero, indica que la opción será visible en el menú.

 

Cada opción que se despliega en la persiana puede dar paso a otro menú, proceso que se puede repetir un nivel tras otro, aunque no es una técnica demasiado recomendable ir más allá de un segundo nivel. Para crear otro nivel en el menú se debe seleccionar la opción y luego pulsar la combinación Ctrl + Flecha a la Derecha. Entre otras operaciones a efectuar en un menú se tienen las siguientes:

·          Si desea insertar una opción en el menú solo se debe ubicar en la opción a desplazar y luego se pulsa la tecla “Insert”.

·          Si se desea eliminar una opción del menú solo se debe ubicar en la opción a eliminar y luego se pulsa la tecla “Supr”.

·          Si se desea es mover una opción hacia otro lugar del menú solo se debe seleccionar la opción y luego arrastrar hasta el lugar deseado.

 

Adicionalmente se puede asociar una imagen a las opciones del menú, para ello se debe utilizar el componente TImageList conjuntamente con las propiedades Images e ImageIndex.

 

El diseñador de menús del componente TMainMenu posee un menú contextual en donde se podrá insertar o borrar una opción del menú, asimismo se puede contar con estas otras opciones:

 

·          Select Menu: Permite editar otro menú que exista en el formulario sin necesidad de salir del diseñador de menús.

·          Save As Template: Permite guardar el menú que se esta diseñando como si fuese una plantilla.

·          Insert From Template: Permite insertar el menú diseñado en cualquier otro menú.

·          Delete Templates: Eliminar una plantilla de menú.

·          Insert From Resource: Permite importar un menú que haya sido diseñado con cualquier otra herramienta de edición de recursos.

 

TPopupMenu (Standard): Este componente nos permite diseñar un menú que no está visible inicialmente y surge por la pulsación de una cierta combinación de teclas o pulsando el botón derecho del mouse.

 

Propiedad

Significado

Aligment

Determina la posición del menú. Valores:

paLeft = Esquina superior izquierda en el puntero del ratón.

paRight = Esquina superior derecha en el puntero del ratón.

paCenter = Parte central superior en el puntero del ratón.

AutoPopup

Indica si el menú se abre automáticamente. Si la propiedad tiene el valor de falso, para mostrar el menú se tendrá que utilizar el método Popup ( ). 

Para activar este menú se debe hacer uso de la propiedad PopupMenu de que disponen la mayoría de los componentes.

 

Entre los métodos más usados del componente TPopupMenu se nombran los siguientes:

 

Método

Significado

Add

Permite añadir una nueva opción al final del menú, cuyo objeto TMenuItem se pasa como parámetro del método.

Insert

Permite insertar la nueva opción en una determinada posición, para lo cual el primer parámetro indicará dicha posición, sabiendo que el primer elemento del menú tiene el índice cero.

IndexOf

Determina el índice correspondiente de la opción del menú a la que se haga referencia. 

 

TActionList (Standard): Este componente nos permite crear y codificar acciones de una forma independiente de los controles que las generen. De esta forma es posible especificar los títulos, imágenes, mensajes de ayuda y escribir el código una sola vez, a pesar de que la acción esté disponible múltiples veces a través de diferentes recursos en la interfaz de la aplicación. El componente tratado cuenta con un editor específico que sirve para crear y manipular las posibles acciones, en donde cada una de estas es un objeto TAction. TActionList cuenta con una propiedad llamada Images, que facilita la asociación con un componente TImageList del cual tomarán las acciones sus imágenes. 

 

Cada objeto TAction del componente TActionList dispone de las siguientes propiedades:

 

Propiedad

Significado

ImageIndex

Índice de la imagen asociada a la acción.

Category

Permite agrupar las acciones por categorías.

Este objeto a su vez dispone de otras propiedades tratadas en componentes anteriores, tal es el caso de: Caption, Checked, ShortCut y Visible.

 

Establecida la acción será necesario establecer el componente o control que pondrá en marcha la misma, al que habitualmente se denomina cliente. Componentes tales como el TButton, TtoolButton, TMenuItem, entre otros tienen una propiedad asociada denominada Action a la cual tiene asociada una lista desplegable que permite la selección de una acción a la que se enlazará al cliente. Al efectuar esta operación el cliente automáticamente recuperará el título de la acción, su mensaje de ayuda, tecla de acceso rápido, imagen asociada, etc. 

 

Componentes de Selección y Control (Win32)

 

TUpDown (Win32): Este control dos pequeños botones con unas flechas en su interior para facilitar el incremento y decremento de un valor. El control puede ser asociado a cualquier control y además se pueden establecer los límites para el valor que se gestiona, así como el incremento o decremento que se aplicará al pulsar el botón.

 

Propiedad

Significado

AlignButton

Posición del control.

ArrowKeys

Indica si se pueden usar las flechas del teclado.

Associate

Control al que está asociado.

Increment

Incremento a aplicar.

Max

Valor máximo.

Min

Valor mínimo.

Orientation

Orientación del control (vertical o horizontal).

Position

Posición actual del cursor en el control.

Thousands

Indica si se utilizan separadores de miles.

Wrap

Indica si se pone a cero al superar al máximo.

 

C++ Builder en la ficha “Samples” existen dos controles denominados TSpinButton y TSpinEdit funciona de forma similar al TUpDown.

 

TMonthCalendar, TDateTimePicker (Win32): Controles que le facilitan al programador la selección, validación y petición de fechas. Estos dos componentes son diferentes en lo visual, ambos comparten un importante número de propiedades. Esto es así porque el control TDateTimePicker, en uno de sus estilos, aparece como una lista desplegable que al abrir se hace aparecer un control TMonthCalender, facilitando la selección de una fecha.

 

Propiedad

Significado

Date

Indica la fecha inicial que esta seleccionada actualmente.

MinDate

Establece una fecha mínima válida dentro de un rango.

MaxDate

Establece una fecha máxima válida dentro de un rango.

CalColors

Tiene como finalidad establecer los colores a usar en los diferentes elementos de interfaz que aparecen en el calendario.

ShowToday (*)

Aparece una etiqueta indicando que día es hoy.

ShowTodayCircle (*)

Aparece destacado con circulo rojo el día de hoy.

FirstDayOfWeek (*)

Permite configurar cual será el nombre del primer día de la semana que aparecerá en el calendario.

WeekNumbers (*)

Si el valor de la propiedad es verdadero, se consigue que en la parte izquierda del calendario aparezca el número del año en curso.

MultiSelect (*)

Si el valor de la propiedad es verdadero, se consigue la selección de un rango de fechas.

MaxSelectRange (*)

Especifica el número máximo de días a seleccionar en el calendario.

EndDate (*)

Indica la fecha final que esta seleccionada dentro del rango.

Kind (**)

Si el valor de la propiedad es dtkDate el control solicitará una fecha, en caso de que el valor es dtkTime el control solicitará un tiempo.

DateMode (**)

Si el valor de la propiedad es dmComboBox el control muestra la interfaz del TMonthCalender, en el caso de que el valor sea dmUpDown permite incrementar y decrementar la fecha.

Time (**)

Indica la hora que esta seleccionada actualmente.

DateFormat (**)

Permite elegir el formato (largo o corto) en el cual se mostrará la fecha en el control.

 

*  Propiedades particulares de TMonthCalender.

** Propiedades particulares de TDateTimePicker.

 

Es posible utilizar el método BoldDays es permitir al programa especificar que días han de mostrarse en negrita, destacados sobre los demás. Este método requiere como primer parámetro un vector con los días a destacar, como segundo un valor entero indicando el mayor índice del vector y como tercero la variable MonthBoldInfo.

 

TProgressBar (Win32): Tiene como finalidad es mostrar de una forma gráfica el estado actual del curso de un proceso. Proporciona al usuario una herramienta para el seguimiento de la ejecución de un determinado proceso, según este vaya avanzando la ejecución se va rellenando gradualmente la barra de izquierda a derecha con el color establecido.

Propiedad

Significado

Smooth

Si el valor de la propiedad es verdadero, el control se va llenando con una franja continua de color, en caso contrario se visualizarán bloques con un color predeterminado.

Step

Incremento para la actualización de la barra de progreso a través del método StepIt.

Orientation

Orientación del control (vertical o Horizontal).

Position

Devuelve el porcentaje del proceso que ya se ha completado.

Max

Valor máximo representado en porcentaje.

Min

Valor mínimo representado en porcentaje.

 

 

TAnimate (Win32): Control para insertar una secuencia de video en formato AVI. Un archivo AVI es una serie de mapa de bits que se comporta como una película. Aunque algunos archivos AVI disponen de sonidos, el control TAnimate solo trabaja con videos sin sonido.

 

Propiedad

Significado

Active

Activa o desactiva la secuencia de video.

Center

Indica si hay que centrar la secuencia de video.

CommonAVI

Nombre de una secuencia de video común. Valores:

aviNone = Ninguna.

aviFindFolder = Búsqueda de una carpeta.

aviFindFile = Búsqueda de un archivo.

aviFindComputer = Búsqueda de una computadora.

aviCopyFiles =  Copia de varios archivos.

aviCopyFile =  Copia de un archivo.

aviRecycleFile = Enviar archivo a la papelera.

aviEmptyRecycle = Vaciar la papelera de reciclaje.

aviDeleteFile = Borrar un archivo.

FileName

Nombre de un archivo con una secuencia de video (archivos sin comprimir y sin audio).

FrameCount

Número de cuadros de la secuencia.

Open

Abre o cierra la secuencia de video.

Repetitions

Número de repeticiones.

StartFrame

Cuadro o frame de inicio.

StopFrame

Cuadro o frame de finalización.

Transparent

Indica si hay que hacer el fondo transparente.

 

Entre los métodos más usados del componente TAnimate se especifican los siguientes:

 

 

Método

Significado

Play

Permite la reproducción del video, para ello se requieren de tres parámetros: el cuadro de inicio, el cuadro de fin y el número de veces que se ha de repetir la reproducción.

Stop

Detiene la reproducción del video.

Seek

Permite establecer un determinado cuadro o frame como actual.

 

 

TTreeView (Win32): Control que facilita la creación de listas en forma de árbol. Además de los títulos de los elementos existentes en la lista, un componente TTreeView también puede mostrar unas líneas guía, imágenes, etc. Cada uno de los elementos de la lista es a su vez un objeto del tipo TTreeNode. Cada nodo de este componente contiene una etiqueta y un número de imagen (mapa de bits). Cada nodo a su vez puede tener una lista de subnodos asociados, los cuales se pueden expandir o contraer.

 

Propiedad

Significado

AutoExpand

Indica si los nodos se expanden y cierran de forma automática al cambiar la selección.

ChangeDelay

Retraso en la generación de evento OnChange.

DropTarget

Nodo seleccionado para arrastrar y soltar.

HideSelection

Indica si se oculta el nodo seleccionado.

HotTrack

Indica si al pasar el cursor del ratón sobre un elemento y este se resalta.

Images

Referencia al TImageList con las imágenes.

Indent

Número de puntos a usar como sangría.

Items

Lista de objetos TTreeNode con los nodos.

ReadOnly

Indica si es posible o no modificar los elementos de la lista.

RightClickSelect

Indica si el botón derecho cambia la selección.

RowSelect

Indica si se ilumina toda la fila del elemento seleccionado.

Selected

Nodo seleccionado como activo o actual.

ShareImages

Indica si los TImageList son compartidos.

ShowButtons

Indica si se muestran los indicadores + y -.

ShowLines

Indica si se dibujan líneas de enlace entre nodos.

ShowRoot

Indica si se dibujan enlaces entre nodos raíz.

SortType

Determina el orden de los nodos en la lista.

StateImages

Lista adicional de imágenes de estado.

ToolTips

Indica si los elementos tienen asociados mensajes flotantes de ayuda.

TopItem

Primer nodo visible en la lista.

 

Cada uno de los nodos insertados en el árbol es un objeto del tipo TTreeNode el cual cuenta con sus propiedades particulares.

 

 

Propiedad

Significado

AbsoluteIndex

Índice absoluto del nodo.

Count

Número de nodos hijo que tiene el nodo.

Data

Datos asociados al nodo.

DropTarget

Indica si el nodo esta seleccionado para una operación de arrastrar y soltar.

Expanded

Indica si el nodo esta expandido.

Focused

Indica si el nodo tiene el foco de entrada.

HasChildren

Indica si el nodo tiene hijos.

IsVisible

Indica si el nodo esta actualmente visible.

ImageIndex

Índice de la imagen asociado al nodo.

Index

Índice del nodo dentro de su nivel.

Level

Nivel del nodo dentro de la lista.

Item

Acceso a los nodos hijo de un determinado nodo.

Parent

Nodo padre.

Selected

Indica si el nodo esta seleccionado actualmente.

SelectedIndex

Índice de la imagen a usar cuando el nodo este seleccionado en la lista.

StateIndex

Índice de la imagen de estado asociada al nodo.

Text

Texto mostrado por el nodo.

 

Entre los métodos más usados del objeto del tipo TTreeNode se nombran los siguientes:

 

Método

Significado

Add

Añade un nuevo nodo en el mismo nivel al que pertenece el nodo que se pasa como parámetro del método.

AddChild

Añade un nuevo nodo hijo al nodo que se pasa como parámetro del método, creando un nuevo nivel en caso de que ese nodo no tuviese hijos hasta ese momento.

AddFirst

Añade el nuevo nodo al principio del nivel correspondiente.

AddChildFirst

Insert

Añadir nodos en una determinada posición.

Clear

Permite eliminar todos los nodos de la lista.

Delete

Elimina de la lista el nodo cuya referencia se pasa como parámetro del método.

MakeVisible

Permite hacer visible un determinado nodo.

Expand

Permite expandir la rama de un determinado nodo.

Collapse

Permite cerrar la rama de un determinado nodo.

DeleteChildren

Elimina los nodos hijos de un determinado padre.

EditText

Permite iniciar la edición del título de un nodo.

CancelEdit

Cancelar la operación de edición de títulos.

FullExpand

Permite expandir totalmente las ramificaciones del árbol.

FullCollapse

Permite cerrar totalmente las ramificaciones del árbol.

 

 

TListView (Win32): Control que facilita la creación de listas en varios estilos. Los elementos de la lista se pueden visualizar en columnas, con sus correspondientes cabeceras, o como subelementos, vertical u horizontalmente, con iconos pequeños o grandes. Cada uno de los elementos de la lista es a su vez un objeto del tipo TListItem. 

 

Propiedad

Significado

AllocBy

Establece el número de elementos a añadir.

CheckBoxes

Indica si el elemento irá precedido de una caja de selección.

ColumnClick

Indica si la cabecera actúa como un botón.

Columns

Cabeceras de las columnas.

FlatScrollBars

Indica si las barras de desplazamiento son planas.

FullDrag

Indica si las cabeceras están visibles al arrastrarse.

GridLines

Activa o Desactiva las líneas de separación entre elementos.

HideSelection

Indica si se oculta el ítem seleccionado.

HotTrack

Indica si se responde de alguna forma cuando el cursor del ratón está sobre un elemento.

HotTrackStyle

La información a ofrecer cuando HotTrack es true.

IconOptions

Opciones de visualización de iconos.

ItemFocused

Elemento que tiene el foco de entrada.

Items

Lista de objetos TListItem con los elementos.

LargeImages

Referencia a un TImageList con iconos grandes.

MultiSelect

Indica si permite la selección múltiple.

OwnerData

Indica si el contenido de la lista es virtual.

OwnerDraw

Permite personalizar la apariencia del control.

ReadOnly

Indica si es posible la modificación de los títulos.

RowSelect

Indica si se pueden seleccionar filas enteras.

Selected

Elemento seleccionado actualmente.

ShareImages

Indica si los TImageList son compartidos.

ShowColumnHeaders

Indica si se muestran las cabeceras de columna.

SmallImages

Referencia a un TImageList con iconos pequeños.

SortType

Determina el orden de los nodos en la lista.

StateImages

Lista adicional de imagenes de estado.

TopItem

Primer elemento visible.

ViewStyle

Estilo de visualización. Valores:

vsIcon = Iconos grandes.

vsSmallIcon = Iconos pequeños.

vsList = Lista.

vsReport = Detalles o tipo informe.

 

Cada uno de los elementos insertados en la lista es un objeto del tipo TListItem el cual cuenta con sus propiedades particulares.

 

Propiedad

Significado

Caption

Título del elemento.

Checked

Indica si el elemento esta marcado.

Cut

Indica si el elemento ha sido cortado.

Data

Datos asociados al elemento.

DropTarget

Indica si el elemento esta seleccionado para una operación de arrastrar y cortar.

Focused

Indica si el elemento tiene el foco de entrada.

ImageIndex

Índice de la imagen asociada al elemento.

Index

Índice del elemento de la lista.

ListView

Control TListView al que pertenece el elemento.

OverlayIndex

Índice de la imagen a superponer.

Position

Posición del elemento.

Selected

Indica si el elemento esta seleccionado.

StateIndex

Índice de la imagen de estado.

SubItems

Lista de cadenas con los sub-elementos.

 

Entre los métodos más usados del objeto del tipo TListItem se especifican los siguientes:

 

Método

Significado

EditCaption

Permite la edición del título del elemento.

CancelEdit

Cancela la edición del título del elemento.

Delete

Permite borrar un determinado elemento de la lista.

 

 

Otros Componentes Receptores de Texto

 

TDrawGrid (Additional): Permite crear una rejilla de celdas dependiendo del número de filas y columnas indicadas al control. 

 

Propiedad

Significado

RowCount

Establece el número de filas de la rejilla.

ColCount

Establece el número de columnas de la rejilla.

FixedRows

Establece el número de filas fijas de la rejilla.

FixedCols

Establece el número de columnas fijas de la rejilla.

DefaultColWidth

Estable el ancho en pixels de cada celda de la rejilla.

DefaultRowHeight

Estable el alto en pixels de cada celda de la rejilla.

DefaultDrawing

Prepara la celda para ser dibujada, borrando su contenido actual y rellanando el fondo del color que corresponda.

ColWidths

Indica el ancho en pixels de una celda individual de la rejilla.

RowHeights

Indica el alto en pixels de una celda individual de la rejilla.

ScrollBars

Aparece automáticamente la barra de desplazamiento vertical, horizontal o ambas.

VisibleRowCount

Determina el número de filas visibles en el control.

VisibleColCount

Determina el número de columnas visibles en el control.

GridLineWidth

Establece el grosor de la línea con la que se dibuja la cuadricula.

Color

Permite especificar el color de fondo de la rejilla.

FixedColor

Permite especificar el color con el cual aparecerán las filas y columnas fijas.

Row

Indica el número de fila de la celda activa.

Col

Indica el número de columna de la celda activa.

Options

Permite seleccionar opciones que pueden estar activas en el control. Valores:

goFixedHorzLine = Muestra las líneas de separación de filas en las columnas fijas.

goFixedVertLine = Muestra las líneas de separación de columnas en las filas fijas.

goHorzLine = Dibuja las líneas horizontales de separación.

goVertLine = Dibuja las líneas verticales de separación.

goRowSizing = Permite el cambio de altura de las filas.

goColSizing = Permite el cambio de anchura de las columnas.

goRowMoving = Permite el movimiento de las filas.

goColMoving = Permite el movimiento de las columnas.

goRangeSelect = Permite la selección de un rango de celdas.

goDrawFocusSelected = Muestra la celda actual con el mismo color que las celdas restantes.

goEditing = Permite la edición de las celdas.

goAlwaysShowEditor = Activa siempre el modo de edición.

goTabs = Permite el uso del tabulador para desplazarse entre columnas.

goRowSelect = Permite solo la selección de filas completas.

goThumbTracking = Desplaza el contenido de la rejilla a medida que se arrastra el cursor de la barras de desplazamiento.

 

Evento

Significado

OnDrawCell

Permite dibujar el contenido de una celda.

OnGetEditMask

Permite obtener una máscara de entrada de datos, que el control utilizará para controlar y limitar las posibilidades de edición del usuario.

OnGetEditText

Facilita al control el valor que actualmente contiene la celda, ya que éste no es almacenado por la propia rejilla. 

OnSetEditText

Permite recuperar la información introducida por el usuario, para su almacenamiento, así como el completo control sobre la introducción de los datos.

OnSelectCell

Permite desplazarse de una celda a otra utilizando las teclas del cursor, mediante el puntero del ratón, o bien pulsando la tecla tabulador.

Este control permite el uso del método CellRect con el cual se puede obtener el área de dibujo correspondiente a una cierta celda.

 

 

TStringGrid (Additional): Permite crear una rejilla de celdas dependiendo del número de filas y columnas indicadas al control pero con características adicionales a las del control TdrawGrid que facilita la gestión de las celdas. 

 

 

Propiedad

Significado

Cells

Se accede individualmente y bidimensionalmente a las cadenas de texto de la celda.

Cols y Rows

Matrices de una sola dimensión, y su índice especifica que columna o que fila es la que se desea manipular.

 

 


 

Ejercicios Resueltos

 

/* Proyecto 1: El propósito de este proyecto es solo el diseño de los siguientes aspectos: menú principal, sub-menús, menús multicolumnas, y el establecer opciones con imágenes */

 

 

/* Proyecto 2: En este proyecto se definen una serie de acciones comunes, codificar las funciones asociadas y enlazar cada acción con los componentes que forman parte de la interfaz del formulario */

 

 

 

 

 

 

 

 

 

 

 

 

 

// Codificación de la opción “Nuevo” de la barra de herramienta y del menú de opciones

void __fastcall TForm1::actNuevoExecute(TObject *Sender)

{

      ShowMessage("Nuevo archivo creado");

}

// Codificación de la opción “Abrir” de la barra de herramienta y del menú de opciones

void __fastcall TForm1::actAbrirExecute(TObject *Sender)

{

      ShowMessage("Archivo abierto");

}

// Codificación de la opción “Guardar” de la barra de herramienta y del menú de opciones

void __fastcall TForm1::actGuardarExecute(TObject *Sender)

{

      ShowMessage("Archivo guardado");

}

// Codificación de la opción “Imprimir” de la barra de herramienta y del menú de opciones

void __fastcall TForm1::actImprimirExecute(TObject *Sender)

{

      ShowMessage("Archivo impreso");

}

// Codificación de la opción “Salir” de la barra de herramienta y del menú de opciones

void __fastcall TForm1::actSalirExecute(TObject *Sender)

{

      Close( );

}

// Codificación del control “TEdit”

void __fastcall TForm1::actAbrirUpdate(TObject *Sender)

{

      actAbrir->Enabled = edArchivo->Text != "";

      actGuardar->Enabled = actAbrir->Enabled;

}

 

/* Proyecto 3: Este proyecto tiene como finalidad mostrar un álbum de fotografías usando el control como el TupDown asociado al control TEdit */    

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

//---------------------------------------------------------------------------

void __fastcall TForm1::BotonClick(TObject *Sender, TUDBtnType Button)

{

    AnsiString Archivo="I"+Numero->Text+".bmp";

    Imagen->Picture->LoadFromFile(Archivo);

}

//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)

{

    Imagen->Picture->LoadFromFile("I1.bmp");

}

 

/* Proyecto 4: Uso del control TTrackBar */

 

 

 

 

 

 

 

 

 

 

 

// Actualizar el color del panel del lado derecho

void __fastcall TForm1::RojoChange(TObject *Sender)

{

      Panel->Color = (TColor ) RGB(Rojo->Position, Verde->Position, Azul->Position);

}

 

/* Proyecto 5:  Uso del control TMonthCalendar y TDateTimePicker */

 

 

 

 

 

 

 

 

 

 

 

 

 

 

//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)

{

      ShowMessage(DateToStr(MonthCalendar1->Date) + "-"

                              + DateToStr(MonthCalendar1->EndDate));   

}

//---------------------------------------------------------------------------

void __fastcall TForm1::MonthCalendar1GetMonthInfo(TObject *Sender, DWORD Month,

 DWORD &MonthBoldInfo)

{

     const unsigned Dias[ ] = {4, 7, 9};

     MonthCalendar1->BoldDays(Dias, 2, (unsigned int &)MonthBoldInfo);

}

 

/* Proyecto 6: El propósito de este proyecto es mostrar el uso del control ProgressBar */

 

 

 

 

 

 

 

 

 

 

 

 

//------------------------------------------------------------------------------

void __fastcall TForm1::EscrituraClick(TObject *Sender)

{

     ofstream P("NUMEROS.TXT");   // Archivo de Salida

     Cursor=crHourGlass;                  // Establecer el Cursor de Espera

     Escritura->Enabled=false;           // Desactivar el Botón

     // Generar un archivo con los primeros 2500 números naturales

     for (int N=0;N<2500;N++)

     {

         Application->ProcessMessages( );  //Permitir el proceso de otros mensajes

         P<<N;

         Barra->StepIt( );           // Actualizar la Barra de Progreso

     }

     P.close( );                         // Cerrar el archivo

     Barra->Position=0;           // Comenzar la barra en la Posición Inicial

     Escritura->Enabled=true; // Activar el Botón

     Cursor=crDefault;             // Restaurar el cursor por defecto

}

//------------------------------------------------------------------------------

void __fastcall TForm1::MarcarClick(TObject *Sender)

{

     Barra->Smooth=Marcar->Checked;  // Activar franja de relleno

}

 

/* Proyecto 7: Este proyecto permite registrar índices de libros, que pueden ser guardados y recuperados de un archivo de disco */

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

// Codificación del botón “Nuevo Libro”

void __fastcall TForm1::NuevoLibroClick(TObject *Sender)

{

       TTreeNode *NuevoNodo;

       // Añadir un nuevo nodo al primer nivel

       NuevoNodo = Indices->Items->Add(NULL, "Nuevo libro");

       NuevoNodo->ImageIndex = 0;      // Establecer las imágenes

       NuevoNodo->SelectedIndex = 0;

       NuevoNodo->EditText( );               // Editar el texto del nodo

       Indices->Selected = NuevoNodo;  // Seleccionar el nuevo nodo como actual

}

// Codificación del botón “Nuevo Capitulo”

void __fastcall TForm1::NuevoCapituloClick(TObject *Sender)

{

       int N;

       TTreeNode *NuevoNodo;

       // Si no hay un nodo seleccionado actualmente no se puede saber a que libro se desea añadir

       if  (Indices->Selected == NULL)  

           ShowMessage("Seleccione antes el libro al que desea añadir el capítulo.");

       else

       {

// Obtener el índice absoluto del nodo seleccionado y recorrer el árbol hasta encontrar el nodo

// correspondiente al libro          

N = Indices->Selected->AbsoluteIndex;

while (Indices->Items->Item[N]->Level != 0) N--;

// Añadir un nuevo nodo estableciendo el título y sus imágenes

NuevoNodo = Indices->Items->AddChild(Indices->Items->Item[N],"Nuevo capítulo");

NuevoNodo->ImageIndex = 2;

NuevoNodo->SelectedIndex = 2;

// Expandir el nodo al que se acaba de añadir el capítulo

Indices->Items->Item[N]->Expand(false);

// Seleccionar el nuevo nodo como el actual

Indices->Selected = NuevoNodo;

NuevoNodo->EditText( );       // Editar el título del nodo

      }

}

// Codificación del botón “Nuevo Apartado”

void __fastcall TForm1::NuevoApartadoClick(TObject *Sender)

{

       int N;

       TTreeNode *NuevoNodo;

       // Si no hay un nodo seleccionado o si el actual es un libro, conocer a que capítulo se desea

       // añadir

       if (Indices->Selected == NULL || Indices->Selected->Level == 0)

           ShowMessage("Seleccione el capítulo al que desea añadir el apartado.");

       else

       {

            N = Indices->Selected->AbsoluteIndex;    // Obtener el índice absoluto del nodo actual y

             // recorrer el árbol hasta encontrar el nodo correspondiente al capítulo

            while (Indices->Items->Item[N]->Level != 1)   N--;

            // Añadir un nuevo nodo y establecer su título e imágenes

            NuevoNodo = Indices->Items->AddChild(Indices->Items->Item[N], "Nuevo apartado");

            NuevoNodo->ImageIndex = 4;

            NuevoNodo->SelectedIndex = 4;

            Indices->Items->Item[N]->Expand(false);

            NuevoNodo->EditText( );                          // Editar el título del apartado

       }

}

// Codificación del botón “Eliminar”

void __fastcall TForm1::EliminarClick(TObject *Sender)

{

        // Si hay un nodo seleccionado se elimina

        if (Indices->Selected != NULL)  Indices->Items->Delete(Indices->Selected);

}

// Codificación del botón “Guardar”

void __fastcall TForm1::GuardarClick(TObject *Sender)

{

        Indices->SaveToFile("INDICES.DAT");        // Grabar el contenido en un archivo

}

// Codificación del botón “Recuperar”

void __fastcall TForm1::RecuperarClick(TObject *Sender)

{

        Indices->LoadFromFile("INDICES.DAT"); 

        // Cargar el contenido del archivo y restablecer las imágenes según el nivel

        for (int N = 0; N < Indices->Items->Count; N++)

        {

             Indices->Items->Item[N]->ImageIndex = Indices->Items->Item[N]->Level * 2;

             Indices->Items->Item[N]->SelectedIndex = Indices->Items->Item[N]->Level * 2;

        }

}

// Restaurar las imágenes originales

void __fastcall TForm1::IndicesCollapsing(TObject *Sender, TTreeNode *Node,  bool &AllowCollapse)

{

       Node->ImageIndex = Node->Level * 2;

       Node->SelectedIndex = Node->Level * 2;

}

// Si no se esta en el último nivel usar las imágenes de los libros abiertos

void__fastcall TForm1::IndicesExpanding(TObject *Sender, TTreeNode *Node,bool &AllowExpansion)

{

       if (Node->Level != 2)

       {

           Node->ImageIndex = Node->Level * 2 + 1;

           Node->SelectedIndex = Node->Level * 2 + 1;

       }

}

void __fastcall TForm1::FormResize(TObject *Sender)

{

       // Vector con los nombres de los cinco primeros botones

       AnsiString Nombres[]= {"Guardar", "Eliminar", "NuevoApartado", "NuevoCapitulo", "NuevoLibro"};

       TButton * Boton;

       // Redimensionar el control TTreeView

       Indices->Width = ClientWidth - Indices->Left - Recuperar->Width - 20;

       Indices->Height = ClientHeight - Indices->Top - 10;

       // Calcular la posición del botón inferior

       Recuperar->Left = ClientWidth - Recuperar->Width - 10;

       Recuperar->Top = ClientHeight - Recuperar->Height - 10;

       // A continuación nombrar a los otros cinco botones

       for (int N = 0; N < 5; N++)

       {

           Boton = (TButton *)FindComponent(Nombres[N]);

           Boton->Left = Recuperar->Left;

           Boton->Top = Recuperar->Top - Recuperar->Height * (N+1);

       }

}

 

/* Proyecto 8:  Uso del control TDrawGrid, cuenta con una rejilla de cinco columnas, de las cuales dos servirán para que el usuario introduzca datos relativos a ingresos y gastos, una tercera para mostrar la diferencia entre ambas cantidades y la última para representar gráficamente la diferencia */

 

 

 

 

 

 

 

 

 

 

 

 

 

 

void __fastcall TForm1::RejillaDrawCell(TObject *Sender, int Col, int Row, TRect &Rect, TGridDrawState State)

{

       // Conceptos que aparecerán como títulos de las columnas

       const AnsiString Conceptos[4] = {"Ingresos", "Gastos","Diferencia", "Gráfico"};

       // Meses que aparecerán como títulos de las filas

       const AnsiString Meses[12] =  {"Ene", "Feb", "Mar", "Abr", "May", "Jun",

                                                         "Jul", "Ago", "Sep", "Oct", "Nov", "Dic"};

       if (Row == 0 && Col == 0)     // Si es la celda superior izquierda mostrar en ella un título

          Rejilla->Canvas->TextOut(Rect.Left, Rect.Top, "Cálculos");

       else if (Row == 0)                 // Si se trata de un título de columna

                  Rejilla->Canvas->TextOut(Rect.Left, Rect.Top, Conceptos[Col-1]);    // mostrar el concepto

               else if (Col == 0)           // Si se trata de un título de fila

                          Rejilla->Canvas->TextOut(Rect.Left, Rect.Top, Meses[Row-1]);  // mostrar el mes

                       else if (Col != 4)    // Si es cualquier otra celda y no un gráfico

                                      Rejilla->Canvas->TextOut(Rect.Left, Rect.Top, AnsiString(Contenido[Col-1][Row-1]));

  // mostrar el valor

}

// No permitir la selección de las celdas de las dos últimas columnas

void __fastcall TForm1::RejillaSelectCell(TObject *Sender, int Col, int Row, bool &CanSelect)

{

          if (Col > 2)  CanSelect = false;

}

// Facilitar la máscara de edición

void __fastcall TForm1::RejillaGetEditMask(TObject *Sender, int ACol, int ARow, AnsiString &Value)

{

          Value = "999999";

}

//------------------------------------------------------------------------------

void__fastcall TForm1::RejillaSetEditText(TObject *Sender, int ACol, int ARow, const AnsiString Value)

{

         AnsiString Valor;

         int ValorNumerico, Magnitud;

         TRect Area;

         Valor = Value;                                                                // Tomar la cadena en una variable

         while (Valor.Length( ) && Valor[Valor.Length( )] == ' ')  // Eliminar los espacios finales

        Valor.SetLength(Valor.Length( )-1);

         ValorNumerico = atoi(Valor.c_str( ));                             // Convertir a número

          if (ValorNumerico > Limite)                                           // En caso de superar el límite

            ShowMessage("Ha superado el límite");

          else Contenido[ACol-1][ARow-1] = ValorNumerico;     // En caso contrario tomar el nuevo valor

          // Calcular la diferencia entre ingreso y gasto

          Contenido[2][ARow-1] = Contenido[0][ARow-1] - Contenido[1][ARow-1];

          // Obtener el área de dibujo de la celda que contiene el valor de la diferencia

          Area = Rejilla->CellRect(3, ARow);

          // y mostrar en ella el dato correspondiente

          Rejilla->Canvas->Brush->Color = clWhite;

          Rejilla->Canvas->FillRect(Area);

          Rejilla->Canvas->TextOut(Area.Left, Area.Top, AnsiString(Contenido[2][ARow-1]));

          // Calcular la magnitud para representar gráficamente la diferencia

          Magnitud = Rejilla->ColWidths[4] * Contenido[2][ARow-1] / Limite;

          Area = Rejilla->CellRect(4, ARow);                             // Obtener el área de dibujo

          Rejilla->Canvas->FillRect(Area);                                 // y limpiarla

          if (Magnitud > 0)                                                          // Si el valor es positivo

              Rejilla->Canvas->Brush->Color = clGreen;             // dibujar en verde

          else

          {

             Rejilla->Canvas->Brush->Color = clRed;                 // dibujar en rojo

             Magnitud = abs(Magnitud);

          }

          Rejilla->Canvas->Rectangle(Area.Left, Area.Top+2,Area.Left+Magnitud, Area.Bottom-2); // Pintar la barra

}

// Facilitar el valor actual que contiene la celda

void __fastcall TForm1::RejillaGetEditText(TObject *Sender, int ACol, int ARow, AnsiString &Value)

{

       Value = AnsiString(Contenido[ACol-1][ARow-1]);

}