República Bolivariana de Venezuela
Universidad Nacional Experimental del Táchira
Departamento de Ingeniería Informática
Tema
Perteneciente a la Unidad Nº 4: Programación en C++ Builder.
Autor: Lcdo. José Froilán Guerrero
Pulido
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.
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. |
/* 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]);
}