203
UNIDAD I C++BUILDER PROGRAMACION VISUAL ELEMENTOS BASICOS 1.- INTRODUCCION 2.- MODELO DE SOLUCION 3.- VARIABLES 4.- TIPOS DE DATOS 5.- OPERADORES ARITMETICOS 6.- OPERADOR CAST 7.- JERARQUIA DE OPERACIONES 8.- ENTRADAS/SALIDAS EN PROGRAMACION VISUAL 9.- FORM1, ACTIVA O PRINCIPAL 10.- PROGRAMAS, FORMAS Y COMPONENTES 11.- COMPONENTE LABEL Standard 12.- COMPONENTE BUTTON Standard 13.- COMPONENTE EDIT Standard 14.- COMPONENTE MaskEdit Adicional 15.- COMPONENTE ComboBox Standard 16.- COMPONENTES DE AGRUPAMIENTO 17.- COMPONENTE PANEL Standard y atrás flecha negra 18.- COMPONENTE GroupBox Standard 19.- VENTANAS EN C++Builder UNIDAD II C++BUILDER INSTRUCCIONES DE CONTROL DE PROGRAMA 1.- INTRODUCCION 2.- INSTRUCCIONES CONDICIONALES

visual_c++

Embed Size (px)

Citation preview

Page 1: visual_c++

UNIDAD I C++BUILDER PROGRAMACION VISUAL ELEMENTOS BASICOS

1.- INTRODUCCION

2.- MODELO DE SOLUCION

3.- VARIABLES

4.- TIPOS DE DATOS

5.- OPERADORES ARITMETICOS

6.- OPERADOR CAST

7.- JERARQUIA DE OPERACIONES

8.- ENTRADAS/SALIDAS EN PROGRAMACION VISUAL

9.- FORM1, ACTIVA O PRINCIPAL

10.- PROGRAMAS, FORMAS Y COMPONENTES

11.- COMPONENTE LABEL Standard

12.- COMPONENTE BUTTON Standard

13.- COMPONENTE EDIT Standard

14.- COMPONENTE MaskEdit Adicional

15.- COMPONENTE ComboBox Standard

16.- COMPONENTES DE AGRUPAMIENTO

17.- COMPONENTE PANEL Standard y atrás flecha negra

18.- COMPONENTE GroupBox Standard

19.- VENTANAS EN C++Builder

UNIDAD II C++BUILDER INSTRUCCIONES DE CONTROL DE PROGRAMA

1.- INTRODUCCION

2.- INSTRUCCIONES CONDICIONALES

Page 2: visual_c++

3.- CONDICIONES SIMPLES

4.- INSTRUCCION IF

5.- CONDICIONES COMPUESTAS

6.- INSTRUCCION SWITCH

7.- COMPONENTES VISUALES DE SELECCION Y DECISIÓN

8.- COMPONENTE CheckBox Standard

9.- COMPONENTE RadioButton Standard

10.- COMPONENTE RadioGroup Standard

11.- COMPONENTE MainMenu Standard

12.- COMPONENTE PopupMenu Standard

13.- CICLO FOR

14.- CICLO WHILE

15.- CICLO DO-WHILE

16.- CONCLUSIONES ACERCA DE CICLOS

17.- INSTRUCCION DE SALTO INCONDICIONAL

III UNIDAD C++ BUILDER ARREGLOS

1.- INTRODUCCION

2.- ARREGLOS TRADICIONALES EN C++BUILDER

3.- ARREGLOS TIPO LISTAS

4.- ARREGLOS TIPO TABLA

5.- TIPOS DE ARREGLOS EN C++BUILDER CLASES E INTERNOS

6.- TStringList

7.- COMPONENTE ListBox Standard

Page 3: visual_c++

8.- COMPONENTE StringGrid adicional

IV UNIDAD C++BUILDER INT A LAS BASES DE DATOS

1.- INTRODUCCION

2.- MODELOS DE ALMACENAMIENTO DE DATOS

3.- TABLAS

4.- TABLAS CONTINUACION

5.- DATABASE DESKTOP

6.- APLICACIONES O PROGRAMAS CON TABLAS

7.- APLICACIONES POR RENGLON

8.- APLICACION POR TABLA

9.- PROCESOS BASICOS

10.- BUSQUEDAS

11.- FILTROS

12.- GRAFICOS O IMAGENES

13.- IMPRESION O REPORTES

14.- IMPRESION DE TODA LA TABLA

15.- MODELO RELACIONAL DE DATOS

16.- TIPOS DE RELACIONES

17.- MODELO RELACIONAL Y DATABASE DESKTOP

18.- APLICACIONES CON TABLAS DE RELACION

V UNIDAD C++BUILDER COMPONENTES

1.- INTRODUCCION

2.- COMPONENTES, CLASES Y OBJETOS

Page 5: visual_c++

1.- INTRODUCCION PROGRAMACION C++BUILDER

Los nuevos sistemas de información son costosos en tiempos y recursos, la solución

moderna de sistemas de información exigen nuevas herramientas y metodologías para

resolver rápida, económica y eficiente los problemas de información planteados por las

organizaciones.

Aun mas el pleno potencial del hardware no es aprovechado plenamente y existe un

considerable retraso con el software y sus aplicaciones, generando lo que se conoce como

―crisis del software‖.

En programación tradicional, modular o estructurada un programa describe una serie de

pasos a ser realizados para la solución de un problema, es decir es un algoritmo.

En programación orientada a objetos ( OOP ) un programa es considerado como un sistema

de objetos interactuando entre sí, ambientes de desarrollo visuales facilitan aun más la

construcción de programas y solución de problemas, porque permiten abstraer al ingeniero

de software de todo el GUI (interfase gráfica) del problema, que constituye más del 60%

del código normal de un programa.

Es decir, en programación modular o estructurada un problema sencillo de información es

descompuesto en una serie de módulos(llamados procedimientos o funciones) donde cada

uno de ellos realiza una tarea específica, por ejemplo uno de ellos captura los datos, otro

resuelve operaciones, etc.

En OOP todo problema aun aquellos sencillos de información, se consideran y resuelven

como módulos de código gigante (clase) que contiene todo el código necesario(variables,

procedimientos, funciones, interfaces, etc.) para solucionar el problema.

En programación visual( que también es heredera de OOP ),la interfase con el usuario(

pantallas) son generadas por el propio compilador y el ingeniero de software solo se

concentra en resolver el problema planteado.

C++Builder, es un compilador que permite usar cualquiera de los tres enfoques en la

solución de problemas de información que puedan y deban ser resueltos empleando el

computador y el lenguaje.

Para propósitos de aprendizaje usaremos el tercer enfoque, es decir programación en

ambientes visuales y usando el lenguaje de programación C++Builder.

Page 6: visual_c++

2.- MODELO DE SOLUCION C++BUILDER

En general un problema de información es posible entenderlo, analizarlo y descomponerlo

en todos sus componentes o partes que de una u otra manera intervienen tanto en su

planteamiento como en su solución.

Una herramienta rápida que nos permite descomponer en partes un problema para su

solución, es el llamado modelo de solución, este consiste de una pequeña caja que contiene

los tres elementos más básicos en que se puede descomponer cualquier problema sencillo

de información, estas tres partes son:

1. LA PRIMERA PARTE son todos los datos que el computador ocupa para resolver el

problema, estos datos son almacenados internamente en la memoria del computador en las

llamadas variables de entrada.

2. LA SEGUNDA PARTE son todas las operaciones generalmente algebraicas necesarias

para solucionar el problema, generalmente esta parte del modelo es una formula (o igualdad

matemática, ej. X= y + 5).

3. LA TERCERA PARTE es el resultado o solución del problema que generalmente se

obtiene de la parte de operaciones del modelo y dichos datos están almacenados en las

llamadas variables de salida.

En resumen para todo problema sencillo de información es necesario plantearse las

siguientes preguntas:

Que información o variables de salida se van a desplegar en pantalla para responder al

problema planteado originalmente?

Variables es el nombre de una localidad o dirección interna en la memoria del computador

donde se almacenan los datos, ejemplo de variables para los casos del inciso anterior,

CIUDAD, DIRECCION, EDAD, SUELDO, ETC.

Información son datos ya procesados que resuelven un problema planteado.

EJEMPLO DE MODELO DE SOLUCION

Construir un modelo de solución que resuelva el problema de calcular el área de un

triángulo con la formula área igual a base por altura sobre dos.

UNIDAD 5.- C++BUILDER COMPONENTES

Variable(s) Entrada Proceso u operación Variable(s) salida

BASE ALTURA AREA = BASE * ALTURA / 2 AREA

Page 7: visual_c++

TAREAS PROGRAMACION C++BUILDER

PROBLEMA 2.- CONVERTIR LA EDAD EN AÑOS DE UNA PERSONA A MESES.

PROBLEMA 3.- CONVERTIR PESOS A DOLARES.

PROBLEMA 4.- CALCULAR EL AREA DE UN CIRCULO CON LA FORMULA

PROBLEMA 5.- EVALUAR LA FUNCION PARA CUALQUIER

VALOR DE X.

Pero recordar también que existirán problemas sencillos donde:

*No se ocupan entradas o no se ocupan operaciones, pero todos ocupan salida.

* Una formula grande o muy compleja puede ser más segura y fácil de resolver, si es

descompuesta y resuelta en partes, juntando al final los parciales para obtener el resultado

final.

* Un problema puede tener más de una solución correcta.

* El problema no esta suficientemente explicado o enunciado, entonces, estudiarlo,

analizarlo y construirlo de manera genérica.

PROBLEMAS SUGERIDOS:

Construir los modelos de solución de los siguientes problemas:

PROBLEMA 6.- Convertir millas a kilómetros(caso normal)

PROBLEMA 7.- Convertir 125 metros a centímetros(no ocupa entradas)

PROBLEMA 8.- Se calcula que en promedio hay 4.7 nidos en cada árbol en la UABC,

también se calcula que en cada nido existen un promedio de 5.8 pájaros, se pide calcular la

cantidad total de nidos y de pájaros en los 227 arboles que existen en la UABC. (no ocupa

entradas)

PROBLEMA 9.- La gorda Sra. López y sus 8 hijos solo compran una vez al mes su

mandado en conocido supermercado, en dicha tienda el kilogramo de frijol cuesta $8.75, el

paquete de tortillas cuesta $3.55 y el frasco de café vale $14.25, si solo compran de estos

tres productos para su mandado, calcular su gasto total. ( problema no claro)

PROBLEMA 10.- Capturar y desplegar los cinco datos mas importantes de un

automóvil(no ocupa operaciones)

Page 8: visual_c++

PROBLEMA 11.- La distancia Tijuana - Ensenada es de 110 kilómetros. Si un automóvil la

recorre a una velocidad constante de 30 millas por hora, cuanto tiempo tarda en llegar. ( 1

milla = 1.609 Km.) (dos maneras correctas de

resolverlo).

PROBLEMA 12.-Evaluar la función para cualquier valor de x.(caso

normal).

PROBLEMA 13.-Evaluar la función para cuando x vale 4 . (no ocupa

entradas).

Page 9: visual_c++

3.- C++BUILDER VARIABLES

Identificadores son conjuntos de letras y/o números que se utilizan para simbolizar todos

los elementos que en un programa, son definibles por el usuario (programador o ingeniero

de software) del mismo, como son las variables donde se almacenan datos, funciones(

pequeños módulos con código), etiquetas, clases, objetos, etc.

En C++Builder un identificador es una palabra compuesta de letras y/o números de hasta

32 caracteres significativos, empezando siempre con una letra.

Una variable se define como un identificador que se utiliza para almacenar todos los datos

generados durante la ejecución de un programa.

Existen ciertas reglas en cuanto a variables:

*

* Claras y con referencia directa al problema. *

* No espacios en blanco, ni símbolos extraños en ellas. *

* Se pueden usar abreviaturas, pero solo de carácter general.

No deben ser palabras reservadas del lenguaje.

Ejemplos de buenas variables:

Nombre, Edad, SdoDiario, IngMensual, Perímetro, Calif1, etc.

Page 10: visual_c++

4.- TIPOS DE DATOS C++BUILDER

A toda variable que se use en un programa, se le debe asociar (generalmente al principio

del programa) un tipo de dato específico.

Un tipo de dato define todo el posible rango de valores que una variable puede tomar al

momento de ejecución del programa y a lo largo de toda la vida útil del propio programa.

Los tipos de datos más comunes en C++Builder son:

Tipo Tamaño Rango

unsigned char 8 bits 0 a 255

char 8 bits -128 a 127

short int 16 bits -32,768 a 32,767

unsigned int 32 bits 0 a 4,294,967,295

int 32 bits -2,147,483,648 a 2,147,483,647

unsigned long 32 bits 0 a 4,294,967,295

enum 16 bits -2,147,483,648 a 2,147,483,647

long 32 bits -2,147,483,648 a 2,147,483,647

float 32 bits 3.4 x 10-38 a 3.4 x 10+38(6 dec)

double 64 bits 1.7 x 10-308 a 1.7*10+308(15 dec)

long double 80 bits 3.4 x 10-4932 a 1.1 x 10+4932

AnsiString cadena de caracteres

AnsiString no es propiamente un tipo de dato, sino una clase que se especializa en al

almacenamiento y manipulación de datos de tipo string, es decir, como clase ya contiene

toda una serie de métodos (procedimientos y funciones) que pueden usar directamente las

variables(objetos) que se declaren de tipo AnsiString, como en el siguiente ejemplo;

Page 11: visual_c++

área de declaración carga normal de variables strings (que antes no se podía hacer

directamente en C o C++)

procesos con las variables ya considerándolas como objetos de la clase AnsiString estos

procesos antes ocupaban una librería especial llamada < string.h > * Interesante este

nuevo tipo (Clase) AnsiString y también interesante estos dos métodos ( LowerCase() y

ToInt() ), el resto de métodos, se deben buscar en la ayuda del C++Builder (solo abrir

folder o libro llamado ―referencia del programador‖, pedir índex y luego escribir

AnsiString ).

Page 12: visual_c++

5.- C++ BUILDER OPERADORES ARITMETICOS

Un operador es un símbolo especial que indica al compilador que debe efectuar una

operación matemática o lógica.

C++Builder reconoce los siguientes operadores aritméticos:

Operador Operación

+ Suma

- Resta

* Multiplicación

/ División

% Residuo o Módulo

Como notas importantes a recordar siempre;

* En problemas de división entre enteros, C++ trunca la parte residual, es decir:

// área de declaración de variables

float a;

// área de operaciones

a = 10 / 4;

// área de despliegue de resultados

desplegar a; --> En pantalla sale ( 2.000000 )

El problema no es el tipo float, sino que por definición de la división entre enteros C++

siempre trunca la parte residual, mas adelante se indica como se resolverá este problema.

El operador (%) devuelve el residuo entero de una división entre enteros, ejemplo:

Page 13: visual_c++

área de despliegue Otro ejemplo; Para resolver los problemas de potencias y raíces, se

usan ciertas instrucciones especiales que proporciona el lenguaje, llamadas funciones

matemáticas, en C++ existe toda una librería de instrucciones o funciones matemáticas.

Recordar que todas las funciones reciben uno o más datos o valores y regresan siempre un

resultado, una de estas funciones matemáticas es: Esta función ocupa dos valores o datos(

base y exp) ambos de tipo double, y regresa un resultado también de tipo double, ejemplo;

- resolver el problema de calcular Para resolver el problema de raíces, se aprovecha

una de las mas elementales y conocida de las leyes de exponentes que dice: Es

decir una raíz cualquiera se puede transformar a una potencia con un exponente

fraccionario. Ejemplo: problema y = 3 √x esto es equivalente a entonces: y=3 *

pow(double(x),double(1/2.0) ); * En este ejemplo se esta dando por supuesto que no

interesa el tipo de dato que requiere la función pow() para trabajar correctamente 6.-

C++BUILDER OPERADOR CAST

Se puede forzar un dato, variable o una expresión a convertirse o cambiarse a un nuevo tipo

de dato.

El operador cast realiza este proceso, es decir convierte datos, variables o expresiones a un

nuevo tipo de dato, su formato es:

Ejemplo:

int (3.1416);

* en este ejemplo se está convirtiendo un float a int, recordar que en este caso ya no se

tendrán los decimales.

Como nota importante este operador resuelve los dos problemas pendientes:

1. El de la división entre enteros.

2. El tipo de dato especifico que requieren las funciones.

En toda división recordar agregar a uno de los dos valores el (.0), solo que los dos

elementos sean variables entonces usar el operador cast con una de ellas.

Se puede usar pow(), directamente con los datos, argumentos o parámetros requeridos , si

estos son numéricos, pero transformándolos con el operador cast.

Page 15: visual_c++

6.- C++BUILDER OPERADOR CAST

Se puede forzar un dato, variable o una expresión a convertirse o cambiarse a un nuevo tipo

de dato.

El operador cast realiza este proceso, es decir convierte datos, variables o expresiones a un

nuevo tipo de dato, su formato es:

Ejemplo:

int (3.1416);

* en este ejemplo se está convirtiendo un float a int, recordar que en este caso ya no se

tendrán los decimales.

Como nota importante este operador resuelve los dos problemas pendientes:

1. El de la división entre enteros.

2. El tipo de dato especifico que requieren las funciones.

En toda división recordar agregar a uno de los dos valores el (.0), solo que los dos

elementos sean variables entonces usar el operador cast con una de ellas.

Se puede usar pow(), directamente con los datos, argumentos o parámetros requeridos , si

estos son numéricos, pero transformándolos con el operador cast.

Esto también va a permitir evaluar expresiones matemáticas de manera mas directa y

sencilla, solo recordando usar un pow() por cada potencia y cada raíz de la ecuación,

ejemplo:

TAREAS PROGRAMACION C++BUILDER :

1.

2.

3.

Page 16: visual_c++

7.- C++BUILDER JERARQUIA DE OPERACIONES

El problema de no tomar en cuenta la jerarquía de los operadores al plantear y resolver

una operación casi siempre conduce a resultados muchas veces equivocados como estos:

Ejemplos:

1.

2. 2+ 3* 4 = 20(incorrecto) = 14 (correcto)

b) si calif1=60 y calif2=80

Recordar siempre, que antes de plantear una formula en un programa se deberá evaluar

contra el siguiente:

Nota: Si se quiere alterar el orden normal de operaciones, entonces usar paréntesis.

Nota: Tampoco es bueno usar paréntesis de mas en una operación, esto solo indica que no

se evalúo bien la formula, como en el siguiente ejemplo;

aquí los paréntesis están de mas, porque por orden de operaciones, multiplicación y

división tienen la misma jerarquía y entonces se resuelven de izquierda a derecha, en otras

palabras ni que falten paréntesis ni que sobren paréntesis.

Page 17: visual_c++

8.- C++BUILDER ENTRADAS/SALIDAS EN PROGRAMACION VISUAL

Entradas o capturas de datos y salidas o despliegues de información o resultados son de los

procesos más comunes en cualquier tipo de problema de información, estos procesos o

instrucciones varían de acuerdo a los lenguajes y ambientes de programación a usar.

El lenguaje y ambiente de programación a utilizar, es de tipo visual, y muchos de los

problemas asociados a entradas y salidas se encuentran ya resueltos por el propio

compilador.

El ambiente de construcción de programas a usar, es el siguiente:

* SOLO CARGARLO EN PANTALLA EJECUTANDO EL C++Builder, QUE SE

ENCUENTRA

EN LA BARRA DE START DE WINDOWS.

Sus elementos básicos son:

1.- La barra de menús (file, edit , etc.);

2.- La barra de herramientas(icono de grabar, run, forma, etc.)

3.- La barra de componentes

Page 18: visual_c++

4.- El Inspector de Objetos

5.- La forma activa o principal

Page 19: visual_c++

9.- C++BUILDER FORM1 ACTIVA O PRINCIPAL

Es sobre esta forma donde se construye el programa y esta forma se convierte en ventana al

momento de ejecutarse el programa.

Es decir será la primera ventana que el usuario ve al momento de ejecutarse el programa, su

nombre es Form1.

Esta forma o ventana es un objeto de C++, y como todos los objetos de C++ y del universo,

la forma o ventana tiene asociados propiedades y eventos.

Propiedades son todas las características particulares que diferencian un objeto de otro

objeto, las propiedades o características mas comunes son forma, tamaño, color, etc., para

objetos en C++, estas propiedades se modifican o individualizan usando el Inspector de

Objetos, que es la parte del programa que las contiene.

También se pueden modificar las propiedades dentro de un programa, usando instrucciones

apropiadas, mismas que llevan el siguiente formato:

nomobjeto→propiedad = nvovalor;

ej.; Form2→Color=clRed;

Eventos, son todos aquellos sucesos de carácter externo que afectan o llaman la atención

del objeto, para estos caso la forma o ventana:

1. Debe tener capacidad de detectar el evento

2. Aun mas importante debe tener capacidad de reaccionar y emitir una respuesta, mensaje

o conducta apropiada a el evento detectado.

Evento es por ejemplo que otro objeto llamado humano, pulse el objeto tecla ESC, o haga

click derecho con el objeto ratón en alguna parte de la ventana , etc. , es en estos casos,

cuando la ventana detecta un evento de estos, la propia forma deberá responder de manera

apropiada.

Esta respuesta no es automática, sino son la serie de instrucciones del lenguaje (o

programa) que los ingenieros de software diseñan(o programan), en otras palabras son los

eventos quienes contendrán los programas.

Es tambien el Inspector de Objetos, quien contiene todos los posibles eventos asociados a la

forma.

Page 20: visual_c++

Para los primeros programas en C++Builder , solo se usaran propiedades sencillas como

color, font, etc. de Form1, y no se usan, de momento los eventos que puede detectar Form1.

Page 21: visual_c++

10.- C++BUILDER PROGRAMAS FORMAS Y COMPONENTES

Un programa o problema de información en C++Builder , no es mas que una o mas formas

o ventanas, donde cada una de ellas contiene elementos u objetos especiales llamados

componentes, dichos componentes C++Builder los proporciona a través de la barra de

componentes.

Es decir toda la interfase que se quiera manejar con el usuario del programa, no consiste

mas que de una colección de componentes agrupados en una forma o ventana.

La colección de componentes que pone a nuestra disposición C++Builder están agrupados

en diversos folder o pestañas o paginas en la barra de componentes, estas categorías

contienen los siguientes componentes:

Standard.- MainMenu, PopupMenu, Label, Edit, Memo, Button, CheckBox, RadioButton,

ListBox, ComboBox, ScrollBar, GroupBox, RadioGroup, Panel.

Win95.- TabControl, PageControl, TreeView, ListView, ImageList, HeaderControl,

RichEdit, StatusBar,TrackBar,ProgressBar,UpDown,HotKey.

Additional.- BitBtn, SpeedButton, MaskEdit, StringGrid, DrawGrid, Image, Shape, Bevel,

ScrollBox.

Data Access.- DataSource, Table, Query, StoredProc, DataBase, Session, BatchMove,

UpdateSQL.

Data Controls.- DBGrid, DBNavigator, DBText, DBEdit, DBMemo, DBImage,

DBListBox, DBComboBox, DBCheckBox,DBRadioGroup, DBLookupListBox,

DBLookupComboBox.

Page 22: visual_c++

Win31.- DBLookupList, DBLookupCombo, TabSet, Outline, Header, TabbedNotebook,

NoteBook.

Dialogs.- OpenDialog, SaveDialog, FontDialog, ColorDialog, PrintDialog,

PrinterSetupDialog, FindDialog, ReplaceDialog.

System.- Timer, PaintBox, FileListBox, DirectoryListBox, DriveComboBox,

FilterComboBox, MediaPlayer, OleContainer, Ddeclientconv, DdclientItem,

Ddeserverconv, DdeserverItem.

QReport.- QuickReport, QRBand, QRGroup, QRDetailLink, QRLabel, QRMemo,

QRDBText, QRDBCalc, QRSysData, QRShape, QRPreview.

ActiveX.- ChartFX.

Para incorporar un componente a una forma solo basta seleccionarlo con un click derecho

en su icono y luego colocar el cursor dentro de la forma en el lugar donde se quiere que

aparezca y volver a hacer un click derecho.

También los componentes son objetos de C++Builder y como tales también tienen

asociados propiedades y eventos, tales como los tiene la forma principal, solo que existen

pequeñas variaciones en cuanto a sus propiedades y eventos propios con respecto a Form1.

Recordar además, que es el Inspector de Objetos en primera instancia quien permite asociar

o modificar propiedades especificas tanto a una forma como a un componente.

Ya en segunda instancia las propiedades de formas y componentes se pueden modificar

también directamente dentro de un programa, usando instrucciones como las ya descritas en

párrafos muy anteriores.

Page 23: visual_c++

Analizaremos ahora los dos primeros componentes, que también se usaran para construir o

diseñar nuestro primer programa en C++Builder y Visual.

Page 24: visual_c++

11.- COMPONENTE LABEL C++BUILDER (Standard)

Este componente se utiliza para desplegar textos o mensajes estáticos dentro de las formas,

textos tales como encabezados, solicitud al usuario del programa para que proporcione

algún dato o información(edad, dame sueldo, etc.), en cierta forma hace las funciones de

printf, cout, writeln, print, display, etc., pero solo cuando se consideran en su parte de

mensajes.

También es un objeto en C++Builder y por tanto tiene asociados sus propias propiedades y

eventos, al mismo tiempo como se está usando dentro del objeto form1, muchas

propiedades que se definan para el objeto Form1, el objeto Label1 las va a heredar.

Si bien es cierto que el objeto se llama Label, pero cuando se ponen dentro de una forma

C++Builder los va numerando automáticamente, si se ponen tres Labels en Form1, ellos se

llaman o simbolizan o se procesan o programan con Label1, Label2, Label3.

Es la propiedad Caption, la que lleva el contenido del mensaje que se quiere desplegar en la

pantalla, solo click derecho a un lado de la propiedad Caption en el Inspector de Objetos,

teniendo seleccionada la caja Label1 en la forma y escribir el texto indicado.

Page 25: visual_c++

12.- COMPONENTE BUTTON C++BUILDER (Standard)

Es el componente principal de la forma, contiene el código principal del programa y su

activación por el usuario provoca que se realicen los principales procesos del problema

planteado (aquí es donde se capturan datos, se realizan operaciones, etc.).

De este componente se maneja su propiedad Caption para etiquetarlo con la palabra ―OK‖ o

―ACEPTAR‖ o ―EXE‖ , y su evento OnClick para activarlo, es en dicho evento donde se

construye el código del programa.

Recordar que aunque no es un componente necesario en los programas, ya que el código se

puede asociar o pegar a cualquier evento de cualquier forma, o componente del programa,

Microsoft ya acostumbro a todos los usuarios al botón OK, de acuerdo, OK.

Este botón también puede activar su evento OnClick, cuando el usuario presione la tecla

<ENTER>, solo poner la propiedad Default en true, en este caso el botón de ordenes, se le

conoce como botón de default.

Igualmente puede activar su evento OnClick cuando el usuario, presione la tecla <ESC>,

solo poner la propiedad Cancel en true, a este caso se le conoce como ―CANCEL

BUTTON‖.

PRACTICA

Construir un primer programa que consiste en un forma que contenga los cinco datos mas

importantes de un automóvil, y uno de esos datos solo deberá aparecer cuando el usuario

haga click en el botón de ejecución o de orden o de OK.

Para este programa se ocupa, una forma, dos componentes labels para encabezados

apropiados al problema, 10 componentes labels para textos y datos, un componente Button.

Para el ultimo componente Label su propiedad Caption se dejara en blanco o vacía para que

sea el usuario del programa quien lo cargue al apretar el botón de ordenes o botón de OK.

Recordar que C++Builder va numerando automáticamente todos los componentes en el

programa en forma consecutiva, es decir al finalizar el diseño del programa se tendrán, los

componentes form1, label1,label2,label3,..button1.

El procedimiento completo para crear y ejecutar el programa es:

3.- Antes de poner el primer componente usar la opción, File Save Project As, aparece la

siguiente ventana:

Page 26: visual_c++

Donde se deberá seleccionar primero, el icono de nuevo folder( arriba a la derecha y tiene

un folder con rayitos), esto es, para crear un nuevo folder o directorio donde quedara

guardado o almacenado el programa, en cuanto se crea el nuevo folder, sobrescribir la

palabra ―new folder‖ que aparece, con el nombre que tendrá el directorio donde quedara

almacenado el programa, escribir por ejemplo ―programa uno‖ ( Windows95 ya permite

que los nombres de directorios y sus archivos ya sean mas largos y no necesariamente del

tipo antiguo de 8.3), al terminar de sobrescribir, la palabra ―programa uno‖ apretar tecla

<ENTER> y esperar un momento a que se cree el directorio.

Ya creado y renombrado el directorio, observar que en la parte inferior de la ventana el

programa ya tiene el nombre de ―Unit1.cpp‖, a un lado esta una caja o botón de ―OPEN‖,

mismo que se deberá apretar y después usar en la misma parte un botón llamado ―SAVE‖

para almacenar ―Unit1.cpp‖ y otra vez usar otro botón ―SAVE‖ para almacenar

―Project1.mak‖.

4.- Ahora ya que se tiene Form1 en pantalla, recordar que se pueden modificar sus

propiedades como color, font, etc. usando el Inspector de Objetos que esta a un lado de la

forma ( se sugiere practicar un poco esto), los cambios que se hacen en el Inspector de

Objetos se van reflejando automáticamente en la forma en pantalla y también en la ventana

que el usuario vera al ejecutarse el programa.

5.- Ahora se selecciona con un click el componente llamado Label en la barra de

componentes y luego poner el cursor dentro de la forma en el lugar donde se quiera que

aparezca el componente, y volver a hacer click con el ratón para que ya aparezca dicho

componente en la forma.

Observar que el componente en la forma, que esté seleccionado ( esto se puede hacer,

usando un click dentro de el componente) se puede arrastrar para cambiarlo de lugar o

posición o hacerlo mas pequeño o mas grande.

Page 27: visual_c++

Como nota también a recordar siempre, un componente o la propia forma, está

seleccionado, si el Inspector de Objetos lo esta referenciando, es decir es el Inspector de

Objetos quien contiene el nombre del componente en la parte de arriba del propio Inspector

de Objetos.

Para cargar o para que despliegue un texto el componente Label1, solo escribir dicho texto

en la cajita que esta a un lado de la propiedad Captión en el Inspector de Objetos, por

ejemplo para el problema, escribir la palabra ―AUTOS ECONOMICOS‖, y recordar que

también esté componente también tiene propiedad font que se puede usar para alterar el tipo

de letra que despliega el componente.

6.-Repetir el procedimiento anterior hasta tener los doce componentes Label bien

acomodados y organizados en la forma y con sus textos correspondientes, solo recordar

dejar el componente Label12 con su propiedad Caption en blanco(usando tecla backspace).

7.- Seleccionar y acomodar ahora un componente Button en la forma y colocarlo en la

esquina inferior derecha, en su propiedad Caption = escribir la palabra ―OK‖.

Recordar que este componente, es quien contiene el código del programa y mas

específicamente es su evento OnClick quien lo contiene y quien además lo activa o lo

ejecuta.

Para añadirle el código(en este ejemplo que cargue el Caption de Label12 al tiempo de

ejecución del programa y por decisión del propio usuario) existen dos maneras:

En el Inspector de Objetos, hacer click en la pestaña o folder llamado event y ahora en

lugar de propiedades el Inspector de Objetos, muestra todos los eventos que el componente

puede detectar(observar y anotarlos), ahora click en la cajita que esta a un lado del evento

llamado OnClick y con este paso aparece el siguiente minieditor de programas de

C++Builder:

Observar que ya trae listo el evento Button1Onclick(), para programarse y es dentro de sus

llaves donde se construye el programa.

Solo escribir dentro de las llaves la instrucción Label12→Caption=―$ 5,000.00‖;

8.- Ahora ya esta lista la forma o programa para ejecutarse, también existen dos maneras:

1.

2. Usar la opción Run que esta arriba en la barra de menús. 3.

4. Usar icono ―run‖ en barra de

herramientas.

Page 28: visual_c++

Nota.- También se puede usar también la primera letra dentro del botón de comando o de

ordenes (OK), para activar las instrucciones o acciones del botón, es decir se puede usar

click en botón o solo pulsar la letra O, para que se ejecute este ultimo procedimiento , solo

poner un símbolo & en el caption del botón antes de la letra O.

El programa ya en ejecución debe ser similar(pero mejor diseñado) al siguiente ejemplo:

Ya que se practicó, la mecánica de creación de programas, resolveremos el problema de

interactividad con el usuario.

Es decir en estos casos es el usuario quien generalmente proporciona los datos para su

procesamiento en el problema, el trabajo del ingeniero de software, es procesarlos y darles

sentido, coherencia y sobre todo eficiencia.

Para esto se ocupan , componentes llamados de ―input‖, ―entrada‖ o ―captura‖, que

permitan al usuario cargar o proporcionar un dato en ellos, dichos componentes son:

Page 29: visual_c++

13.- COMPONENTE EDIT C++BUILDER (Standard)

Este componente es el mas importante componente visual, su función principal es manejar ,

todos los procesos de entrada y salida (input/output) al programa.

En resumen de este componente, se necesita entender lo siguiente:

Este componente Edit, es el equivalente a las variables en cualquier lenguaje de

programación, mas la instrucción de captura o despliegue correspondiente, es decir;

a) En BASIC, Input Edad → Edit1

b) En PASCAL, Read(Ciudad) → Edit2

c) En C, printf(‖%d‖, sueldo) → Edit3

d) En C++, cin.get(nombre,30) → Edit4

e) En Cobol Display metros → Edit5

Ya aclarada su función, es necesario entender primero, que este componente permite

capturar datos y también como en el caso del componente Label desplegar datos, textos,

mensajes o resultados de operaciones de ser necesario, usando la propiedad Text del

componente Edit.

Esta propiedad Text, así como la propiedad Caption en Label, permiten igualarse a muchos

procesos básicos, es decir es fácil igualar Text o Caption a un dato, una variable, otro Text

u Caption, o una expresión algebraica normal, como en los siguientes ejemplos;

Edit2->Text = 5;

Label3->Caption = "PATO";

Edit4->Text = 3 * 6.2 ;

En principio su valor de default es la palabra Edit1 y es en su propiedad Text donde se

modifica, generalmente al principio de un programa se deja en blanco, y al ejecutarse el

programa, el usuario lo llena con los datos solicitados o el programa lo llena con el

resultado de las operaciones.

Page 30: visual_c++

Cuando un usuario lo carga con un dato, recordar que el dato almacenado queda de tipo

texto, no importa lo que haya escrito el usuario.

Para resolver el problema de usar datos numéricos dentro del Text de un componente Edit,

en operaciones matemáticas, solo agregarle a la propiedad Text, las funciones .ToInt() o

.ToDouble(), como se muestra en los siguientes ejemplos.

Edit3->Text= Edit2->Text.ToInt() * 5;

Edit5->Text= 3 * pow( Edit2->Text.ToDouble(), double (4) );

este ultimo es el problema de calcular

En particular, se deberá asociar los Edit con las variables, y solo existirán en principio

cuatro tipo de edits.

Formato Edit Tipo De Dato Ejemplo

Edit→Text String Nombre, Ciudad

Edit→Text[1] Char Grupo, Sexo, Letra

Edit→Text.ToInt() Entera Edad, Año

Edit→Text.ToDouble() Doble Sueldo, Pi

Realizar operaciones algebraicas con los componentes edit.

Recordar que el usuario, usara un componente Edit para almacenar los datos de entrada del

problema, muchas veces estos datos son de tipo numérico, por ejemplo en un componente

Edit se almacena la cantidad de pesos, el precio de un articulo, la edad de una persona, etc.

Solo recordar siempre usar el componente Edit, directamente como una variable

cualquiera(con su método o función correspondiente ) y construir la operación o formula

con los propios componente o cajas edit.

Es decir, por ejemplo, si se pide resolver el problema de multiplicar dos números

cualesquiera, se ocuparan tres ` cajas Edit,(factor1, factor2, producto), es en estos casos

donde se usan tres componentes Edit como si fuesen tres variables simples directamente.

Page 31: visual_c++

Ya en programa se ocupan 3 componentes Label para títulos (Multiplicando, Multiplicador,

Multiplicación), tres componentes Edit para los datos (dos proporcionados por el usuario y

uno calculado por el programa) y un componente Button(OK) para realizar la operación.

El problema se resuelve de la siguiente manera;

Código y Pantalla de salida es ;

void __fastcall TForm1::Button1Click(TObject *Sender)

Edit3->Text=Edit1->Text.ToInt() * Edit2->Text.ToInt();

notas:

Conversión de datos o variables numéricas a Texto de un componente Edit.

Para resolver este problema, donde se tiene una variable numérica cargada, con un

resultado o dato numérico y se pretende mandarla a un componente Edit o Label para su

despliegue, existen dos manera sencillas, estas son;

// área de declaración

int alfa;

double beta;

// área de captura

alfa = Edit1->Text.ToInt();

Page 32: visual_c++

beta = Edit2->Text.ToDouble();

// área de operaciones

alfa = alfa+3;

beta = beta *5.1;

// área de despliegue y conversión de números a strings o Edits

Label3->Caption = AnsiString(alfa);

Edit4->Text = AnsiString(beta);

Como se observa se puede transferir variables numéricas tanto a Label

como a Edit vía la clase AnsiString.

<code>

sin embargo es mas sencillo usar el método que se usa en el programa dado

de ejemplo para la multiplicación, es decir considerar los componentes

Edit como variables normales, y usar:

<code>

Edit1->Text=Edit5->Text.ToInt(() * Edit2 etc - Edit50 etc

Recordar que es mas correcto usar propiedad Text y métodos ToInt() y ToDouble()), y

cargar directamente la caja del Edit resultado.

De nuevo, Edit→Text o Label→Caption permiten que se igualen a una variable, un dato, o

una expresión, es decir es valido;

Para el caso de resultados decimales , la salida incluye todo el conjunto de decimales

asociados a un tipo double(muchos ceros), para resolver este problema se pueden usar

directamente algunos de los métodos asociados a la clase AnsiString , por ejemplo uno de

esos métodos es;

FormatFloat(―string de formato‖, var double);

La string de formato contiene una serie de simbolos literales que se utilizan para darle el

formato de salida deseado, esto simbolos o constantes literales son;

Const. Lit. Significado

0(cero) Rellena con 0(ceros) todas las posiciones indicadas, ejemplo ―0000.00‖ para el

numeró 23.4 la string de salida seria 0023.40

Page 33: visual_c++

# Constante muy usada para formato de valores numéricos, esta constante solo despliega el

valor numérico normal.

. Se utiliza para separar la parte entera de la parte decimal.

,(coma) Se utiliza para separar el valor numérico en

UNIDADes de millar.

E+, E-, e+, e- Se utilizan para convertir a notación científica exponencial el valor de salida.

Notas;

El valor de salida es redondeado a tantos decimales como 0s, o #s, existan en la string de

formato.

Si la string de formato no incluye un punto decimal, entonces el resultado es redondeado al

valor entero mas cercano.

ejemplo;

button1click(---){

// área de declaración

double alfa;

// captura y conversión

alfa = Edit1->Text.ToDouble();

// operaciones

alfa = alfa / 3.1416 ;

// conversión y despliegue

Edit2->Text= FormatFloat("###,###.##", alfa);

}

También es valido usar FormatFloat() con lo visto en Edit, es decir es valido y mas

correcto;

Edit5->Text= FormatFloat("###.##", Edit3->Text.ToInt() * 3.1416);

Page 34: visual_c++

En resumen, este componente Edit, es el componente mas importante y elemental en todo

problema que involucre el procesamiento de datos en ambientes visuales, se debe

acostumbrar a considerarse como un elemento importante en cualquier problema visual, y

acostumbrarse a procesarlo como si fuese una variable normal cualesquiera.

Se construye y resuelve el segundo programa del modelo de solución del área del triángulo.

Para crear y diseñar la forma y sus componentes se ocupa, una forma, seis labels, tres edits

y un Button, quedando así;

a) Pantalla de diseño

b)Programa

El código o miniprograma ( es miniprograma porque no se tiene que programar mucho de

la pantalla), solo diseñarla, y dentro del evento OnClick del componente Button, queda así;

void __fastcall TForm1::Button1Click(TObject *Sender)

Edit3->Text=FormatFloat("###.##",Edit1->Text.ToDouble() *

Edit2->Text.ToDouble()/ 2 );

c) Pantalla de ejecución o de salida

Page 35: visual_c++

Recordar que cuando se capturen los datos de base y altura, no dejar espacios en blanco

antes del primer numero o se darán problemas y errores de conversión a valores numéricos.

Para resolver mejor este problema de formatos mas adecuados para captura de datos, se

usaran nuevos componentes que se analizan mas adelante.

TAREAS PROGRAMACION C++BUILDER

1.- CONVERTIR A PROGRAMAS TODOS LOS PROBLEMAS VISTOS EN EL

MODELO DE SOLUCION.

Page 36: visual_c++

14.- C++BUILDER COMPONENTE MaskEdit (Adicional)

Este componente es muy similar en su uso al componente Edit, excepto que proporciona

una mascara especializada para el formato de datos, es decir se puede usar para que el

usuario proporcione datos con formatos bien definidos, como son valores numéricos que

incluyan puntos y comas por ejemplo 3,345.87, o que incluyan símbolos como el de $, o

para el caso de fechas que lleven su propio separador como por ejemplo 02/28/97.

También se puede usar, para asegurarse que el dato proporcionado por el usuario, solo

incluya números, o solo contenga letras, etc.

Para darle formato al dato que el usuario debe proporcionar solo hacer dobleclick a un lado

de la propiedad EditMask en el Inspector de Objetos y esto nos da el siguiente minieditor

de datos:

* Observar en la ventana derecha, algunos ejemplos de ―mascaras de edición‖.

* Es en la ventanilla arriba a la izquierda donde se colocan los caracteres especiales de

edición ( en el ejemplo se están usando, $, #, puntos y comas).

* Es en la ventanilla abajo a la izquierda donde se pueden proporcionar algunos datos de

prueba, para probar el formato diseñado.

* Recordar que este formato es para capturas, no para despliegues, puesto que para este

caso (despliegue) se usa FormatFloat().

* No olvide usar el botón OK, cuando se termine de construir la mascara de edición.

Page 37: visual_c++

* Los principales caracteres especiales de edición son:

'!' Caracteres opcionales se despliegan en blanco

'>' Caracteres que siguen deben ser mayúsculas

'<' Caracteres que siguen deben ser minúsculas

'L' Requiere una letra en esta posición

'l' Permite una letra es esta posición pero no la requiere

'A' Requiere un alfanumérico en esta posición

'a' Permite un alfanumérico pero no lo requiere

'0' Requiere un numero en esta posición

'9' Permite un numero pero no lo requiere

'#' Permite un numero y también signos mas y menos

':' Separa horas:minutos:segundos

'/' Separa meses días años

';' Se utiliza para separar los tres campos o partes de una mascara

'_' inserta espacios en blanco en el texto

Cualquier otro carácter que no aparezca en la tabla anterior, puede aparecer en una mascara,

pero solo se tomara en cuenta como una literal cualesquiera, es decir son insertados

automáticamente y el cursor los brinca.

El segundo campo o parte de una mascara es un carácter simple que indica que carácter

literal debe ser incluido como parte del texto del componente MaskEdit, por ejemplo

(000)_000-0000;0;*,

Un 0 en el segundo campo indica que solo deben capturarse los diez dígitos marcados con

O, en lugar de los 14 que tiene la mascara.

Page 38: visual_c++

El tercer campo de la mascara, es el carácter que se quiera que aparezca en lugar de

espacios en blancos.

Nota: para procesarlo usar solo Text no Text.ToDouble()

TAREAS PROGRAMACION C++BUILDER

1.- REEDITAR Y CORREGIR TODOS LOS PROBLEMAS HECHOS Y QUE

CONTENGAN EL COMPONENTE EN CAPTURAS NUMERICAS.

Page 39: visual_c++

15.- COMPONENTE ComboBox C++BUILDER ( Standard )

Existen muchas ocasiones en donde el usuario del programa tiene que proporcionar datos

que provienen de un conjunto finito y muy pequeño de posibles respuestas, esto significa

que cada vez que se ejecute el programa, el usuario estará proporcionando las mismas

respuestas.

Ejemplo de esta clase de datos, son por ejemplos Municipio en BC, las posibles respuestas

solo son (Tecate, Tijuana, Mexicali, Ensenada, Rosarito), otro ejemplo es Sexo (Hombre,

Mujer), etc.

Para situaciones como esta, existen componentes que permiten programar por adelantado

las posibles respuestas, y el usuario solo debe seleccionar la respuesta apropiada , en lugar

de tener que escribirla.

Este componente ComboBox nos permite definir en primera instancia un conjunto de datos

o valores respuestas asociados a una caja de edición cualesquiera, así ahora el usuario

tendrá la oport

UNIDAD de seleccionar un dato del conjunto de datos o respuestas ya predefinido.

Este componente ComboBox tiene dos partes, una parte de encabezado, para poner el

nombre del grupo de respuestas( por ejemplo municipios, sexo, etc.), que se carga usando la

propiedad Text del componente.

La segunda parte es la lista de opciones o respuestas que se debe cargar al tiempo de diseño

de la ventana, en el momento de poner el componente ComboBox1, solo hacer dobleclick a

un lado de la propiedad Items en el Inspector de objetos y sale el siguiente editor de strings:

Page 40: visual_c++

Al momento de ejecución del programa, toda la lista de respuestas, estarán a la vista del

usuario, para que este ultimo la seleccione.

Recordar que el usuario al momento de ejecución del programa, solo vera el encabezado,

para seleccionar su respuesta deberá apretar la flechita que esta a un lado del encabezado.

Para procesar este componente:

Usar su popiedad Text de manera normal, es decir si la respuesta se ocupa en string,

Solo usar ComboBox1→Text, o si la respuesta se quiere numerica solo convertir Text a

ToInt() o ToDouble(), ej, ComboBox1→Text.ToDouble().

TAREAS PROGRAMACION C++BUILDER

1.- REEDITAR LOS PROBLEMAS YA RESUELTOS, AGREGANDO ESTE

COMPONENTE EN LOS CASOS DE CAPTURAS QUE LO PUEDEN ADMITIR (

CAPTURAS DONDE YA SE TIENEN LAS ENTRADAS SELECCIONADAS O

CONOCIDAS DE ANTEMANO).

Page 41: visual_c++

16.- COMPONENTES DE AGRUPAMIENTO C++BUILDER

Como ya se empieza a notar en las aplicaciones construidas, la cantidad de datos e

información empiezan a amontonarse en la ventana simple que se ha venido construyendo.

Para resolver este problema, se tienen dos métodos, el primero de ellos consiste de una

serie de componentes que permiten agrupar datos o información(resultados) de una manera

mas lógica y estética.

El segundo método consiste de construir y trabajar con dos o mas ventanas a la vez.

Se empieza por el primero método , es decir componentes de agrupamiento.

Page 42: visual_c++

17.- C++BUILDER COMPONENTE PANEL ( Standard y atrás flecha negra)

Es el componente mas sencillo y común de agrupamiento, se utiliza para poner un panel o

un cuadro o marco dentro de una ventana.

El componente Panel1 puede contener una toda una serie lógica de otros componentes.

Solo se deberá recordar colocar primero todos los paneles en la forma y encima de ellos los

componentes que contendrán.

Este componente también tiene una serie de propiedades que le dan una mejor presentación

usando las propiedades BevelInner, BevelOuter, BevelWidth, y BorderWidth.

Es decir se puede dividir una sola ventana en varias partes, por ejemplo en un panel se

ponen los componentes donde se capturan los datos de un problema junto con el botón de

OK, y en otro panel se construye la salida, por ejemplo se crea un panel para capturar los

datos de un empleado incluyendo sueldo diario y días trabajados y un segundo panel

contiene su cheque semanal de pago ( problema sugerido también ).

Para modificar programas construidos sin paneles, el procedimiento para agregarlos es:

1.- Mover todos los componentes abajo en la ventana.

2.- Colocar el panel en su posicion.

3.- Click en Componente a relocalizar.

4.- DobleClick, Copy

5.- DobleClick, Cut

6.- Click dentro del panel, donde se quiere el componente

7.- DobleClick, Paste

TAREAS PROGRAMACION C++BUILDER

1.- REEDITAR E INCLUIR ESTE COMPONENTE PANEL, EN TODOS LOS

PROGRAMAS IMPARES HECHOS.

Page 43: visual_c++

18.- BORLAND C++BUILDER COMPONENTE GROUPBOX (Standard)

Este componente es otra forma standard de agrupamiento de componentes de programas en

Windows, se usa para agrupar componentes relacionados dentro de una forma.

También se utiliza para separar áreas lógicas dentro de una ventana de Windows.

El texto que identifica el propósito general del grupo se escribe dentro de la propiedad

Caption en el Inspector de Objetos, teniendo seleccionado este componente GroupBox.

Además de sus propiedades, métodos y eventos propios, como todos los componentes de

este tipo, tiene o hereda las propiedades, métodos y eventos de todos los controles generales

de tipo Windows.

Es muy similar al componente panel, excepto que incluye una pestaña que permite dejar

mas claro, el proposito del grupo.

TAREAS PROGRAMACION C++BUILDER

1.- REEDITAR E INCLUIR ESTE COMPONENTE GroupBox PARA TODOS LOS

PROBLEMAS PARES YA CONSTRUIDOS

Page 44: visual_c++

19.- VENTANAS EN C++Builder

El siguiente problema común, con el manejo de programas en C++Builder, es el de poder

crear, controlar y administrar mas de dos formas o ventanas a la vez.

Lo primero que hay que entender para poder resolver este problema es que en C++Builder,

cada forma o ventana tiene asociado ciertos recursos, ademas de los componentes que

contiene, tambien una serie de recursos especiales, en general, la forma, los recursos y los

objetos hijos o componentes, se encuentran relacionados todos ellos, en un archivo

especial, llamado ―Unit1.cpp‖.

Es decir si se crea una segunda forma o ventana,, dicha form2, junto con sus recursos,

componentes, etc., se encontraría contenida en el archivo llamado ―Unit2.cpp‖ y así

sucesivamente.

Pero recordar y también tomar en cuenta, que los componentes de esta segunda forma,

también se simbolizarían y procesaran normalmente, es decir ellos también serán (Edit1,

Label5, etc.).

Para crear una segunda forma (form2), solo usar el icono de new Form que se

encuentra en la barra de herramientas, recordar además que los otros iconos de dicha barra

sirven para estarse intercambiando entre formas y Unit (código fuente).

La segunda forma se construye normalmente, pero queda el problema de donde queda el

botón de ordenes, le respuesta es, se pone en la primera forma o ventana principal del

programa.

El proceso en este botón es similar a todos los programas anteriores, es decir primero se

capturan los datos ( pantalla o ventana de captura),luego se resuelve las operaciones y luego

traspasar los datos a los componentes de la segunda forma o ventana.

Para poder realizar este procesos, solo usar ahora un nuevo formato de trabajo con todos los

componentes usados, para que ahora incluyan la forma que lo contiene, es decir se usa

ahora ;

NOMFORMA→NOMCOMPONENTE→NOMPROPIEDAD

como se observa, procesar los elementos de dos ventanas, es sencillo pero además existen

ciertas condiciones que deberán cuidarse para que estos procesos funcionen, estas

condiciones son:

Para incluir la

Page 45: visual_c++

UNIDAD (Unit) de la otra forma o ventana, solo tener seleccionada o al frente la ventana

que llama, y usar la orden File, Include Unit, que se encuentra en arriba en la barra de

menú, junto con el Run, Compile, etc., al dar esta orden (File Include Unit) sale una lista

con todas las

UNIDADes (Unit) que ya se diseñaron, seleccionar la apropiada y ya se incluirá

automáticamente en la forma o ventana actual.

Si una ventana o forma referencia dos o mas formas diferentes, entonces usar la orden File,

Include Unit, tantas veces como sea necesario.

Este procedimiento permite construir programas con dos o mas ventanas, pero el problema

es que todas ellas estarán a la vista del usuario, para resolver este problema, el

procedimiento mas sencillo es poner en False la propiedad visible de la forma o ventana

que se quiera tener oculta y poner cualquiera de las siguientes instrucciones en el código

del programa para que aparezcan o desaparezcan a voluntad;

1. Form2->Visible = true;

2.- Form2->Show(); // similar a la anterior(pero mas corta)

3) Form2->ShowModal(); // no permite accesar la primera ventana, hasta

que se cierra(X) la segunda ventana.

Programación Avanzada permite crear y destruir ventanas y componentes al tiempo de

ejecución del programa, pero estos conocimientos, no forman parte del ámbito de este libro.

Si se tienen formas de mas, o formas que ya no se quieren usar o de plano mal construidas

se pueden remover del proyecto usando el icono (Remove File from Project) de la barra

de herramientas, y de la ventanilla que aparece seleccionar la

UNIDAD que contiene la forma que se quiere eliminar.

TAREAS PROGRAMACION C++BUILDER

1.- REEDITAR TRES CUALESQUIERA DE LOS PROBLEMA YA RESUELTOS

PARA QUE INCLUYAN CUANDO MENOS DOS VENTANAS

2.- CONSTRUIR UN PROGRAMA DONDE LA PRIMERA VENTANA CAPTURE LOS

DATOS DE UN ALUMNO INCLUYENDO LAS CALIFICACIONES DE 3 MATERIAS

DIFERENTES Y UNA SEGUNDA VENTANA DESPLIEGA UN REPORTE DE

CALIFICACIONES DEL ALUMNO INCLUYENDO PROMEDIO FINAL.

Page 46: visual_c++

UNIDAD II C++BUILDER INSTRUCCIONES DE CONTROL DE PROGRAMA

1.- C++BUILDER INTRODUCCION

Instrucciones de control de programa permiten alterar la secuencia normal de ejecución de

un programa.

Estas instrucciones se dividen en tres grandes categorías:

Instrucciones Condicionales que en C++Builder se implementan con las instrucciones if() y

switch().

Instrucciones de ciclos con: for, while, do while.

Instrucción de salto incondicional: goto

Muchas de ellas con sus correspondientes componentes visuales.

Page 47: visual_c++

2.- C++BUILDER INSTRUCCIONES CONDICIONALES

Una de las mas poderosas características de cualquier computador es la capacidad que tiene

de tomar decisiones.

Es decir al comparar dos alternativas diferentes el computador puede tomar una decisión,

basándose en la evaluación que hace de alguna condición.

desplegar ―rico‖

desplegar ―pobre‖

fin-si

b)

imprime mujer

imprime hombre

fin-si

De los ejemplos observar que los caminos por el computador dependerán de la evaluación

que el computador hace con y de la condición.

Todo lenguaje de programacion debe tener instrucciones que permitan formar condiciones

e instrucciones que pueden evaluar esas condiciones.

Para propósito de construcción visual de programas, este tipo de instrucciones

condicionales se usaran en forma interna es decir son parte del código del programa que se

empotra dentro de los eventos de componentes, no son formas o componentes en si.

Pero recordar que lenguajes visuales de igual forma tienen componentes que permiten del

mismo modo al usuario tomar decisiones, incluso directamente en pantalla, es decir existen

los llamados componentes de selección y decisión.

El formato general de una instrucción condicional es:

Page 48: visual_c++

Como se observa son cuatro partes bien diferenciadas entre si;

* La propia instrucción condicional en si * La condición * El grupo cierto de instrucciones

* El grupo falso de instrucciones

Cuando el computador evalúa una condición,, el resultado de esa evaluación solo es

evaluado de dos maneras o la condición es CIERTA o la condición es FALSA.

Esto dependerá del valor que tenga asignado o que se haya capturado para la variable que

esta en la condición, por ejemplo si se capturo 6000 en sueldo en el ejemplo a), entonces el

computador indicaría que la condición es CIERTA, pero en otro caso, si a la variable

sueldo primero se le asigno un valor de 250 entonces el computador indicaría que la

condición, es FALSA.

Ya dependiendo del resultado de la evaluación, el computador ejecuta las instrucciones

contenidas en la parte CIERTA o en la parte FALSA de la condición.

Empezaremos el análisis por la CONDICION.

Page 49: visual_c++

3.- C++BUILDER CONDICIONES SIMPLES

En general todas las condiciones simples se forman con;

variables operadores relaciónales constante o var.

sexo = m

sueldo > 300,000

Una condición simple se define como el conjunto de variables y/o constantes unidas por los

llamados operadores relaciónales.

Los operadores relaciónales que reconoce el lenguaje C++Builder son:

Operador Significado

'<' Menor que

'>=' Mayor o igual que.

'⇐' Menor o igual que.

'!=' No es igual que, o es diferente que.

Observar y tener cuidado sobre todo con el operador de igualdad ' = ', y el operador

relacional de comparación por igualdad '== ', es decir:

sueldo = 500 Se esta pidiendo cargar o asignar la variable sueldo con el valor 500

sueldo == 500 Se esta pidiendo que se compare el valor o dato que ya esta en la variable

sueldo, contra el numero 500.

Solo este ultimo formato es valido dentro de una condición, en una instrucción condicional.

Page 50: visual_c++

4.- INSTRUCCION IF C++BUILDER

Es la instrucción condicional mas usada en los diversos lenguajes de programación, su

formato completo y de trabajo en C++Builder es :

Primus.- Observar donde van y donde no van los puntos y comas;

Secundus.- La condición van entre paréntesis ;

Tertius.- Si un if no ocupa un grupo falso de instrucciones, entonces no se pone el else, y la

llave antes del else si terminaría con punto y coma.

Ejemplos:

if (Edit1→Text>==―500‖)

else

{ Edit2→Text=―Pobre‖;};

Solo recordar que en C++Builder es mas fácil comparar datos de tipo string(Texto) que

numéricos, si se quiere hacer una comparación entre números solo comparar el Edit

correspondiente junto con su método(ToInt o ToDouble) y el dato numérico.

TAREAS PROGRAMACION C++BUILDER

1.- Capturar un numero cualesquiera e informar si es o no es mayor de 100

2.- Capturar un numero entero cualesquiera e informar si es o no es múltiplo de 4 ( recordar

el operador mod(%), analizado en el tema de operadores aritméticos).

3.- Capturar los cinco datos mas importantes de un Empleado, incluyendo el sueldo diario y

los días trabajados esto en un panel, desplegarle su cheque semanal en un segundo panel

solo si ganó mas de $500.00 en la semana, en caso contrario desplegarle un bono de

despensa semanal de $150.00 en un tercer panel.

4.- Capturar los datos mas importantes de un estudiante incluyendo tres calificaciones, todo

esto en una ventana, una segunda ventana que contiene una boleta de calificaciones es

llamada si el estudiante es de la carrera de medicina, en caso contrario una tercera ventana

despliega un oficio citando a los padres del estudiante a una platica amistosa con los

maestros dela escuela.

Page 51: visual_c++

5.- Capturar los datos mas importantes de un producto cualesquiera, incluyendo cantidad,

precio, etc., desplegar una orden de compra, solo si el producto es de origen nacional, en

caso contrario no hacer nada.

Page 52: visual_c++

5.- CONDICIONES COMPUESTAS C++BUILDER

En muchas ocasiones es necesario presentar mas de una condición para su evaluación al

computador.

Por ejemplo que el computador muestre la boleta de un alumno, si este estudia la carrera de

medicina y su promedio de calificaciones es mayor de 70.

Una condición compuesta se define como dos o mas condiciones simples unidas por los

llamados operadores lógicos.

Los operadores lógicos que C++Builder reconoce son;

operador significado

&& y

! NO

Para que el computador evalúe como CIERTA una condición compuesta que contiene el

operador lógico ―y‖, las dos condiciones simples deben ser ciertas.

Para que el computador evalúe como CIERTA una condición compuesta que contiene el

operador lógico ―o‖, basta con que una de las condiciones simples sea cierta.

La cantidad total de casos posibles cuando se unen dos o mas condiciones simples esta dada

por la relación donde n = cantidad de condiciones, la primera mitad de ellos ciertos y la

segunda mitad falsos.

Ejemplo, si formamos una condiciona compuesta con dos condiciones simples y el

operador lógico ―y‖, la cantidad total de casos posibles serian , y se puede construir

la siguiente tabla de verdad.

Tabla de verdad con ―y‖

1cs 2cs Eval

Page 53: visual_c++

C C C

C F F

F C F

F F F

La evaluación final, se obtiene usando la regla anteriormente descrita para una condición

compuesta, que contiene el operador ' y '.

Esta tabla significa lo siguiente;

1.- Cualquiera que san la cantidad de datos procesados,, siempre caerá en uno de estos

cuatro posibles casos.

La tabla de verdad para una condición compuesta con ―O‖ es la sig:

1cs 2cs Eval

C C C

C F C

F C C

F F F

Como se observa, una condición compuesta con ' O ', es menos restrictiva, o el 75% de los

casos terminarían ejecutando el grupo CIERTO de instrucciones de la instrucción

condicional.

Construir una tabla de verdad para una condición compuesta de tres o mas condiciones

simples, es también tarea sencilla, solo recordar que;

1.- La cantidad posible de casos es casos posibles, la mitad empiezan con Cierto y la

otra mitad empiezan c con falso.

Page 54: visual_c++

2.- Para evaluar esta condición triple, primero se evalúan las dos primeras incluyendo su

operador, bajo las reglas ya descritas y luego se evalúa, el resultado parcial contra la ultima

condición, y ultimo operador, para obtener la evaluación final.

Ejemplo una condición compuesta de tres condiciones simples, donde el primer operador

lógico es el ' y ' y el segundo operador lógico es el ' O ', daría la siguiente tabla de verdad.

1cs 'y' 2cs Eva Parcial 'o' 3cs Eva final

C C c C c

C C c F c

C F f C c

C F f F f

F C f C c

F C f F f

F F f C c

F F f F f

En la practica, cada condición simple debe ir encerrada en su propio paréntesis y las dos

condiciones simples también deben encerrarse entre sus propios paréntesis, como en el

siguiente ejemplo;

// se supone que edit1 es el sueldo y edit2 el departamento

// donde trabaja un empleado

if((Edit1->Text.ToDouble()> 500)%%(Edit2->Text=="VENTAS") )

{ // aquí se construye una panel o ventana

// por ejemplo que despliegue su cheque semanal }

{ // aquí se construye o despliega un panel o ventana // que despliegue

por ejemplo un bono de despensa

// o un oficio de motivación } ;

Page 55: visual_c++

* Recordar, cada condición simple debe estar entre paréntesis y las dos condiciones simples

también deben estar entre paréntesis.

* Observar donde se deben incluir los puntos y comas y donde no se deben incluir los

puntos y comas.

TAREAS PROGRAMACION C++BUILDER

1.- Construir un programa que capture un numero cualesquiera e informe si es o no es

mayor de 50 y múltiplo de tres. ( solo escribir el mensaje de respuesta de manera muy clara

y esto resuelve el problema )

2.- Construir un programa que indique si un numero es un par positivo.

3.- Capturar los datos de un producto incluyendo su cantidad en existencia, construir un

panel que despliegue una orden de compra si la cantidad en existencia del producto es

menor que el punto de reorden, o si el origen del producto es nacional.

4.- Construir el programa del ejemplo del empleado, pero construirlo con tres ventanas, la

del empleado, la del cheque y la del bono.

Page 56: visual_c++

6.- INSTRUCCION SWITCH C++BUILDER

También existen ocasiones o programas donde se exige evaluar muchas condiciones a la

vez, en estos casos, o se usan una condición compuesta muy grande o se debe intentar

convertir el problema a uno que se pueda resolver usando la instrucción switch();

La instrucción switch() es una instrucción de decisión múltiple, donde el compilador prueba

o busca el valor contenido en una variable contra una lista de constantes ints o chars,

cuando el computador encuentra el valor de igualdad entre variable y constante, entonces

ejecuta el grupo de instrucciones asociados a dicha constante, si no encuentra el valor de

igualdad entre variable y constante, entonces ejecuta un grupo de instrucciones asociados a

un default, aunque este ultimo es opcional.

El formato de esta instrucción es el siguiente;

capturar o asignar variable de condición;

{

};

Recordar que la propiedad Text de cualquier componente, puede usar o accesar cualquier

[posición o carácter] usando los corchetes por ejemplo;

Label3→Caption = Edit4→Text[2]; pasa solo la 'u' al caption

Mejor un ejemplo practico;

void __fastcall TForm1::Button1Click(TObject *Sender)

{

modulo de switch { }; } ——————————————– Notas: 1.- Solo se puede usar

como variable de condición una variable entera o variable char. 2.- Se esta usando como

variable de condición, solo la primera letra o carácter de la caja de edición, que es

equivalente a una variable char. 3.- Observar que usando corchetes ej. [posición] en la

propiedad Text, se puede referenciar o procesar cualquier carácter dentro del Texto. 4.-

Las constantes que estamos buscando y comparando son de tipo char, por eso se deben

encerrar entre apóstrofes ( ' ). 5.- Si se quiere resolver el problema de mayúsculas o

minúsculas en el teclado, observar que se usan dos case, pero con un solo break; 6.-

Recordar que switch() solo trabaja con constantes y variables de tipo char o int, en este

ultimo caso; Usar switch(Edit1→Text.ToInt() ) Y en los case poner la constante numérica,

Page 57: visual_c++

sin apóstrofes, es decir por ejemplo case 5: Edit3→Text=―camello‖; break; En particular,

instrucciones de tipo switch() se utilizaban para construir programas de selección de

menús, donde al usuario se le planteaban dos o tres problemas distintos y el propio usuario

seleccionaba cual de ellos quería ejecutarse. TAREAS PROGRAMACION C++BUILDER

1.- Construir una ventana que contenga el siguiente menú ———————— 1. conversión

de pesos a dólares 2. conversión de libras a kilogramos 3. conversión de kilómetros a

millas 4. fin de menú ————————— seleccionar opción [ ] ←- Este es el edit del

switch(). Para resolver este programa, primero diseñar las cuatro formas o ventanas que

se ocupan, y en la primera forma que contiene el menú para el usuario, programar el

evento onclick del Button de ordenes con la instrucción switch(), los case solo contienen

código para llamar o poner a la vista del usuario la ventana o forma respectiva. Y además

recordar poner en cada ventana de solución de un problema un botón de orden, con código

de regreso a la ventana de menú, solo escribir en el Caption de este botón la palabra

[menú] y en su evento OnClick ocultar la ventana de problema y poner visible la ventana o

forma del menú. 2.- Construir un programa que capture un deporte y despliegue dos

implementos deportivos apropiados. 3.- Evaluar cualquier función vista para cuando x

=3,-4, 5

Page 58: visual_c++

7.- C++BUILDER COMPONENTES VISUALES DE SELECCION Y DECISIÓN

Las instrucciones if y switch(), nos permiten tomar decisiones o realizar seleccionase

dentro del código de un programa.

C++Builder proporciona una serie de componentes visuales que permiten al usuario, no al

programador, tomar decisiones en pantalla, el programador solo se encarga de implantar

código adecuado a la decisión tomada por el usuario.

Page 59: visual_c++

8.- C++BUILDER COMPONENTE CheckBox (Standard)

El componente CheckBox, permite seleccionar una opción al usuario del programa o tomar

una decisión, directamente en pantalla.

Es la propiedad Text del componente donde se escribe sentido de la selección ej.;

En los ejemplos, los componentes checkbox, son las cajas donde el usuario toma un

decisión (ej. 3) o realiza una selección (ej. 1,2)

Existen dos maneras de programar este componente:

1. Cuando el usuario selecciona un checkbox la propiedad Checked refleja esta decisión

quedando cargada con las constantes true o false, en estos casos solo validar con un if por

cada CheckBox dentro de nuestro botón de ordenes, el estado de dicha propiedad.

ej.;

if ( CheckBox5→Checked == true){código};

if (CheckBox2→Checked = = true){código);

Page 60: visual_c++

1. Para el ejemplo c) el botón de ordenes en la forma o ventana respectiva usando el método

anterior , contendría 3 ifs, uno para construir boleta otro para construir citatorio y otro para

construir un diploma.

2. El segundo método para programar el componente, involucra el evento OnClick de este

componente CheckBox, este evento OnClick es activado automáticamente en cuanto el

usuario realiza o marca o toma su selección, es claro que si no se programa este evento el

usuario no observara ningún proceso, sino que tendrá que indicar que ya hizo su decisión,

apretando el botón de OK.

Pero si se programa el evento OnClick de este componente con el código adecuado, ni se

tendrá que agregar un botón OK, ni se ocupara usar un if(Checked), porque el usuario ya

indico cual es su decisión o selección.

Recordar que para programar este evento OnClick, solo hacer un dobleclick, dentro del

componente.

Este método es el mejor porque evita código de mas y cada componente solo tiene asociado

el código que ocupa.

TAREAS PROGRAMACION C++BUILDER

1.- Evaluar la función para xà 2,-5, 8 (usar un CheckBox por cada valor de

x, y programar cada evento OnClick de cada CheckBox con la operación correspondiente y

el despliegue del resultado).

2.- Construir un panel con los datos de un automóvil, un segundo panel muestra un plan de

financiamiento a dos años y un tercer panel muestra un plan de financiamiento a tres años. (

son dos checkbox en el primer panel y no hay botón de ok).

3.- Construir el programa de menú, que se dejo en el tema de instrucción switch(). ( aquí no

se ocupa switch() ni pedir la opción, ni botón de ok, solo un CheckBox programado a un

lado de cada opción del menú).

Page 61: visual_c++

9.- C++BUILDER COMPONENTE RadioButton ( Standard )

Se utilizan para presentar al usuario un conjunto de opciones mutuamente excluyentes entre

si, es decir si el usuario selecciona un componente RadioButton todos los demás

componentes RadioButton en la forma, se desmarcan solos, o se deseleccionan solos, como

mejor se entienda.

Es su propiedad Caption donde se pone el texto que identifica el propósito del botón, es su

propiedad Checked quien refleja el cambio( True , False ),también su evento onclick es

activado automáticamente cada vez que es seleccionado el RadioButton por el usuario.

Recordar también que cuando el usuario selecciona un RadioButton, todos los demás

RadioButton en el objeto(forma o ventana) son deseleccionados automáticamente, esto es

por que dos RadioButton son mutuamente excluyentes entre si.

Esta ultima situación deberá resolverse por parte del programador, es decir se supone un

programa donde el usuario debe seleccionar uno de entre dos sexos y uno de entre cinco

municipios, en este caso se ocupan ocho RadioButton, pero como todos son mutuamente

excluyentes entre si, cuando el usuario seleccione uno de ellos, todos los demás se

desmarcaran automáticamente.

Para resolver este problema se deberá usar los ya ampliamente conocidos y practicados

componentes de agrupamiento, como son el componente Panel y el componente GroupBox.

Es decir se deberá encerrar en su propio panel o GroupBox todos los RadioButton lógicos,

es decir en un Panel los de sexo, en otro Panel los de municipios, etc.

De esta manera C++Builder los evalúa por separado y se puede tener seleccionado un

RadioButton en cada Panel.

TAREAS PROGRAMACION C++BUILDER

1.- Diseñar y construir tres problemas similares a los resueltos con el componente

CheckBox.

Page 62: visual_c++

13.- C++BUILDER Ciclo FOR

Instrucciones para ciclos, resuelven el problema de repetir todo el programa, o cierta parte

del programa mas de una vez.

Este ciclo es uno de los mas usados para repetir una secuencia de instrucciones, sobre todo

cuando se conoce la cantidad exacta de veces que se quiere que se ejecute una instrucción

simple o compuesta.

En su forma simple la inicialización es una instrucción de asignación que carga la variable

de control de ciclo con un valor inicial.

La condición es una expresión relacional que evalúa la variable de control de ciclo contra

un valor final o de parada que determina cuando debe acabar el ciclo.

El incremento define la manera en que la variable de control de ciclo debe cambiar cada

vez que el computador repite un ciclo.

Se deben separar esos 3 argumentos con punto y coma ;

Casos Particulares;

1.- El ciclo comienza en uno y se incrementa de uno en uno, este es el caso mas general.

2.- Pero el valor inicial puede se diferente de uno, ejemplo;

for(x=5;x⇐15;x=x+1){ etc.};

3.- Incluso el valor inicial puede ser negativo, ejemplo;

4.- Los incrementos también pueden ser diferentes al de uno en uno, ej.;

for (x=1; x⇐ 20; x=x+3){ etc. };

5.- Incluso pueden ser decrementos, solo que en este caso, recordar;

El valor inicial de la variable debe ser mayor que el valor final.

Cambiar el sentido de la condición.

ejemplo: for (x= 50 ; x >= 10; x= x-4 ) { etcétera };

Page 63: visual_c++

6.- Solo para los casos de incrementos y decrementos de una en una

UNIDAD, substituir en el for;

el x = x + 1 por x++

el x = x - 1 por x–

7.- Un ejemplo para usarlo en los problemas sugeridos mas adelante;

ejemplo;

desplegar los números enteros, comprendidos entre el 10 y el 20.

Ocupamos ahora un componente que pueda almacenar y desplegar un conjunto de los 10

resultados, el único componente visto hasta ahora con esta capacidad es el componente

ComboBox, sin embargo existe otro componente llamado ListBox(Standard), muy similar a

ComboBox, excepto que no tiene encabezado y todos sus elementos los mantiene a la vista

del usuario, no ocultos como el ComboBox, dicho componente ListBox se analiza a fondo

en la siguiente

UNIDAD, pero es el que de momento permite resolver el problema del for (desplegar un

conjunto de resultados a la vez).

Tanto ComboBox como ListBox permiten cargar todos sus elementos o valores, dentro de

un programa, usando un método llamado Add(valor) en su propiedad Items, como se ve en

el siguiente programa ejemplo;

Para este problema se ocupa poner en Form1, un componente Button OK que en su evento

OnClick contiene el for y la carga del componente ListBox, con el siguiente;

1. Pantalla de diseño

Page 64: visual_c++

Programa

void __fastcall TForm1::Button1Click(TObject *Sender)

{

//declaración

int x;

// ciclo for

for (x=10; x<= 20 ; x++)

{ ListBox1->Items->Add(x); };

}

1. La pantalla de salida debe ser igual o parecida a la siguiente;

Page 65: visual_c++

Este procedimiento y método igualmente trabaja con un componente ComboBox.

Practicar hasta conseguir tener esta pantalla de salida o de ejecución, cuando se consiga

entonces ya se esta listo para lo siguiente;

TAREAS PROGRAMACION C++BUILDER

1.- CONSTRUIR UN PROGRAMA QUE DESPLIEGUE LOS NUMEROS DEL 20 AL

30.

2.- DESPLEGAR LOS ENTEROS ENTRE 50 Y 30 ACOMPAÑADOS DE SU

POTENCIA CUADRADA Y RAIZ CUBICA RESPECTIVA ( OCUPA TRES ListBox).

3.- DESPLEGAR UNA TABLA DE MULTIPLICAR QUE EL USUARIO INDIQUE .

Page 66: visual_c++

14.- C++ BUILDER CICLO WHILE

En este ciclo el cuerpo de instrucciones se ejecuta mientras una condición permanezca

como verdadera, en el momento en que la condición se convierte en falsa el ciclo termina.

Su formato general es :

cargar o inicializar variable de condición;

while (condición)

{

grupo cierto de instrucciones;

instrucción(es) para salir del ciclo;

};

Ejemplo #1 :

x=1;

while(x⇐10)

{ListBox1→Items→Add(―pato‖);

x++; };

While puede llevar dos condiciones, en este caso inicializar 2 variables de condición y

cuidar que existan 2 de rompimiento de ciclo.

El grupo cierto de instrucciones puede ser una sola instrucción o todo un grupo de

instrucciones.

La condición puede ser simple o compuesta.

Page 67: visual_c++

A este ciclo también se le conoce también como ciclo de condición de entrada prueba por

arriba, porque este ciclo evalúa primero la condición y posteriormente ejecuta las

instrucciones.

TAREAS PROGRAMACION C++BUILDER

1.- DESPLEGAR ENTEROS ENTRE 50 Y 80

2.- DESPLEGAR MULTIPLOS DE 4 ENTRE 60 Y 20 ACOMPAÑADOS DE SU

LOGARITMOS DE BASE 10 Y BASE e RESPECTIVOS ( A REVISAR LA AYUDA Y

BUSCAR LAS FUNCIONES MATEMATICAS QUE ESTAN LA LIBRERIA

<MATH.H>

3.- CONSTRUIR LA TABLA DE DIVIDIR QUE EL USUARIO INDIQUE.

Page 68: visual_c++

15.- C++BUILDER CICLO DO WHILE

Su diferencia básica con el ciclo while es que la prueba de condición es hecha al finalizar el

ciclo, es decir las instrucciones se ejecutan cuando menos una vez, porque primero ejecuta

las instrucciones y al final evalúa la condición;

También se le conoce por esta razón como ciclo de condición de salida.

Su formato general es :

ejemplo:

x=1;

{ ListBox1→Items-Add(―pato‖);

x++; }while(x⇐10);

Otra diferencia básica con el ciclo while es que, aunque la condición sea falsa desde un

principio, el cuerpo de instrucciones se ejecutara por lo menos una vez.

TAREAS PROGRAMACION C++BUILDER

Page 69: visual_c++

16.- C++BUILDER CONCLUSIONES ACERCA DE CICLOS

El problema de dado un problema cualesquiera, cual ciclo se debe usar se resuelve con:

Si se conoce la cantidad exacta de veces que se quiere que se ejecute el ciclo o si el

programa de alguna manera puede calcularla usar for. Si se desconoce la cantidad de veces

a repetir el ciclo o se quiere mayor control sobre la salida o terminación del mismo

entonces usar while. Si se quiere que al menos una vez se ejecute el ciclo entonces usar do

while.

Page 70: visual_c++

17.- INSTRUCCION DE SALTO INCONDICIONAL, ETIQUETAS O GOTO

Esta instrucción fue una de las favoritas de la com

UNIDAD de programadores hace 20 años, en la actualidad la aparición de nuevas

estructuras o instrucciones de programación hacen innecesario su uso.

El uso principal que se le dio, acompañada de una instrucción if fue la de simular ciclos

condicionales.

Esta instrucción requiere una llamada etiqueta que es un identificador valido de lenguaje

C++ seguida de dos puntos.

ejemplo:

button1_onclick{

x++;

if(x⇐10) goto alfa;

}

TAREAS PROGRAMACION C++BUILDER

1.- LAS TABLAS DE SUMAR, Y MULTIPLICAR CON IF-GOTO

Page 71: visual_c++

10.- COMPONENTE RadioGroup ( Standard ) C++BUILDER

Aunque es común agrupar un conjunto de RadioButton dentro de componentes Panel Y

RadioGroup, C++Builder proporciona este componente RadioGroup que esta especializado

en la agrupación de RadioButton.

Un componente u objeto RadioGroup es una caja especial que solo contiene componentes

RadioButton, también cuando el usuario marca o selecciona uno de ellos, todos los demás

se desmarcan o deseleccionan .

Para añadir los RadioButton a el componente RadioGroup, solo editar la propiedad Items

en el Inspector de Objetos, que entonces nos muestra el minieditor de strings ya visto y

practicado en el tema de ListBox, solo recordar que cada renglón en el editor corresponderá

a un RadioButton dentro del RadioGroup.

Para procesar o programar el RadioButton seleccionado por el usuario, solo usar la

propiedad ItemIndex que queda cargada con el numero de RadioButton seleccionado por el

usuario.

Este código deberá usarse dentro del evento OnClick de un componente Button(OK).

ejemplo ————————————————————-

if(Form5→RadioGroup3→ItemIndex==4){ código a ejecutar si el usuario selecciono el

RadioButton 4 del RadioGroup 3 etc. }; ——————————————————– También

se pueden desplegar los botones en una o mas columnas, usando la propiedad Columns en

el Inspector de Objetos, para indicarle cuantas columnas de RadioButton se quieren

manejar. TAREAS PROGRAMACION C++BUILDER 1.- CAPTURAR LOS CINCO

DATOS MAS IMPORTANTES DE UN CLIENTE, USANDO RadioButton PARA LAS

RESPUESTAS, UN SEGUNDO PANEL ABAJO EN LA FORMA DESPLIEGA EN

COMPONENTES NORMALES EDIT O LABEL LAS SELECCIONES DEL USUARIO 2.-

CONSTRUIR UN CUESTIONARIO DE 6 PREGUNTAS SOBRE LOS HABITOS DE

ESTUDIO DE UN ESTUDIANTE. 3.- CONSTRUIR UN CUESTIONARIO DE 5

PREGUNTAS CON LAS PREFERENCIAS POLITICAS DE UNA PERSONA, UN PANEL

ABAJO DESPLIEGA UN CONCENTRADO CON TOTALES Y PORCENTAJES

ACUMULADOS POR CADA PREGUNTA. ES DECIR UN USUARIO RESPONDE EL

CUESTIONARIO APRIETA EL BOTON DE OK, EL PANEL DE ABAJO SE ACTUALIZA

PARA MOSTRAR TOTALES Y PORCIENTOS DE CADA PREGUNTA, Y SE LIMPIAN

LAS RESPUESTAS, UN SEGUNDO USUARIO RESPONDE EL CUESTIONARIO…. Y ASI

SUCESIVAMENTE. * PARA TOTALES Y PORCENTAJES, SOLO RECORDAR DOS DE

LOS CONCEPTOS MAS ELEMENTALES DE PROGRAMACION BASICA.

CONTADORES: CONT=CONT+1 RESULTADO 1, 2, 3,4,5, ……. ACUMULADORES:

ACUM = ACUM + CONT RESULTADO CON EL EJEMPLO DE ARRIBA 1,3,4,10,15

Page 72: visual_c++

RECORDAR LAS CAJAS EDIT→TEXT.TOINT() TAMBIEN PUEDEN FUNCIONAR

COMO CONTADORES O ACUMULADORES. NO SE OCUPA CONVERTIRLAS A

VARIABLES, TRABAJARLAS DIRECTAMENTE

Page 73: visual_c++

11.- COMPONENTE MainMenu C++BUILDER ( Standard )

Con este componente MainMenu se forman las barras de menú normales en cualquier

programa de Windows (la barra que contiene File, Edit, etc.) junto con sus opciones

correspondientes.

Cuando se pone este componente en una forma, se deberá entender que form1 ahora

mostrara o desplegara una barra de menú, tal como si fuese una ventana normal de

Windows.

Para construir un programa de selección de menú;

1.- Poner un componente MainMenu en una parte de la forma donde no estorbe (esto es

porque este componente queda flotando dentro de Form1 y solo activa o se convierte en

barra de menú al momento de ejecución del programa).

2.- Para cargarle las opciones, no del código que ejecutara cada opción, solo dobleclick

dentro de este componente para que aparezca el siguiente diseñador de menús.

1.- No es Form1, es una forma especial que se parece mucho, pero solo se activa cuando se

hace un dobleclick en un componente MainMenu.

2.- La barra superior es el menú, cada opción del menú ( Moneda, Temperatura, Distancias,

etc.) tienen sus propias subopciones o submenus.

Page 74: visual_c++

3.- Para escribir las opciones( Moneda, Temperatura, etc.) primero hacer un click en la

parte correspondiente (en el lugar que ocupan o donde se desplegaran) y escribir en la

propiedad Caption del Inspector de Objetos la palabra correspondiente.

4.- Para escribir las subopciones, primero hacer click en la opción correspondiente ( por

ejemplo en la parte donde esta la palabra Distancias) y ya aparece abajo de ella la primera

subopcion marcada y seleccionada (es un cuadrito que se pone abajo de Distancias) y

escribir en el Caption Del Inspector de Objetos la palabra adecuada a la subopcion

correspondiente (ejemplo Millas-Kms), al escribir y usar tecla <ENTER> en el caption ya

aparece el cuadrito de la segunda subopcion.

5.- Para marcar una letra de una opción o subopcion como HotKey ( lo siento no se pudo

traducir), solo poner el signo & antes de la letra correspondiente.

6.- Con los pasos 3,4,5 ya queda construido el menú, pero ahora falta cargarles el código o

programa a ejecutar por y a cada opción o subopcion del menú, recordar que estos eventos

también se activan al hacer un click el usuario en cada opción o a seleccionar la primera

letra(si se uso el &), para cargar código entonces.

7.- Solo dobleclick en la opción o subopcion correspondiente y ya aparece el minieditor de

programas, listo con el evento OnClick de la opción o subopcion correspondiente.

8.- El código a escribir en la mayor parte de los casos, solo consiste en ocultar la ventana

principal y llamar la ventana que contendrá el programa correspondiente a la opción

deseada.

9.- Para terminar y regresar a la forma principal solo click en la X del diseñador de menús.

TAREAS PROGRAMACION C++BUILDER

1.- EL DE LA MUESTRA CON DOS CONVERSIONES MONETARIAS, DOS

OPCIONES DE TEMPERATURAS Y DOS DE DISTANCIAS.

* PRIMERO DISEÑAR Y CONSTRUIR TODAS LAS FORMAS QUE VA A OCUPAR *

NO OLVIDE PONER ALGUNAS LABELS DE ENCABEZADO EN LA VENTANA

PRINCIPAL

EN EL BOTON OK O EN OTRO BOTON SIMILAR DE CADA VENTANA DE

TRABAJO NO OLVIDAR AGREGAR CODIGO PARA OCULTAR DICHA VENTANA

Y REGRESAR A LA VENTANA CON EL MENU PRINCIPAL.

Page 75: visual_c++

12.- COMPONENTE PopupMenu C++BUILDER (Standard)

Este componente encapsula propiedades, métodos y eventos de un menú popup, este

minimenu se activa cuando el usuario hace un click derecho en muchos componentes que lo

pueden contener.

Un ejemplo;

Recordar que este componente PopupMenu se tiene que pegar a otro componente, por

ejemplo un Label o un Edit, etc.

Para crear un PopupMenu, solo seleccionar el componente PopupMenu en la barra de

componentes y ponerlo en una parte de la forma donde no estorbe (también queda

flotando).

Para cargarlo de opciones solo dobleclick en dicho componente e igual que en componente

MainMenu, sale el minieditor, click en la parte donde va la opción escrita y escribir la

palabra en la propiedad Caption del Inspector de Objetos.

Para cargarle el código a cada opción , solo dobleclick en la opción correspondiente.

Para salirse del minieditor, solo click en la [X] de arriba.

Por ultimo y muy importante, recuerde que se tiene que pegar a un componente

cualesquiera, para esto solo seleccionar el componente y click en la propiedad popup del

Page 76: visual_c++

componente, sale la lista con todos los componentes PopupMenu que ya se hayan

construidos.

TAREAS PROGRAMACION C++BUILDER

1.- CONSTRUIR UN MENU CON LAS SIGUIENTES OPCIONES:

[AUTOS] ß FINANCIAMIENTO A 2,3,4 años

[LAVADORAS] ß FINANCIAMIENTO A 2,3 años

Page 77: visual_c++

13.- C++BUILDER Ciclo FOR

Instrucciones para ciclos, resuelven el problema de repetir todo el programa, o cierta parte

del programa mas de una vez.

Este ciclo es uno de los mas usados para repetir una secuencia de instrucciones, sobre todo

cuando se conoce la cantidad exacta de veces que se quiere que se ejecute una instrucción

simple o compuesta.

En su forma simple la inicialización es una instrucción de asignación que carga la variable

de control de ciclo con un valor inicial.

La condición es una expresión relacional que evalúa la variable de control de ciclo contra

un valor final o de parada que determina cuando debe acabar el ciclo.

El incremento define la manera en que la variable de control de ciclo debe cambiar cada

vez que el computador repite un ciclo.

Se deben separar esos 3 argumentos con punto y coma ;

Casos Particulares;

1.- El ciclo comienza en uno y se incrementa de uno en uno, este es el caso mas general.

2.- Pero el valor inicial puede se diferente de uno, ejemplo;

for(x=5;x⇐15;x=x+1){ etc.};

3.- Incluso el valor inicial puede ser negativo, ejemplo;

4.- Los incrementos también pueden ser diferentes al de uno en uno, ej.;

for (x=1; x⇐ 20; x=x+3){ etc. };

5.- Incluso pueden ser decrementos, solo que en este caso, recordar;

El valor inicial de la variable debe ser mayor que el valor final.

Cambiar el sentido de la condición.

ejemplo: for (x= 50 ; x >= 10; x= x-4 ) { etcétera };

Page 78: visual_c++

6.- Solo para los casos de incrementos y decrementos de una en una

UNIDAD, substituir en el for;

el x = x + 1 por x++

el x = x - 1 por x–

7.- Un ejemplo para usarlo en los problemas sugeridos mas adelante;

ejemplo;

desplegar los números enteros, comprendidos entre el 10 y el 20.

Ocupamos ahora un componente que pueda almacenar y desplegar un conjunto de los 10

resultados, el único componente visto hasta ahora con esta capacidad es el componente

ComboBox, sin embargo existe otro componente llamado ListBox(Standard), muy similar a

ComboBox, excepto que no tiene encabezado y todos sus elementos los mantiene a la vista

del usuario, no ocultos como el ComboBox, dicho componente ListBox se analiza a fondo

en la siguiente

UNIDAD, pero es el que de momento permite resolver el problema del for (desplegar un

conjunto de resultados a la vez).

Tanto ComboBox como ListBox permiten cargar todos sus elementos o valores, dentro de

un programa, usando un método llamado Add(valor) en su propiedad Items, como se ve en

el siguiente programa ejemplo;

Para este problema se ocupa poner en Form1, un componente Button OK que en su evento

OnClick contiene el for y la carga del componente ListBox, con el siguiente;

1. Pantalla de diseño

Page 79: visual_c++

Programa

void __fastcall TForm1::Button1Click(TObject *Sender)

{

//declaración

int x;

// ciclo for

for (x=10; x<= 20 ; x++)

{ ListBox1->Items->Add(x); };

}

1. La pantalla de salida debe ser igual o parecida a la siguiente;

Page 80: visual_c++

Este procedimiento y método igualmente trabaja con un componente ComboBox.

Practicar hasta conseguir tener esta pantalla de salida o de ejecución, cuando se consiga

entonces ya se esta listo para lo siguiente;

TAREAS PROGRAMACION C++BUILDER

1.- CONSTRUIR UN PROGRAMA QUE DESPLIEGUE LOS NUMEROS DEL 20 AL

30.

2.- DESPLEGAR LOS ENTEROS ENTRE 50 Y 30 ACOMPAÑADOS DE SU

POTENCIA CUADRADA Y RAIZ CUBICA RESPECTIVA ( OCUPA TRES ListBox).

3.- DESPLEGAR UNA TABLA DE MULTIPLICAR QUE EL USUARIO INDIQUE .

Page 81: visual_c++

14.- C++ BUILDER CICLO WHILE

En este ciclo el cuerpo de instrucciones se ejecuta mientras una condición permanezca

como verdadera, en el momento en que la condición se convierte en falsa el ciclo termina.

Su formato general es :

cargar o inicializar variable de condición;

while (condición)

{

grupo cierto de instrucciones;

instrucción(es) para salir del ciclo;

};

Ejemplo #1 :

x=1;

while(x⇐10)

{ListBox1→Items→Add(―pato‖);

x++; };

While puede llevar dos condiciones, en este caso inicializar 2 variables de condición y

cuidar que existan 2 de rompimiento de ciclo.

El grupo cierto de instrucciones puede ser una sola instrucción o todo un grupo de

instrucciones.

La condición puede ser simple o compuesta.

Page 82: visual_c++

A este ciclo también se le conoce también como ciclo de condición de entrada prueba por

arriba, porque este ciclo evalúa primero la condición y posteriormente ejecuta las

instrucciones.

TAREAS PROGRAMACION C++BUILDER

1.- DESPLEGAR ENTEROS ENTRE 50 Y 80

2.- DESPLEGAR MULTIPLOS DE 4 ENTRE 60 Y 20 ACOMPAÑADOS DE SU

LOGARITMOS DE BASE 10 Y BASE e RESPECTIVOS ( A REVISAR LA AYUDA Y

BUSCAR LAS FUNCIONES MATEMATICAS QUE ESTAN LA LIBRERIA

<MATH.H>

3.- CONSTRUIR LA TABLA DE DIVIDIR QUE EL USUARIO INDIQUE.

Page 83: visual_c++

15.- C++BUILDER CICLO DO WHILE

Su diferencia básica con el ciclo while es que la prueba de condición es hecha al finalizar el

ciclo, es decir las instrucciones se ejecutan cuando menos una vez, porque primero ejecuta

las instrucciones y al final evalúa la condición;

También se le conoce por esta razón como ciclo de condición de salida.

Su formato general es :

ejemplo:

x=1;

{ ListBox1→Items-Add(―pato‖);

x++; }while(x⇐10);

Otra diferencia básica con el ciclo while es que, aunque la condición sea falsa desde un

principio, el cuerpo de instrucciones se ejecutara por lo menos una vez.

TAREAS PROGRAMACION C++BUILDER

Page 84: visual_c++

16.- C++BUILDER CONCLUSIONES ACERCA DE CICLOS

El problema de dado un problema cualesquiera, cual ciclo se debe usar se resuelve con:

Si se conoce la cantidad exacta de veces que se quiere que se ejecute el ciclo o si el

programa de alguna manera puede calcularla usar for. Si se desconoce la cantidad de veces

a repetir el ciclo o se quiere mayor control sobre la salida o terminación del mismo

entonces usar while. Si se quiere que al menos una vez se ejecute el ciclo entonces usar do

while.

Page 85: visual_c++

17.- INSTRUCCION DE SALTO INCONDICIONAL, ETIQUETAS O GOTO

Esta instrucción fue una de las favoritas de la com

UNIDAD de programadores hace 20 años, en la actualidad la aparición de nuevas

estructuras o instrucciones de programación hacen innecesario su uso.

El uso principal que se le dio, acompañada de una instrucción if fue la de simular ciclos

condicionales.

Esta instrucción requiere una llamada etiqueta que es un identificador valido de lenguaje

C++ seguida de dos puntos.

ejemplo:

button1_onclick{

x++;

if(x⇐10) goto alfa;

}

TAREAS PROGRAMACION C++BUILDER

1.- LAS TABLAS DE SUMAR, Y MULTIPLICAR CON IF-GOTO

Page 86: visual_c++

III UNIDAD C++ BUILDER ARREGLOS

1.- INTRODUCCION C++BUILDER

Uno de los problemas mas comunes en los diversos sistemas de información, es el

tratamiento o procesamiento de una gran volumen de datos o de información.

Variables o componentes visuales manejados hasta ahora, no pueden ayudar a resolver este

problema.

Las variables usadas hasta ahora reciben propiamente el nombre de variables escalares,

porque solo permiten almacenar o procesar un dato a la vez.

No confundir esto con el tipo de dato o rango de datos que una variable tiene la capacidad

de almacenar.

Por ejemplo si se quiere almacenar nombre y edad de 15 personas, con el método

tradicional se ocuparan 30 variables o 30 componentes visuales, y solo es nombre y edad de

15 personas, agreguen mas datos y mas personas y ya es tiempo de empezar a analizar otro

tipo de variables y de componentes.

Es decir, en problemas que exigen manejar mucha información o datos a la vez, variables

escalares o componentes visuales de manipulación de datos normales (edit, label, etc.), no

son suficientes, ya que su principal problema es que solo permiten almacenas un dato a la

vez.

Se ocupa entonces variables o sus correspondientes componentes visuales que sean capaces

de almacenar y manipular conjuntos de datos a la vez.

Variables de tipo arreglo y sus correspondientes componentes visuales, si permiten

almacenar y procesar conjuntos de datos del mismo tipo a la vez.

Cada dato dentro del arreglo, se le llama elemento del arreglo y se simboliza y

procesa(captura ,operación ,despliegue ), usando el nombre del arreglo respectivo y un

subíndice indicando la posición relativa del elemento con respecto a los demás elementos

del arreglo, solo recordar que en C++Builder la primera posición, elemento o renglón es la

0 (cero), ej.

NOMBRES

Juan

Page 87: visual_c++

Pedro —> Nombres[1]

José

Ana —→ Nombres[3]

Carmen

EDAD

18 —> Edad[0]

20

25

30 —> Edad[3]

Sin embargo sus problemas son similares a los de variables normales, es decir hay que

declararlos, capturarlos, hacer operaciones con ellos, desplegarlos, compararlos, etc.

Para propósitos del aprendizaje se analiza o clasifican en tres grupos diferentes los arreglos

que ofrece C++Builder, ellos son;

1.- Arreglos tradicionales en C++ (internos dentro del programa)

2.- Nuevos Arreglos de C++ (Son CLASES e internos dentro del programa)

3.- Componentes Visuales de tipo Arreglo

Page 88: visual_c++
Page 89: visual_c++

2.- ARREGLOS TRADICIONALES EN C++BUILDER

En programación tradicional siempre se manejan dos tipos de arreglos, los arreglos tipo

listas, vectores o unidimensionales y los arreglos tipo tablas, cuadros, concentrados,

matrices o bidimensionales, en ambos casos son variables que permiten almacenar un

conjunto de datos del mismo tipo a la vez, su diferencia es en la cantidad de columnas que

cada uno de estos tipos contiene, como en los siguientes ejemplos;

1. ARREGLOS TIPO LISTA

Juan

Pedro —> Nombres[1]

José

Ana —> Nombres[3]

Carmen

18 —> Edad[0]

20

25

30 —> Edad[3]

1. ARREGLOS TIPO TABLAS

CIA ACME

ING MENS VTAS

(MILES DE $)

ENE FEB MAR ABR MAY

Page 90: visual_c++

SUC A 10 12 15 10 9

SUC B 8 7 5 9 6

SUC C 11 18 20 14 17

INST TECN DE TIJUANA

CONCENTRADO DE CALIF

MAT FIS QUIM HIST

JUAN 5 5 5 5

JOSE 4 4 4 4

PEDRO 3 3 3 3

ANA 9 9 9 9

Como se observa, la diferencia principal entre un arreglo tipo lista, y un arreglo tipo tabla,

son las cantidades de columnas que contienen.

NOTA IMPORTANTE.- LOS CONCEPTOS MANEJADOS AQUI ESTAN

ENFOCADOS A LOS SISTEMAS DE INFORMACION CONTABLES FINANCIEROS

ADMINISTRATIVOS

EN ALGEBRA MATRICIAL, SI SON IMPORTANTES LOS CONCEPTOS DE

VECTORES Y MATRICES, PERO LAS OPERACIONES Y METODOS SON

PRECISAMENTE LOS DEL ALGEBRA MATRICIAL Y NO ES PROPOSITO O

LUGAR INDICADO PARA TRATAR PROBLEMAS Y OPERACIONES CON

MATRICES.

Page 91: visual_c++

3.- ARREGLOS TIPO LISTA C++BUILDER

Un arreglo tipo lista se define como una variable que permite almacenar un conjunto de

datos del mismo tipo organizados en una sola columna y uno o mas renglones.

También reciben el nombre de vectores en álgebra, o arreglos unidimensionales en

programación.

Los procesos normales con una lista o con sus elementos, incluyen declarar toda la lista,

capturar sus elementos, desplegarlos, realizar operaciones con ellos, desplegarlos, etc.

Para declarar una lista se usa el siguiente formato;

tipodato nomlista[cant de elementos o renglones];

ejemplos;

int edades[12];

float sueldos[10];

AnsiString municipios[5];

notas:

Si un solo botón, en toda la ventana va a realizar, todos los procesos ( declaración, captura,

operaciones, comparaciones, despliegue), con la lista, solo hacer la declaración de la lista,

al principio del evento onclick, como lo muestra el programa ejemplo.

Recordar también que la primera posición o renglón en una lista es la posición o renglón 0

(cero).

El dato capturado, proviene de momento de un componente visual escalar y por tanto para

capturas se deben de usar tantos componentes visuales como elementos tenga la lista,

ejemplo para capturar una lista de 4 edades, el código y pantalla se da un poco mas

adelante;

1. Programa

Page 92: visual_c++

void __fastcall TForm1::Button1Click(TObject *Sender)

{ // declaración

int edad[4];

// carga o captura del arreglo

edad[0]=Edit1->Text.ToInt();

edad[1]=Edit2->Text.ToInt();

edad[2]=Edit3->Text.ToInt();

edad[3]=Edit4->Text.ToInt();

}

2. Pantalla de corrida

Para el caso de operaciones y comparaciones con todos los elementos de la lista a la vez, se

deberá usar un ciclo for con una variable entera llamada renglón, misma que también se

usara como índice de la lista, para el problema ejemplo, suponer que se quieren convertir

todas las edades a meses, el código seria;

{ // declaración

// carga o captura del arreglo

// conversión a meses

Page 93: visual_c++

for(renglon=0;renglon<=3;renglon++)

{ edad[renglón]=edad[renglón]*12; };

}

Recordar que todos los datos internos de la lista estarán almacenados en la memoria ram

del computador, para despliegues se usara un componente visual que permite manipular un

conjunto de datos a la vez, el ListBox, pero se tiene que usar un ciclo for() para ir

añadiendo o agregando elemento por elemento como se observa en el problema ejemplo

que se ha venido desarrollando, en este caso se quiere desplegar las cuatro edades

convertidas a meses;

código y pantalla de salida son;

void __fastcall TForm1::Button1Click(TObject *Sender) {

// declaración

int edad[4];

int renglón;

// carga o captura del arreglo

// conversión a meses

{ edad[renglón]=edad[renglón]*12; };

// CONVERSION A STRINGS Y ALMACENANDO EN ListBox

{ ListBox1->Items->Add(edad[renglón]); };

}

Page 94: visual_c++

Solo recordar que para capturar una lista de strings, primero se deberá usar un componente

visual por cada elemento o renglón del arreglo y segundo el traspaso de dato es directo, y

para desplegarlo en un componente ListBox de igual forma es directo, como en el siguiente

ejemplo;

void __fastcall TForm1::Button1Click(TObject *Sender)

{ // declaración

AnsiString Ciudad[3];

int reng;

//Captura de elementos de la lista

Ciudad[0]=Edit1->Text;

Ciudad[1]=Edit2->Text;

Ciudad[2]=Edit3->Text;

// Pasando lista a ListBox;

{ ListBox1->Items->Add(Ciudad[reng]); };

}

Page 95: visual_c++

TAREAS PROGRAMACION C++BUILDER

1.- Capturar y desplegar 5 precios de productos cualesquiera, usando dos panel, uno para

capturar y uno para desplegar.

2.- Capturar 4 sueldos en un panel, desplegarlos aumentados en un 25% en otro panel.

3.- Capturar los datos de 5 productos comprados en una tienda, incluyendo nombre, precio

y cantidad en sus 3 listas respectivas, después calcular una cuarta lista con el gasto total por

cada producto desplegarlo todo en un segundo panel e incluir también el gran total.

4.- Capturar en una lista solamente 6 números múltiplos de 5, se debe de estar capture y

capture números hasta que se completen los 6 múltiplos de

Page 96: visual_c++

4.- C++BUILDER ARREGLOS TIPO TABLA

Un arreglo tipo tabla se define como un conjunto de datos del mismo tipo organizados en

dos o mas columnas y uno o mas renglones.

Para procesar ( recordar solo operaciones y comparaciones) internamente todos los

elementos de la tabla se ocupan dos ciclos for(), uno externo para controlar renglón y uno

interno para controlar columna.

Solo recordar que en capturas, se deberán usar tantos componentes Edit como celdas tenga

la tabla y en despliegue usar tantos componentes ListBox como columnas tenga la tabla,

estos métodos son provisionales mientras se analizan los componentes visuales apropiados

y respectivos.

Problema ejemplo, capturar una tabla que nos muestre el peso en lbs de los tres jugadores

claves de 4 equipos de fútbol, desplegarlos en otra tabla pero convertidos a kg. ( una libra =

.454 kg.), el programa y la pantalla de salida son;

{ // declaración

double lbrs[3][4];

int reng, col;

//conversión tabla lbrs a kgrs

for(reng=0;reng<=2;reng++)

for(col=0;col<=3;col++)

{ lbrs[reng][col]=lbrs[reng][col]*.454; };

{ ListBox1->Items->Add(FormatFloat("###.##",lbrs[reng][0]) );

ListBox2->Items->Add(FormatFloat("###.##",lbrs[reng][1]) );

ListBox3->Items->Add(FormatFloat("###.##",lbrs[reng][2]) );

ListBox4->Items->Add(FormatFloat("###.##",lbrs[reng][3]) ); };

// observar solo un for renglón, y los cuatro ListBox con // las columnas

constantes

}

Page 97: visual_c++

Recordar que en este nivel de instrucción solo se pretende entender los conceptos asociados

a arreglos, mejores maneras de procesarlos existen, como se vera mas adelante, pero con lo

ya descrito y comprendido, ya es posible;

TAREAS PROGRAMACION C++BUILDER

1.- CONSTRUIR UN CUADRO QUE CONTENGA LOS COSTOS FIJOS DE CUATRO

PRODUCTOSCUALESQUIERA, QUE SE PRODUCEN EN TRES PLANTAS

DIFERENTES DE UNA EMPRESA MAQUILADORA.

2.- CONSTRUIR UN CUADRO QUE CONTENGA LOS INGRESOS MENSUALES

POR VENTAS DURANTE LOS TRES PRIMEROS MESES DEL AÑO DE CUATRO

SUCURSALES DE UNA CADENA DE AUTOREFACCIONES, AGREGAR AL FINAL

UNA LISTA QUE MUESTRE LOS INGRESOS MENSUALES TOTALES POR MESES

Y UNA SEGUNDA LISTA QUE MUESTRE LOS INGRESOS MENSUALES TOTALES

POR SUCURSAL.

3.-CONSTRUIR UN CUADRO QUE CONTENGA LAS COMISIONES GANADAS POR

TRES VENDEDORES DIFERENTES DE 5 TIPOS DE MUEBLES DE LINEA

BLANCA, AGREGAR ADEMAS LISTAS DE COMISIONES TOTALES POR

VENDEDORES Y POR TIPO DE MUEBLE Y LISTAS DE COMISIONES PROMEDIO

POR VENDEDORES Y POR TIPO DE MUEBLES.

SUGERENCIA: PRIMERO HACER UN BOSQUEJO EN PAPEL DE COMO

QUEDARAN LOS CUADROS Y LAS LISTAS EN PANTALLA.

Page 98: visual_c++

5.- TLIST TIPOS DE ARREGLOS EN C++BUILDER (CLASES E INTERNOS)

C++Builder nos proporciona cuando menos dos tiposnuevos de arreglos, ellos son;

TList

Se especializa en el almacenamiento y manipulación de varios tipos de OBJETOS u

elementos, por ejemplo enteros, floats, strings, componentes ( edits, labels, forms, etc. ).

Sin embargo TList no es propiamente un tipo de dato como los float, int, double, etcétera,

sino que es una Clase en C++, y como todas las Clases en C++, TList tiene asociados una

serie de propiedades y de métodos (procedimientos y funciones) que facilitan el

procesamiento y manipulación de sus elementos.

Consultando la ayuda de C++Builder, estas propiedades y métodos son:

1.-Propiedades;

Capacity.- Es la cantidad o tamaño del arreglo de apuntadores a los objetos en la lista.

Count.- Numero de objetos contenidos actualmente en la lista Items.- Se usa para

referenciar o accesar los objetos en la lista.

Recordar que las propiedades en un programa, se manejan con el formato

nomobjeto→nompropiedad.

2.- Métodos;

Add.- Inserta un objeto nuevo al final de la lista y regresa el lugar o posición donde hizo la

inserción.

Clear.- Se usa para vaciar el arreglo, también libera la memoria ocupada por los objetos de

la lista.

Delete.- Se usa para eliminar un objeto especifico, lleva como argumento o parámetro la

posición del objeto.

Exchange.- Intercambia dos objetos de la lista.

Page 99: visual_c++

Expand.- Se usa para agregar mas espacio para nuevos objetos en la lista.

First.- Se utiliza para regresar al primero objeto de la l lista.

IndexOf.- Regresa la posición del objeto en la lista.

Insert.- Inserta un objeto en la posición deseada.

Last.- Regresa la posición del ultimo objeto en la lista.

Move.- Mueve el objeto de una posición a otra posición.

Pack .- Compacta todos los objetos en una lista y libera la memoria ocupada por los objetos

que estaban en la parte inferior de la lista.

Remove.- Remueve o elimina un objeto especificado, el resto los recorre a la posición que

ocupaba el objeto eliminado.

Sort.- Ordena los objetos de la lista, usando QuickSort.

Como se observa TList contiene muchas propiedades y métodos que facilitan grandemente

el trabajo con los elementos de una lista.

Una de las características mas importante es que todas las listas que se derivan de TList,

son completamente dinámicas, es decir listas que se crean y se derivan de esta clase, no son

de tamaño fijo, sino que pueden ir admitiendo elementos mientras la memoria del

computador alcance, esta característica junto con las propiedades y métodos que poseen,

hacen de esta clase un objeto digno de estudiar, conocer, comprender y aplicar de forma

muy detallada.

Page 100: visual_c++

6.- TStringList C++BUILDER

De nuevo, TList se especializa en el almacenamiento y procesamiento de toda clase de

objetos, TStringList en principio es una clase derivada de TList, esto significa que

HEREDA o que puede usar muchas de las propiedades y métodos que pertenecen a TList,

además de poder usar igualmente algunas propiedades y métodos que le son propios.

La diferencia básica, con TList, es que TStringList solo permite almacenar strings, como

este es el caso mas común en el ambiente visual que se ha venido desarrollando, así como

en los sistemas o problemas de información de naturaleza administrativa, el resto del

capitulo se dedica a estudiar, analizar y construir aplicaciones con esta clase.

Sus propiedades y métodos son;

1.- Propiedades;

Count.- Cuenta las strings en la lista

Duplicates.- Permite strings duplicadas en una lista ordenada de strings

Objects.- Asocia un objeto a una string existente (ej. un bitmap a una string).

Sorted.- Especifica que las strings en la lista deben ser ordenadas automáticamente, solo

poner esta propiedad en True.

Strings[reng].- La mas importante, se usa para accesar, y leer o modificar una posición o

elemento especifico o determinado.

2.- Métodos;

Add.- Inserta un objeto nuevo al final de la lista y regresa el lugar o posición donde se

realizo la inserción.

Clear.- Se usa para vaciar el arreglo, también libera la memoria ocupada por los objetos de

la lista.

Delete.- Se usa para eliminar un objeto especifico, lleva como argumento o parámetro la

posición del objeto.

Page 101: visual_c++

Exchange.- Intercambia dos objetos de la lista.

Find.- Regresa la posición de una string en una lista ordenada.

IndexOf.- Regresa la posición del objeto en la lista.

Insert.- Inserta un objeto en la posición deseada.

Sort.- Ordena los objetos de la lista, usando QuickSort.

Recuerde que objetos(variables) derivadas de TStringList pueden usar también muchas de

las propiedades y métodos de TList.

Se analiza ahora el procesamiento normal de estos objetos o desde una perspectiva mas

tradicional variables arreglo de tipo lista.

Lo mas importante a recordar es combinar lo ya visto para tratamiento de variables tipo

lista normales y usar igualmente las propiedades y métodos que contiene esta clase.

Para declarar un objeto o variable derivada de esta clase, recordar que aquí son dos pasos,

primero se debe declarar el objeto o variable y segundo se debe crear una instancia real en

memoria de este objeto o variable, como se muestran en los siguientes ejemplos;

Creación y declaración de una lista de 8 ciudades

// área de declaración

TStringList *ciudades;

ciudades = new TStringList;

nota recordar que esta listas son dinámicas, y que no tiene sentido asignarle un tamaño fijo,

que también se podría hacer.

Creación y declaración de una lista de 6 edades;

// declaración y creación de las listas

TStringList *edades;

edades = new TStringList;

Recordar que son listas de strings, si ocupan operaciones con números se deberá usar

ToInt() y ToDouble().

Page 102: visual_c++

Recordar además que estos dos renglones que se ocupan para la declaración, van a ir juntos

al principio del onclick del botón Ok, pero si la captura se realiza usando un montón o

conjunto de componentes edits y otros botones realizan otro proceso con la lista, entonces

tendrán que ir separados en su lugar respectivo ( mas delante se indica como ).

Para capturar sus elementos usando de momento el método que se analizo en listas

normales, es decir un montón de componentes Edit, como en el siguiente ejemplo;

// área de declaración y creación

TStringList *ciudades;

ciudades = new TStringList;

// captura de datos

ciudades->Strings[0]=Edit1->Text;

ciudades->Strings[1]=Edit2->Text;

párrafos arriba se encuentra la definición de la propiedad Strings[];

Recordar que son listas y por tanto la primera posición, o primer renglón es la posición

0(cero).

Para desplegar los datos recordar que se puede usar un componente ListBox o un

componente ComboBox que permiten manipular el conjunto de datos a la vez, solo usar las

propiedades Text, tanto del ListBox, así como de la variable objeto derivada de TStringList,

como en el siguiente ejemplo;

void __fastcall TForm1::Button1Click(TObject *Sender)

{ TStringList *ciudades;

ciudades = new TStringList;

// procesos con la lista

// despliegue de la lista

ListBox1->Items->Text = ciudades->Text;

}

La pantalla de salida es:

Page 103: visual_c++

Para el caso de procesos mas comunes como operaciones, comparaciones, etcétera, solo

recordar combinar las propiedades y métodos de TStringList con los métodos vistos y

aplicados ya para componentes visuales y para los de variables de tipo arreglo ya vistas.

Esto es importante porque exige conocer y familiarizarse con esta clase mas a fondo, por

ejemplo un caso sencillo, capturar una lista de 5 edades en años, convertirlos

posteriormente a meses y al final desplegar las edades convertidas a meses.

Una de las posibles soluciones es:

Código

void __fastcall TForm1::Button1Click(TObject *Sender)

{ TStringList *edad;

edad = new TStringList;

int reng;

// captura de datos

edad->Add(Edit1->Text);

edad->Add(Edit2->Text);

edad->Add(Edit3->Text);

edad->Add(Edit4->Text);

edad->Add(Edit5->Text);

Page 104: visual_c++

// procesos con la lista

for(reng=0;reng<edad->Count;reng++)

{ edad->Strings[reng]=FormatFloat("###.##",edad->Strings[reng].ToInt() *

12);

};

}

notas:

En el for se esta usando la propiedad Count que devuelve la cantidad de elementos que

contiene la lista, esto es con la finalidad de no tener mas que procesar los elementos

existentes.

La operación es un solo renglón en el programa.

Recordar que Propiedad Strings[] permite manipular una posición especifica dentro de una

lista, recordar igualmente que la primera posición, es la 0(cero).

Para pasar los elementos de edad a ListBox, ambos componente y variable/objeto usan

propiedad Text, porque ambos la comparten o la heredan esto es importante porque

demuestra que realmente no son cosas o elementos diferentes.

Lo mas importante, es que se debe entender, aprender y aplicar combinaciones de

propiedades, métodos y operaciones como en el ejemplo.

La pantalla de salida es;

Page 105: visual_c++

Para poder usar un solo componente edit para capturar todos los elementos de la lista:

1. La declaración de la lista se pone en dos partes diferentes, dentro y arriba de la Unit,

como se observa en el siguiente ejemplo;

#include <vcl\vcl.h>

#pragma hdrstop

#include "Unit1.h"

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

#pragma resource "*.dfm"

TForm1 *Form1;

TStringList *edad;

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

__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)

{

edad=new TStringList;

}

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

void __fastcall TForm1::Button1Click(TObject *Sender)

{

edad->Add(Edit1->Text);

}

La captura no ocupa ciclo for, pero si ocupa su propio BUTTON OK, solo con Caption

=―insertar o agregar‖ y su código usa el método Add como en el ejemplo de arriba.

Operaciones y comparaciones son normales, es decir un for renglón hasta que sea menor

que Count, etc., en el onclick del segundo botón.

Despliegues igualmente en forma normal, es decir sin ciclo for e igualando Text en ambos,

el TStringList y el Listbox.

TAREAS PROGRAMACION C++BUILDER

1.- CAPTURAR Y DESPLEGAR 5 MUEBLES DE HOGAR

Page 106: visual_c++

2.- CAPTURAR EN UNA LISTA 5 ESTATURAS EN CENTIMETROS,

DESPLEGARLAS CONVERTIDAS EN PULGADAS ( 1 PULGADA = 2.54 CM.)

3.- CAPTURAR EN UNA LISTA 6 PESOS EN KG., CONVERTIRLOS

POSTERIORMENTE A LIBRAS Y SOLO DESPLEGAR EN EL ListBox RESPECTIVO

PESOS MAYORES DE 120 LIBRAS.

4.- CAPTURAR EN SUS CUATRO LISTAS RESPECTIVAS, MATRICULA, NOMBRE,

CALIFICACION DE MATEMATICAS, CALIFICACION DE FISICA, DE 5 ALUMNOS,

CALCULAR POSTERIORMENTE UNA LISTA DE PROMEDIOS, Y EN LOS ListBox

DE SALIDA SOLO DESPLEGAR LOS DATOS DE ALUMNOS APROBADOS.

Page 107: visual_c++

7.- COMPONENTE ListBox C++BUILDER ( Standard )

Este componente permite procesar visualmente un conjunto de elementos de tipo string.

Este componente hereda muchas de las propiedades y métodos de TStringList y TStrings,

mas algunas propiedades y métodos propios.

Se puede añadir, eliminar e insertar ítems en la lista usando los métodos Add, Delete, Insert

con la propiedad Items, que también es de tipo TStrings.

Si se quiere que ListBox presente varias columnas, solo cambiar el valor de la propiedad

Columns, para ordenar o clasificar los ítems, usar la propiedad Sorted.

Se puede permitir que un usuario realice una selección múltiple, poniendo la propiedad

MultiSelect en true, la propiedad ExtendedSelect determina como se realiza la selección

múltiple.

Para determinar cual ítem en particular esta seleccionado solo validar la propiedad

Selected, para conocer cuantos ítems se han seleccionado revisar los valores de la

propiedad SelCount.

Propiedades:

BorderStyle.- Despliega la lista con un marco sencillo o sin marco.

Canvas.- Se utiliza para asociar un área de dibujo o de imagen a un ítem de la lista

(consultar ayuda de esta propiedad en ListBox puesto que es interesante).

Columns.- Define una determinada cantidad de columnas para su despliegue dentro del

ListBox.

ItemIndex.- Se utiliza para seleccionar la posición o índice de un ítem o elemento en la

lista.

Items.- Es la propiedad que mas se ha venido usando, se utiliza para accesar las diversas

propiedades y métodos de las strings en la lista.

Sorted.- Se usa para ordenar alfabéticamente los elementos de la lista( ListBox1→Sorted=

true; )

Page 108: visual_c++

Style.- Define diversos o varios estilos o formas de ListBox.

Métodos:

Clear.- Elimina todos los elementos a la vez.

En la practica para cargar o capturar sus elementos, se deberá usar el método Add, ya que

no se permite cargar directamente sus datos o elementos por el usuario del programa, solo

usar código como el siguiente;

ListBox1→Items→Add(Edit1→Text);

Recordar que se pueden usar todos los métodos, para insertar, eliminar, contar, etc.

Si los valores son de tipo ―numérico‖, se pueden efectuar procesos con ellos de dos

maneras:

Pasando los valores de ListBox a una variable numérica de tipo arreglo y procesando esta

ultima variable.

Usar instrucciones directamente de proceso con los métodos ToInt y ToDouble, como se

realizo con las variables/objetos derivadas de TStringList.

Si es necesario pasar el contenido de ListBox1 a ListBox2, solo usar la propiedad Text en

ambas, ej.; (ListBox2→Text=ListBox1→Text).

Ejemplo con ListBox, para este caso se pide capturar 5 edades en un ListBox, luego

sumarle 3 años a cada una usando el mismo ListBox, y desplegarlas en un segundo ListBox

convertidas a meses.

Pantalla de diseño:

Código:

void __fastcall TForm1::Button1Click(TObject *Sender)

Page 109: visual_c++

{ ListBox1→Items→Add(Edit1→Text); }

——————————————————

{ListBox2→Items→Add(ListBox1→Items→Strings[reng].ToInt() * 12);}; } ——————

——————————————————— Pantalla de salida:

TAREAS

PROGRAMACION C++BUILDER 1.- CAPTURAR EN UNA LISTA LOS SUELDOS DE 6

EMPLEADOS Y DESPLEGARLOS EN UNA SEGUNDA LISTA AUMENTADOS EN UN

30% 2.- CAPTURAR EN UNA LISTA LOS PESOS EN KILOGRAMOS DE 6 PERSONAS

DESPLEGARLOS EN UNA SEGUNDA LISTA CONVERTIDOS A LIBRAS Y ADEMAS

SOLO LOS MAYORES DE 100 LIBRAS. 3.- CAPTURAR EN SUS 4 LISTAS

RESPECTIVAS MATRICULA, NOMBRE Y DOS CALIFICACIONES DE 5 ALUMNOS,

DESPUES CALCULAR UNA LISTA DE PROMEDIOS DE CALIFICACIONES. 4.-

CAPTURAR EN SUS LISTAS RESPECTIVAS NUMEMPLEADO, NOMEMPLEADO, DIAS

TRABAJADOS Y SUELDO DIARIO DE 5 EMPLEADOS, DESPLEGAR EN OTRA

PANTALLA O PANEL LA NOMINA PERO SOLO DE AQUELLOS EMPLEADOS QUE

GANAN MAS DE $300.00 A LA SEMANA.

Page 110: visual_c++

8.- COMPONENTE StringGrid C++BUILDER ( adicional )

Este componente es de los mas importantes, para el procesamiento de muchos datos,

permite concentrar, procesar y mostrar gran cantidad de información para la vista del

usuario.

Este componente presenta, manipula y procesa conjuntos de datos de tipo strings en forma

tabular, es decir en forma de tablas, matrices, cuadros concentrados, ejemplo;

CIA ACME

INGRESOS POR VENTAS MENSUALES

MILLONES DE PESOS

ENE FEB MAR ABR

SUC A 1 2 3 4

SUC B 5 6 4 5

SUC C 6 7 8 9

Recordar que son los datos numéricos internos quienes se procesan (es decir, se capturan,

se realizan operaciones con ellos, se despliegan, etc.), es la información externa quien le da

sentido.

Algunas de sus propiedades y métodos mas interesantes son:

ColCount.- Determina la cantidad de columnas que contendrá la tabla.

Recordar que para efectos de programación, la primera de ellas es la columna 0.

RowCount.- Determina la cantidad de renglones que contendrá la tabla.

Recordar que para efectos de programación, el primero de ellos es el renglón 0.

Fixedcol , Fixedrow.- Determinan la cantidad de columnas y renglones fijos o de

encabezado, estas propiedades ponerlas en 0.

Page 111: visual_c++

+Options, goediting = true; Para que permita editar o capturar datos al usuario.

+Options, gotab = true; Para que el usuario pueda navegar entre celdas usando la tecla del

tabulador.

Cells[columna][renglón], Es la propiedad mas importante, porque es la que permite el

acceso a cualquier celda de la tabla,

StringGrid1→Cells[1][1]=―PATO‖;

Edit1→Text=StringGrid1→Cells[0][0];

Edit2→Text=StringGrid→Cells[0][1] * 3.1416;

observar que a pesar de ser de tipo Strings, se pueden efectuar alguna operaciones

matemáticas directamente con las celdas.

Aunque es mas seguro sobre todo en el caso particular de la suma, convertirlos a

Cells[][].ToInt() o ToDouble(), ej.;

Edit2→Text=StringGrid1→Cells[1][0].ToInt()+5;

Las demás propiedades investigarlas en la ayuda del CBuilder.

Para procesar todos los elementos de la tabla, solo recordar que se deben usar dos ciclos

for, uno externo para controlar columnas, y uno interno para controlar renglón ( observar

que es lo inverso de las tablas o arreglos normales).

Ejemplo , capturar una tabla de 3 * 4 enteros, y restarles 4 después;

Pantalla de Diseño:

Programa;

void __fastcall TForm1::Button1Click(TObject *Sender)

{ int col, reng ;

for(col=0;col<=2;col++)

for(reng=0;reng<=3;reng++)

{StringGrid1->Cells[col][reng]=StringGrid1->Cells[col][reng]. ToInt()- 4

;};

}

Pantalla de Corrida:

Page 112: visual_c++

Un proceso muy común con tablas, cuadros y concentrados es agregarles listasde totales y

promedios ya sea por columna o por renglón o ambas , por ejemplo;

CIA ACME

INGRESOS MENSUALES

ENE FEB MARZO TOTALSUC PROMSUC

SUC A 1 2 3 6 2

SUC B 4 5 6 15 5

SUC C 7 8 9 24 8

SUC D 10 11 12 33 11

TOTMES 22 26 30

PROMMES 5.5 6.5 7.8

En este ejemplo aparte de la tabla se ocupan 4 listas, dos para totales y dos para promedios.

El código es sencillo, pero recordarlo y aprenderlo para siempre:

//declaración

float tabla[4][3], totsuc[4], promsuc[4];

float totmes[3], promes[3];

Page 113: visual_c++

//observar tamaños de listas que referencian renglón

// listas que referencian columnas, se supone que la tabla // ya esta

capturada.

//código para operaciones para totales y promedios //renglones por

sucursal:

for(reng=0;reng<=3;reng++)

for(col=0;col<=2;col++)

{ totsuc[reng]=totsuc[reng]+tabla[reng][col]; };

for(reng=0;reng<=3;reng++) promsuc[reng]=totsuc[reng] / 3.0 ;

// operaciones para totales y promedios por mes

for(reng=0;reng<=3;reng++)

for(col=0;col<=2;col++)

{totmes[col]=totmes[col]+tabla[reng][col]; };

for (col=0;col<=2;col++) prommes[col]=totmes[col]/4.0;

TAREAS PROGRAMACION C++BUILDER

1.- Construir un concentrado que despliegue los costos fijos de tres diversos productos que

se fabrican en cuatro sucursales de una empresa MAQUILADORA.

2.- Construir un concentrado que contenga los ingresos por ventas mensuales de los 4

primeros meses del año de tres sucursales de una cadena refaccionaría, agregar listas de

ingresos totales por mes e ingresos promedios por sucursal.

3.- Construir un cuadro que contenga las calificaciones de 5 materias de cuatro alumnos

cualesquiera, incluir promedios de calificaciones por materia y por alumno.

Page 114: visual_c++

IV UNIDAD C++BUILDER INT A LAS BASES DE DATOS

1.- INTRODUCCION C++BUILDER

En este capitulo se analizan en general dos problemas:

Variables que permitan almacenar conjuntos de datos como los arreglos pero de distintos

tipos de datos, este primer problema se resolvía en la antigüedad usando las llamadas

variables registro, o tipo struct en C.

Permanencia de los datos, hasta ahora todos los datos capturados, calculados, creados, etc.

al terminar o cerrarse el programa se pierden y es necesario volver a capturarlos, etc., en la

siguiente ejecución o corrida del programa.

Tradicionalmente en programación antigua este segundo problema se resolvía usando el

concepto de archivos, que son medios permanentes de almacenamiento de datos en los

dispositivos o periféricos apropiados, generalmente disco, cinta magnética, etc.

Page 115: visual_c++

2.- MODELOS DE ALMACENAMIENTO DE DATOS C++BUILDER

En general existen dos modelos de almacenamiento de datos en los sistemas de

información.

El modelo tradicional de archivos que se construye con los siguientes elementos:

a.1) Variables Registros, como ya se indico son variables que permiten almacenar

conjuntos de datos de diverso tipo.

También se pueden definir como representaciones simbólicas y programaticas de entidades

lógicas de información, ejemplos de variables registros son alumnos, empleados, clientes,

proveedores, productos, autos, etc.

Esta variables registros, también ocupan programas o rutinas de programas para

procesarlas, por ejemplo un procedimiento, modulo o subrutina, se encargara de capturar

los datos que contendrá la variable registro, otro procedimiento para corregir los datos que

ya contiene, otro procedimiento para desplegarlos en pantalla ya cuando ha sido capturada

y así sucesivamente.

a.2) Archivos, que en principio pueden entenderse como una especie de almacenes o

bodegas para almacenamiento de datos en forma permanente en disco, es decir un archivo

de empleados en disco contiene todos los datos de todos los empleados de una empresa.

Igualmente los archivos ocupan su propios programas o subrutinas o procedimientos

especializados por ejemplo, procedimientos para crear los archivos, para almacenar o dar de

altas los registros en el archivo, procedimientos para buscar un registro determinado,

procedimiento para dar de baja un registro, etc.

a.3) Una aplicación, que es un programa que se encarga de coordinar todos los programas

descritos y presentárselos a los usuarios de manera clara, fácil y accesible y entendible.

Salta a la vista que construir un sistema de información por ejemplo para una tienda de

vídeo o para un refaccionaría, etc. involucra un gran cantidad de trabajo de programación,

puesto que hay que programar muchas variables registros, muchos archivos en disco, y una

o varias aplicaciones.

Este modelo se usa todavía en la actualidad, pero es obvio que mejores maneras, mas

rápidas, seguras y eficientes existen en la actualidad para resolver estos problemas, y esto

nos lleva al segundo modelo de datos.

Modelo de Bases de Datos Relaciónales, este modelo intenta simplificar la construcción de

sistemas de información como los antes descritos, este modelo solo incluye en forma

simple los siguientes elementos:

Page 116: visual_c++

Tablas, es una combinación de las variables registro y de los archivos del modelo anterior.

Es decir cuando un programador moderno define o declara una tabla en un programa,

realmente esta haciendo dos cosas por el precio de una, es decir crea una variable registro

en memoria que almacenara los datos y al mismo tiempo ya esta creando un archivo en

disco que se llamara igual que la tabla o variable registro y que automáticamente se

convertirá en un espejo de la tabla en memoria, es decir cuando se cargan los datos en la

tabla en memoria, también se estarán cargando ala vez en disco.

Otra vez cuando el programador escribe código para capturar los datos y mandarlos a la

tabla en pantalla-memoria, realmente también lo esta haciendo para darlos de alta en disco.

Aplicación, que tiene la misma función que en el modelo anterior.

No confundir este concepto de tablas en base de datos con el concepto de tablas, vistos en

el capitulo de arreglos, aunque en la practica se parecen mucho, la diferencia es que los

datos no se van a disco.

Como se observa en este modelo, es mas sencillo construir sistemas de información con el,

puesto que la parte programatica se reduce ampliamente.

Page 117: visual_c++

3.- TABLAS C++BUILDER

Una Tabla simple, representa una

UNIDAD de información de una entidad lógica de información:

Tabla Empleado:

* Clave Empleado * Nombre Empleado * Dirección Empleado * Edad Empleado *

Teléfono Empleado * etc. Empleado

Tabla Proveedor:

* Clave Proveedor * Nombre Proveedor * Empresa Proveedor * Teléfono Proveedor * Fax

Proveedor * Celular Proveedor * etc. Proveedor

Tabla Autos:

* Numero de Serie * Modelo * Marca * Tipo * Color * Capacidad * etc.

Observar que cada tabla, empieza con una clave generalmente detipo numérica.

Todos los elementos de la tabla, solo hacen referencia hacia el mismo ente o sujeto de

información.

Cada elemento solo representa o debe contener un solo dato de información.

No se respetan o siguen al pie de la letra estos tres postulados y empiezan los problemas al

tiempo de programación.

Existe una segunda forma o manera de representar las tablas, ejemplo:

Tabla: Camisas

Page 118: visual_c++

NumCamisa Marca Estilo Medida Color Material

1 Jeans Manga Corta Grande Azul Algodón

2 Voláis Camiseta Mediana Negra Poliester

3 Genérica Manga Larga Chica Morado Rayón

etc. etc. etc. etc. etc. etc.

Tabla: Clientes

NumCliente NomCliente DirCliente TelCliente

1 Juan Pérez Av. aba 121212

2 Luis Pérez calle zeta 898989

3 José Pérez cjon sss 000000

etc. etc. etc. etc.

Recordar siempre, una tabla almacena o representa un conjunto de datos relacionados entre

si, la tabla de alumnos es para almacenar y manipular muchos alumnos, la tabla de

productos es para almacenar y manipular muchos alumnos, en resumen si en un problema

de información solo se presenta una instancia o renglón de una entidad lógica, entonces no

es tabla, es un encabezado.

TAREAS PROGRAMACION C++BUILDER

1.- CONSTRUIR EN CUADERNO LAS SIGUIENTES TABLAS, LA MITAD DE

ELLAS CON EL PRIMER FORMATO Y LA SEGUNDA MITAD CON EL SEGUNDO

FORMATO.

Page 119: visual_c++

4.- C++BUILDER TABLAS (CONTINUACION)

El trabajo correcto con bases de datos relaciónales, se divide en dos grandes pasos o etapas

bien diferenciadas entre si:

En la primera etapa se diseña la tabla , con sus campos, llaves y condiciones especiales,

luego se usa un paquete o programa de software especializado en la construcción,

mantenimiento y administración de la base de datos, este software se usa para convertir la

tabla o tablas ya bien diseñadas en un archivo en disco.

Estos paquetes, o software reciben el nombre de DBMS(DATA BASE MANAGEMENT

SYSTEM) o sistema administrador de bases de datos.

Este software se especializa en la creación, mantenimiento, seguridad, privacidad, etc. de

un conjunto de tablas o mejor dicho una base de datos, los DBMS mas comunes son

Oracle, SqlServer, Informix, Sysbase, etc.

Borland la compañía que fabrica C++Builder, proporciona junto con el C++Builder, un

miniDBMS llamado DataBase Desktop, mismo que se encuentra en el mismo folder o

subdirectorio que el C++Builder, y que también se usara para construir las tablas y/o

archivos físicos.

La segunda etapa consiste en construir la aplicación o aplicaciones que ya tendrán acceso o

podrán manipular los datos contenidos en la tabla, estas aplicaciones se escriben usando ya

sea lenguajes clásicos de programación como BASIC, PASCAL, COBOL, CBUILDER,

DELPHI, etc o también se pueden accesar paquetes comunes de manipulación de archivos

o bases de datos como DBASE, CLIPPER, VISUALFOX, ACCESS, etc.

DISEÑO Y CREACION DE UNA TABLA

El primer paso antes de usar el paquete correspondiente a esta tarea, es diseñar la tabla

completamente, esto exige:

1. Nombre apropiado y determinación de atributos y campos correspondientes

2. Seleccionar y determinar el atributo principal o campo clave o llave primaria que se

utiliza como el identificador único que permite diferenciar cada instancia o renglón

diferente dentro de la tabla.

3. También se puede seleccionar otros campos que puedan servir mas adelante para ordenar

de manera diferente la tabla, es decir una tabla en principio ya está ordenada por el campo

clave, por ejemplo, la matricula de un alumno, el numero de empleado, etc., pero existirán

muchas ocasiones mas adelante donde se puede pedir un orden diferente, por ejemplo, por

Page 120: visual_c++

ciudad, por carrera, por nombre, por edad, etc., la buena ingeniería de una base de datos

exige tomar en cuenta estos y otros muchos problemas y detalles.

4. Escribir restricciones y condiciones apropiadas para ciertos atributos , por ejemplo el

número de empleado deben comenzar en 500, la edad no debe ser mayor de 150 años, etc.

Ya listo el diseño de la tabla, se pasa a el programa correspondiente para su creación y

almacenamiento, dicho programa que se encuentra dentro de el folder o subdirectorio de

CBuilder y como ya se dijo es:

Page 121: visual_c++

5.- DATABASE DESKTOP C++BUILDER

No es un componente de la barra de herramientas, es el icono de un programa que se

encuentra en el mismo folder o directorio que el C++Builder.

El procedimiento completo para construir la tabla, es:

b) Crear una nueva con file, new, table, DD pregunta cual formato de tabla se va a usar;

c) El formato a seleccionar es Paradox 7,(Borland es la compañía propietaria de los arriba

mencionados, otras versiones de C++Builder ya traen licencias para nuevos tipos, como

Access, etc.), ya hecha la selección entramos a el siguiente editor de tablas:

Page 122: visual_c++

Tomar nota de las dos áreas del editor, la primera de ellas es el field roster y la segunda

área es la de propiedades de la tabla.

d) Se usa ahora la primera área, para escribir los campos o atributos de la tabla, la segunda

columna es el tipo de dato del atributo, para asignar un tipo de dato a un atributo, pulsar dos

veces la barra espaciadora en el teclado para que salga la siguiente lista de tipos de datos:

Page 123: visual_c++

Como se observa existen muchos e interesantes tipos de datos, de momento solo usar los

mas comunes, enteros, short, numéricos, y alpha para el caso de strings.

La opción size(tamaño) solo se usa cuando el campo es de tipo string ( ALPHA) y se tiene

que dar el tamaño de la string, por ejemplo en campo Dirección el size o tamaño es 30.

La opción Key, es para marcar un atributo o campo, como llave primaria, o llave principal

de las instancias o renglones u objetos diferentes de la tabla, para marcar un campo como

llave primaria, solo dobleclick en esta opción Key.

e) La segunda área de la tabla, son las propiedades de la tabla, todas las propiedades de la

tabla están dentro del siguiente combobox.

Todas y cada una de las propiedades, se definen abajo en la parte de propiedades del editor

de tablas, es decir la propiedad validity check tiene como elementos:

La propiedad siguiente tiene sus propios elementos y así sucesivamente.

De momento solamente dejar las propiedades o sus partes en blanco.

f) No olvidar usar la opción SAVE abajo para guardar la tabla, en esta parte sale la ventana

normal de Windows para grabación, esa ventana donde se puede crear un nuevo folder, etc.,

Page 124: visual_c++

solo buscar el directorio que se creo al principio de la sesión con my computer,

abrirlo(OPEN) y escribir un nombre apropiado para la tabla.

Ya creada la tabla, es conveniente cargarle unos cuantos renglones registros o datos para

pruebas, esto se hace con:

c.1) Usar el icono de OPEN tabla y seleccionar la tabla a cargar.

c.2) Entrar al modo de edición usando el icono de Edit y ya se puede empezar a

capturar los datos en cada renglón.

c.3) Para terminar solo click en la X arriba en la tabla respectiva.

Ejemplo de una tabla;

Recordar que todos los cambios hechos a una, añadir, insertar, eliminar, modificar, etc.

quedan grabados automáticamente en disco, este hecho es la razón por lo que no existe una

opción de grabar un renglón o registro cualesquiera.

Ahora si, ya creada, declarada o definida la tabla, es tiempo ahora de construir la

aplicación, para esto se usara nuevamente el C++Builder .

Page 125: visual_c++

6.- APLICACIONES O PROGRAMAS CON TABLAS C++BUILDER

Básicamente una aplicación consiste de un programa o forma que permite accesar,

manipular, editar, procesar, etcétera, los datos, registros, o renglones de una tabla, es decir

es la aplicación la que constituye, la vista sobre la que trabaja el usuario del programa.

Como ya se explico en el modelo tradicional de almacenamiento de datos, existían muchos

procesos, tanto para la manipulación de registros en memoria, capturas, modificaciones,

etc., como para el almacenamiento de todos ellos en archivos en disco, el famoso ABC de

un sistema de archivos (altas, bajas, consultas, modificaciones, etc.) y todos ellos había que

construirlos programarlos a mano, era terrible la situación de los programadores de antaño.

En el modelo relacional-visual de datos, mucho de este trabajo no existe, solo se construye

una forma, y se pegan unos cuantos componentes para que aparezcan las propias tablas y

componentes para que se procesen los datos que contendrán la tablas.

Recordar también que la aplicación ya no deberá preocuparse, donde se almacenan los

datos, de validar las condiciones y restricciones impuestas en ellos, etc., todo este trabajo

ahora es responsabilidad del miniDBMS que usado, el DataBase Desktop.

Existen dos maneras sencillas de construir aplicaciones, la primera de ellas es presentarle al

usuario un solo renglón de información para su proceso y manipulación y la segunda es

presentarle toda la tabla a la vez, también para su manipulación y proceso.

Page 126: visual_c++

7.- APLICACIONES POR RENGLON C++BUILDER

Para construir una aplicación, presentándole un solo renglón al usuario para su

procesamiento en C++Builder, solo se ocupa una forma (Form1) y solocuatro componentes

diferentes de acceso y manipulación de tablas, estos cuatro componentes son:

PROCEDIMIENTO Y COMPONENTES

1.- Colocar un componente Table (Data Access ) en algún lugar de la forma donde no

estorbe( este componente quedara flotando y no aparece al momento de ejecución del

programa).

Este componente Table, sirve de enlace físico entre la tabla real que se creo con el

DataBase Desktop y el resto de los componentes que se usaran para la construcción de la

aplicación.

Sus tres propiedades mas importantes son:

* Propiedad DataBaseName = Solo escribir el directorio donde se encuentra la tabla real,

por ejemplo c:\datos

* Propiedad TableName = Solo click a un lado de esta propiedad y seleccionar la tabla a

usar, por ejemplo seleccionar la tabla de clientes.

* Propiedad Active = Ponerlo en valor True.

2.- Colocar un componente DataSource (Data Access) también en algún lugar en la

forma donde no estorbe.

Este Componente actúa como el enlace físico entre el Componente Table y el resto de

componentes que procesan los datos de la tabla, es decir el componente Table apunta a la

tabla real en disco, el componente DataSource apunta al componente Table, y el resto de

los componentes apuntan a DataSource.

Su única propiedad a modificar es:

Propiedad DataSet = Click a un lado y seleccionar el componente Table al que se quiere

enlazar, por ejemplo Table1.

3.- Componente DBEdit (Data Controls) .

Este componente permite presentar y manipular un dato de la tabla a la vez.

Page 127: visual_c++

Es un componente muy similar al componente Edit y comparte muchas de las propiedades

y métodos de este ultimo, su diferencia principal es que Edit, carga sus datos desde el

usuario y DBEdit los carga desde la tabla almacenada en disco.

De este componente se deben colocar tantos de ellos en la forma, como columnas existan

en la tabla a procesar.

Sus dos propiedades mas importantes y en el orden abajo descrito son:

Propiedad DataSource = Click a un lado y seleccionar el DataSource al que se quiere

enlazar, por ejemplo DataSource1.

Propiedad DataField = Click a un lado y seleccionar el campo o atributo o columna que se

quiere representar o enlazar por ejemplo ClaveCliente, NomCliente, etc.

Recordar que se deben colocar tantos DBEdit en la forma, como columnas existan en la

tabla, o como columnas se quieran presentar al usuario para su manipulación.

Recordar poner unos cuantos componentes Label, arriba del componente DBEdit y

cargarlos en su propiedad caption con el nombre del campo o columna respectivo.

4.- Componente DBNavigator (Data Controls) .

Button Significado

First Regreso al primer registro o renglón de la tabla.

Prior Regreso a registro o renglón anterior.

Next Avanza al siguiente renglón.

Last Avanza a el ultimo renglón.

Insert Inserta un nuevo renglón en la tabla.

Delete Borra o elimina el renglón o registro actual.

Edit Pone el registro actual en estado de edición para su modificación

Post Graba el registro o renglón actual en la tabla en disco.

Page 128: visual_c++

Cancel Cancela modo edición y restaura los datos anteriores que tenia el renglón.

Refresh Refresca o regraba toda la información.

Recordar poner unos cuantos componentes Label arriba de los botones del navegador para

su aclaración, uso y manejo al usuario.

Sus dos propiedades mas importantes son:

Propiedad DataSource = Click a un lado y seleccionar el DataSource al que se quiere

enlazar, por ejemplo DataSource1.

Propiedad +VisibleButtons = Click en el signo +, para activar(True) o desactivar(False) los

botones de proceso de renglones de la tabla, que se quieran mostrar u ocultar al usuario.

Con estos cuatro componentes ya se construye una aplicación, ejemplo;

Pantalla de Diseño:

Pantalla de ejecución:

Page 129: visual_c++

TAREAS PROGRAMACION C++BUILDER

1.- Construir aplicaciones para la mitad de las tablas hechas en el DataBase Desktop.

Page 130: visual_c++

8.- APLICACION POR TABLA C++BUILDER

En este tipo de aplicación, al usuario se le presenta toda la tabla completa a la vez para su

procesamiento y manipulación.

Para construir esta tipo de aplicación, solo se ocupan tres componentes y dos de ellos ya

son conocidos, estos componentes son:

Componente Table ( Data Access)

* propiedad DataBaseName = c:\datos

* propiedad TableName = Clientes.db

* propiedad Active = True

Componente DataSource ( Data Access)

* propiedad Dataset = Table1

Componente DBGrid ( Data Controls)

* DataSource = Click a un lado de la propiedad, para seleccionar el DataSource respectivo

a enlazar, por ejemplo DataSource1.

Una característica interesante, es que este componente DBGrid, trae asociado un editor de

columnas, solo poner el componente DBGrid en la forma, enlazarlo al DataSource y luego

doble click dentro del DBGrid y aparece el siguiente editor:

Primero usar el botón Add All Fields para cargar todos los campos columnas a la primera

ventana y de esta ventana ir seleccionando el campo o columna a procesar, observar que se

pueden agregar nuevas columnas, o eliminar columnas existentes y para cada columna que

se vaya seleccionando ya funciona la segunda parte del editor.

Componente DBNavigator( Data Access)

* propiedad DataSource = DataSource1

* propiedad +VisibleButtons = activar o desactivar los botones apropiados

Aunque este componente no se ocupa en este tipo de aplicación, puesto que el usuario

puede realizar todos los procesos básicos directamente dentro de la tabla, es conveniente

poner un navegador para darle una segunda opción o manera de realizar los procesos

básicos.

Page 132: visual_c++

9.- PROCESOS BASICOS C++BUILDER

Analizaremos ahora algunos procesos también básicos que pueden realizarse con los dos

tipos de aplicaciones y que además no están contemplados en algunos de los botones del

navegador.

OPERACIONES CON CAMPOS

Para el caso de aplicaciones construidas con componentes DBEdit, recordar que comparte

muchas propiedades y métodos con el componente edit, así que es valido por ejemplo en

una aplicación donde la tabla productos tiene el campo costounitario(DBEdit3) y el campo

o columna utilidad(DBEdit6), poner un componente edit1 para el precio de venta y realizar

la siguiente operación en el onclick de un botón apropiado.

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

void __fastcall TForm1::Button1Click(TObject *Sender)

{

Edit1->Text=DBEdit3->Text.ToDouble()+DBEdit6à Text.ToDouble();

}

Como se observa se puede accesar y manipular los componentes DBEdit usando la

propiedad Text, tanto para leerlos como para cargarlos.

Problemas sugeridos:

1.- Una tabla de productos con campos costounitario, margen de utilidad y tasa de iva,

calcular el precio de venta.

a.2) Para el caso de aplicaciones con DBGrid, se pueden accesar sus celdas para su lectura

y proceso usando código como en el siguiente ejemplo, en algún botón o evento apropiado:

Edit3→Text = DBGrid1→Fields[2]→AsInteger * 5;

Observar la propiedad Fields[col], es para indicar la columna deseada y además comienza

en la 0(cero), recordar además que este acceso será realizado solamente sobre el renglón

seleccionado en la tabla (aquel que esta seleccionado con un *).

También se esta usando el método AsInteger para leerlo como entero.

Page 133: visual_c++

Es conveniente usar la ayuda del C++Builder para el componente DBGrid para conocer

todas sus propiedades y métodos.

Para cargar una celda con un nuevo valor, usar código como el siguiente en algún botón o

evento apropiado.

Onclickbutton5(){

DBGrid1→Edit();

DBGrid1→Fields[3]→Value = 300;

}

1.- Observar que son dos pasos, en el primero se pone todo el DBGrid en modo de edición

y en el segundo se carga ya la celda seleccionada con el nuevo valor.

2.- Recordar que el cambio es en una celda de un solo renglón, y es el renglón

seleccionado.

3.- Como primera nota interesante, esta propiedad Edit() es también la del navegador, es

decir es valido DBGrid1→First, etc.

4.- Para la modificación de la celda, se usaron otra vez la propiedad Fields[col] y método

Valúe, recordar nuevamente estudiar propiedades y métodos de DBGrid.

Problema sugerido:

TAREAS PROGRAMACION C++BUILDER

1.- La misma tarea anterior, pero ahora con tabla.

Page 134: visual_c++

10.- BUSQUEDAS C++BUILDER

Un problema muy común en los sistemas de información basados en bases de datos es el de

búsquedas, en estos casos el usuario proporciona un dato, generalmente la clave del

registro, para que se localice toda la información pertinente.

Para resolver este problema, solo se ocupa:

1. Un botón de ordenes (OK) con el siguiente código:

Los parámetros del método Locate(), son;

Locate(―Columna de búsqueda‖ ,‖Dato a buscar‖ , opción de búsqueda);

cuando opción = 0; → ignora diferencia entre mayúsculas y minúsculas

cuando opción = 1; → resultado parcial, ejemplo si se busca ―ju‖ se posesiona en el primer

renglón donde ese campo empiece con ―ju‖, ejemplo Juan, juvenal, etc.

TAREAS PROGRAMACION C++BUILDER

1.- CONSTRUIR UNA APLICACION DE BUSQUEDAS PARA UNA TABLA DE

AUTOS, CON OPCIONES DE BUSQUEDA POR CLAVE, MODELO, COLOR,

PRECIO.

Page 135: visual_c++

11.- FILTROS C++BUILDER

Un filtro es una condición que permite desplegar solo determinada información de una

tabla.

Es decir, en ocasiones solo se quiere desplegar información condicionada al usuario, por

ejemplo de la tabla de clientes solo desplegar aquellos que sean de la ciudad de Tijuana, de

la tabla de autos, solo desplegar aquellos de modelo 1990 en adelante.

Como se observa, filtrar una tabla, es condicionar uno o mas campos o columnas.

Formar condiciones simples o compuestas ya no debe ser problema, el real problema es que

la librería de VCL que contiene los componentes visuales, fue portada a C++Builder por

parte de la Compañía Borland usando la librería VCL de Delphi( y este Delphi es Pascal),

en otras palabras los filtros o condiciones se tendrán que programar tomando en cuenta a

como Pascal maneja las constantes strings, los operadores relaciónales y los operadores

lógicos.

Existen dos maneras de poner filtros o condiciones para una tabla, ellas son:

1.- Interna, debe haber un DBGrid en la aplicación y para el componente Table, modificar

las siguientes propiedades:

* propiedad Filter = condición, ejemplos para la tabla de clientes:

= ClaveCliente < 3

= Ciudad <> 'Tijuana'

= ClaveCliente > 2 and Ciudad = 'Tijuana'

* propiedad Filtered = true

2,- Externa, es el usuario quien construye el filtro o condición, usando un componente Edit

para el filtro y un botón de ordenes (OK) para que se ejecute y despliegue la tabla filtrada,

el código en dicho botón es;

onclickbutton1()

{

Table1→Filter = Edit1→Text;

Table1→Filtered = true;

Page 136: visual_c++

}

TAREAS PROGRAMACION C++BUILDER

1.- UNA TABLA DE AUTOS FILTRADA INTERNAMENTE POR COLOR AZUL Y

MODELO DE 1990 EN ADELANTE.

2.- UNA TABLA DE PROVEEDORES Y QUE SEA EL USUARIO QUIEN

CONSTRUYA EL FILTRO O CONDICION.

Page 137: visual_c++

GRAFICOS O IMAGENES C++BUILDER

Campos de gráficos o de imágenes, se han convertido en una de las grandes atracciones y

características de las bases de datos modernas.

En C++Builder, el manejo de dichos campos es muy fácil solo:

1.- Cuando se crea la tabla en el DataBase Desktop, incluir un campo de tipo de dato

Graphics, por ejemplo en la tabla de clientes, incluir el campo foto de tipo Graphics.

2.- En aplicaciones por renglones , no usar un DBEdit para este campo, sino usar un

componente DBImage (Data Controls) .

Si el renglón o registro ya esta cargado con su imagen respectiva, al hacer la navegación

entre renglones, este componente DBImage las va desplegando.

3.- En aplicaciones por tablas, usar el editor del DBGrid para ocultar el campo de tipo

Graphics y poner a un lado del DBGrid un componente DBImage, esto hace la misma

función, es decir al momento que el usuario navega entre los renglones de la tabla, este

componente va desplegando la imagen del renglón donde se encuentra el cursor.

4.- El problema, es como cargar las imágenes, la respuesta es sencilla, las imágenes solo

pueden cargarse, capturarse o provenir de solo dos fuentes o lugares distintos:

4.1) Un archivo de tipo *.BMP( u otros formatos similares)

4.2) Del Clipboard de Windows

5.- Cualquier dispositivo o periférico de este tipo (scaners, cámaras digitales, etc.) o

programas de imágenes ( paintbrush, paint, corel, etc.) tienen estas dos capacidades, es

decir pueden mandar sus imágenes ya sea al Clipboard o ya sea a un archivo en disco.

6.- Para capturar una imagen en una aplicación ya sea por renglón o por tabla, recordar no

usar un campo DBEdit para este campo, sino un campo DBImage, para usar el Clipboard

para capturar se tienen dos maneras sencillas:

6.1- Colocado el cursor dentro de este campo DBImage, pedirle al usuario, usando un Label

por ejemplo que solo teclee, CTRL V, ( observar el paste en el edit de cualquier ventana de

Windows).

6.2.- Usar además del componente DBImage un componente Button de ordenes(OK) con el

siguiente código:

{ DBImage1→PasteFromClipboard(); }

Page 138: visual_c++

Recordar que para usar estos métodos, el Clipboard de Windows ya debe estar cargado con

la imagen, para pruebas sencillas, minimizar la aplicación, cargar el PaintBrush o Paint,

cargar un archivo .BMP, seleccionarlo luego Edit Copy, cerrar el Paint o PaintBrush y

maximizar la aplicación y aplicar cualquiera de los dos métodos.

Es evidente que también se pueden usar CTRL C, CTRL X, CTRL Del(ver edit de

cualquier ventana), CopyToClipboard() (ver ayuda de DBImage), etc., para diferentes

procesos.

Recordar además que la tabla física no actualiza el campo correspondiente con su imagen,

si no se avanza de renglón, o se usan los botones Next, Refresh, Update del navegador.

7.- Para cargar o capturar una imagen directamente desde un archivo en disco de extensión

.BMP (u otros similares) solo usar un componente DBImage ya sea en aplicaciones por

renglón o por tabla, un componente Button de ordenes y el siguiente código;

OnClickButton1()

{ DBImage→Picture→LoadFromFile(―C:\datos\mifoto.bmp‖); }

Ya debe estar en el directorio o folder datos dicho archivo .BMP y además otra vez

recordar, que aunque la imagen ya esta en la pantalla, todavía no se manda a la tabla a disco

si no se ejecuta un avance de renglón o un Next, etc.

8.- La propiedad Stretch en DBImage, la amplia, otro método es ponerlas en Clipboard o

archivo ya con el tamaño apropiado.

TAREAS PROGRAMACION C++BUILDER

1.- UNA TABLA DE MAMIFEROS COMPLETA INCLUYENDO IMAGENES

2.- UNA TABLA DE PRODUCTOS O MERCANCIAS INCLUYENDO SU FOTO

Page 139: visual_c++

13.- IMPRESION O REPORTES QREPORT C++BUILDER

Imprimir tablas o construir reportes sobre las mismas, es también una tarea común en los

sistemas de información basados en bases de datos.

Lo bueno es que se tiene un folder o pestaña llamada QReport cargada de componentes

visuales especializados en la impresión de reportes, esta librería de componentes, no es

hecha por Borland, es hecha por una compañía llamada QSOFT&trade;

QReport

Practica para construir un reporte que contiene la cédula de un y solamente un cliente de la

tabla de clientes.

Los componentes y propiedades a usar son:

1.- Table1

* DataBaseName = c:\datos * TableName = Clientes.db * Active = true * Filter =

ClaveCliente = 2 (observar que aquí es donde se determina

cual cliente se imprime)

* Filtered = true

2.- QuickRep1, se encuentra en pestaña QReport.

Es el componente principal para impresión.

Toma la forma y tamaño de una hoja de impresora dentro de Form1.

Sus propiedades a usar son:

* Dataset = Table1 * Zoom = 50

3.- QRShape1

Se usara para crear un rectángulo para encabezados de la cédula de un cliente.

Son varios tipos o formas las que existen de QRShape, rectángulos, líneas, círculos, etc.,

rectángulo es default, y la propiedad para cambiar de forma es Shape.

Acomodarlo y expanderlo en la parte superior de la hoja de impresión (QickRep1).

Sus propiedades a usar son:

Page 140: visual_c++

- +Pen = Click en signo + y poner:

Color = clgreen

Width = 5

4.- QRLabel1

Similar a label, contienen textos o mensajes estáticos.

Colocarlo dentro del rectángulo o sección de encabezado.

Propiedades:

+Font = dar color y tamaño de font

5.- QRSysData1

Componente especiales que contienen datos fijos de impresión, tales como numero de

pagina, fecha, hora, etc.

Colocarlo también dentro de la sección o banda de encabezado.

propiedades:

6.- QRSysData2

Otro del anterior, colocarlo dentro de la banda de encabezado, propiedad

7.- QRShape2

Con este se forma ahora un sección, rectángulo o banda principal.

Cuando un reporte, imprime mas de un renglón, por ejemplo todos los clientes, esta parte

de la hoja recibe el nombre de banda de detalle.

Propiedades:

- +Pen = darle color y tamaño(Width) apropiados.

8.- QRLabel###

Colocar varios dentro de la banda de detalle, con caption apropiado, ejemplo, clave,

nombre, foto, etc.

9.- QRDBText1

Page 141: visual_c++

Componente para desplegar cada dato de una celda o campo o columna de una tabla, es

similar a DBEdit pero es estático, es decir solo despliega.

Se deberán poner tantos componentes QRDBText en esta banda o sección de detalle, como

columnas de datos existan o se quieran desplegar de la tabla.

Propiedades:

* Dataset = Table1 * DataField = seleccionar columna apropiada * Font = color, tamaño,

etc. que se quieran

10 .-QRDBImage

Componente para desplegar e imprimir campos de tipo Graphics ( BMP, ICO, WFW).

Propiedades:

* Dataset = Table1 * DataField = Seleccionar una columna de tipo Graphics * Stretch =

true

Notas:

1.- El componente QuickRep, tiene la propiedad +Frame, para que también pueda desplegar

e imprimir un marco apropiado.

2.- Para ir desplegando un Preview de impresión al tiempo del diseño del reporte, solo

dobleclick dentro de la hoja de impresión (QuickRep) para que aparezca una ventana de

Preview de impresión.

3.- La CIA Qsoft, ya tiene a la venta QReport V3.0 que ya trae incorporado WYSWYNG.

4.- Para Preview o impresión en tiempo de ejecución, solo añadir un botón de ordenes OK,

y usar solo una de las siguientes instrucciones:

OnClickButton1() {

QuickRep1→Preview();

o QuickRep1→Print();

Page 142: visual_c++

solo una de las dos } ejemplo: a)Pantalla de diseño

b)Programa: ———

—————————————–

void __fastcall TForm1::Button1Click(TObject *Sender)

{

QuickRep1→Preview();

}

————————————————— c)Pantalla de corrida:

Como ya se indico la

versión 3 de QReport ya trae incorporado WYSYNG. d)Pantalla de Preview durante

Page 143: visual_c++

ejecución:

TAREAS PROGRAMACION C++BUILDER 1.- REPORTE CON UN AUTO DE LA TABLA

DE AUTOS 2.- REPORTE DE UN PROVEEDOR, DE LA TABLA DE PROVEEDORES,

PERO EL USUARIO SELECCIONA EL FILTRO O LA CLAVE DEL PROVEEDOR (

CONSTRUIR DOS PANTALLAS, UNA CON EL FILTRO Y BOTON DE IMPRESION O

PREVIEW Y LA SEGUNDA CON EL REPORTE).

Page 144: visual_c++

14.- IMPRESION DE TODA LA TABLA C++BUILDER

Imprimir toda la tabla significa muchas hojas de impresora.

Primero se deberá quitar el filtro en la tabla y segundo entender lo que tienen en común

todas las hojas de impresora que se ocupan para imprimir la tabla.

Primero todas las hojas ocupan un mismo encabezado o un mismo pie de pagina, donde

puede ir por ejemplo la fecha o el numero de pagina.

La primera hoja de todo el reporte, cuando menos debe llevar una banda de titulo, con el

nombre de la compañía, el titulo y propósito de la tabla, la fecha, etc.

Todo los renglones de la tabla, ocuparan muchas hojas de impresora para desplegarse,

incluyendo un encabezado para todas las columnas que están en la hoja, repito necesitamos

un encabezado para columnas y que aparezca en todas las paginas.

Probablemente, en la hoja final, seria conveniente añadir algunos contadores y

acumuladores, por ejemplo la cantidad de renglones, algún acumulado de alguna columna

numérica en especial, etc.

QReport, usa este modelo de bandas para la construcción de reportes, es decir, en la

practica anterior se uso un componente QRShape, para dividir el reporte en dos partes,

secciones o bandas, pero QReport trae incorporado un componente llamado QRBand que

permite dividir en partes, secciones o bandas todo el reporte.

Este componente QRBand, en su propiedad BandType, permite construir los siguientes seis

tipos importantes de banda.

BANDA NOTAS

PAGE HEADER Banda de encabezados de paginas.

Aparece en todas las hojas impresas.

Poner dentro componentes para numero de pagina, etc.

TITLE Banda de Titulo o encabezados del Reporte.

Solo aparece en la primera hoja impresa.

Page 145: visual_c++

Poner componentes qrlabel con el nombre de la compañía, el propósito de la tabla, fecha,

etc.

COLUMM HEADER Banda de o para encabezados de columnas.

Aparece en todas las hojas impresas.

Poner dentro componentes qrlabel con el encabezado que lleva cada columna de la tabla.

DETAIL Banda de detalle.

Es la mas importante, porque es la que contiene los datos de los renglones de la tabla.

Es la que constituye el grueso de las hojas impresas.

Solo colocar dentro de esta banda los componentes de datos impresos, QRDBText y

QRDBImage

SUMMARY Banda de resumen.

Solo aparece en la hoja final de impresión.

Poner dentro de ella componentes de operaciones como es QRExpr y estudiarlo en la

ayuda, para conocer sus métodos (funciones) y aplicarlas.

PAGE FOOTER Banda de pie de pagina.

Aparece en todas las hojas impresas.

Su función es similar a la banda de encabezado.

De hecho, en un reporte solo se usa la b banda de encabezado o la banda de pie de pagina,

pero no las dos.

Solo poner dentro de esta banda, componentes de numero de pagina, o de fechas, o de hora,

etc.

Lo mas importante a tomar en cuenta es cada componente QRBand que se ponga dentro de

un reporte, se deberá definir usando su propiedad BandType, como una cualquiera de los

seis tipos de bandas, es decir,

En general el procedimiento completo es:

Page 146: visual_c++

1.-Poner un componente Table en la forma y nadamas cargarle sus tres propiedades

básicas( no usar filtros).

2.-Poner un Componente QuickRep( es la hoja de impresión) y cargarle las propiedades ya

descritas en procedimiento de impresión anterior.

3.- Colocar y expandir un primer componente QRBand dentro del componente QuickRep y

primero asociarle el tipo de banda que representa, por ejemplo de encabezado o de titulo,

recordar que un reporte no necesariamente tiene que llevar las seis bandas.

A este componente QRBand, cambiarle propiedades de font, frame, color, etc.

4.- Colocar dentro del componente QRBand1, los componentes necesarios y apropiados

como se indico en el cuadro anterior de bandas y significados, por ejemplo QRLabel, etc.

5.-Colocar otro componente QRBand en la hoja de impresión, expanderlo y definirlo como

banda de titulo o banda de encabezado de columnas, etc.

6.-Repetir los pasos anteriores, hasta completar todas las bandas.

7.- Colocar un botón de ordenes OK, y asociarle el código de Preview o de impresión.

TAREAS PROGRAMACION C++BUILDER

1.- Desplegar la tabla de Productos, y agregar un botón de impresión de tabla ( son dos

formas una con la tabla y su navegador y la segunda es la forma de reporte) no olvidar

Include File Unit.

Page 147: visual_c++

15.- MODELO RELACIONAL DE DATOS C++BUILDER

Entre dos tablas básicas o tablas simples cualesquiera, se debe y puede buscar, identificar y

establecer una o varias relaciones entre ellas, ejemplo;

tabla Clientes tabla Productos

tabla Autos tabla TALLERES MECANICOS

R1= El auto ingresa al taller

R2= El auto es diagnosticado en el taller

R3= El auto es reparado en el taller

R4= El auto sale del taller

Una relación simple es la unión o combinación de dos tablas básicas mediante una y solo

una acción, hecho o conducta especifica.

Entiéndase de otra manera, como una frase que relaciona las dos tablas y un y solo un verbo

que las une.

Si se analizan detenidamente las relaciones de los ejemplo, es también posible deducir que

un conjunto de relaciones forman o constituyen un proceso administrativo, contable, fiscal,

o de otro tipo cualesquiera, en el primer ejemplo el proceso es el ventas, en el segundo es el

proceso de reparación de un auto.

Debe ser obvio que un proceso cualesquiera no se podrá describir completamente, con tres

o cuatro relaciones simples nadamas.

Aun mas, en un sistema de información cualesquiera cada una de las relaciones genera una

tabla especial llamada ―de relación‖, pero también genera en muchos casos un documento

especifico, por ejemplo el cliente compra al contado productos genera la tabla de relación y

el documento llamado ―Factura‖, en la relación el auto ingresa al taller se genera la tabla de

relación y/o documento llamado ―ORDEN DE ENTRADA‖, en la relación el cliente aparta

productos se genera la tabla de relación y/o documento llamado ―NOTA O RECIBO DE

APARTADO‖, etc.

Existirán casos o relaciones donde será casi imposible identificar o nombrar el documento o

relación existente, para resolver este problema, existen dos soluciones básicas, la primera

de ellas es crear por nuestra cuenta el documento, es decir si en un modelo practico no

existe un documento para esta parte del proceso lo mas sencillo es crearlo en la empresa,

documentarlo y pedir a la empresa que lo ponga en practica, en algunos casos es también

Page 148: visual_c++

posible no crear documento alguno, solo llamar a esta relación con el nombre de las dos

tablas, por ejemplo rel perros/gatos, rel clientes/productos, etc. ( aunque no es

recomendable o muy explicativo).

Igualmente es muy recomendable,, al describir un proceso cualquiera y su conjunto de

relaciones, no usar o buscar relaciones muy abstractas, porque será casi imposible pasarlas

a un modelo de información implementado en computadora, por ejemplo la relación al

cliente le gustan los autos, por ejemplo los perros corretean gatos, etcétera.

En resumen las relaciones y en general el proceso deben de ser simples, y documentales.

Para terminar de complicar las cosas un modelo completo de información, no se construye

con dos tablas básicas, un par de procesos y una cuantas relaciones o documentos, el

modelo completo incluye un montón de tablas básicas, otro montón de procesos diferentes

entre ellas, y cada proceso contiene un conjunto amplio de relaciones.

Por ejemplo en una Empresa de ―AUTOREFACCIONES‖, fácilmente se encuentran las

tablas básicas, de clientes, mecánicos, proveedores, partes, proceso de ventas al publico,

proceso de compras a proveedores, etcétera y cada proceso con su propio conjunto de

relaciones y o documentos.

TAREAS PROGRAMACION C++BUILDER

1.- PARA UNA EMPRESA DE VIDEO, IDENTIFICAR SUS TRES TABLAS MAS

BASICAS , SUS DOS PROCESOS MAS IMPORTANTES Y CUANDO MENOS CINCO

RELACIONES EN CADA PROCESO.

2.- CONSTRUIR UN MODELO DE TRES TABLAS BASICAS, DOS PROCESOS Y

CUATRO RELACIONES PARA UNA CASA DE EMPEÑO.

3.- UN EMPRESARIO DE EXITO, TIENE VARIOS LOTES PARA LA VENTA DE

AUTOS, VARIOS TALLERES MECANICOS PARA SU REPARACION, VENDE LOS

AUTOS A CREDITO Y AL CONTADO, CONSTRUIR UN MODELO SIMPLE DE

BASE DE DATOS RELACIÓNALES PARA SU IMPLEMENTACION.

Page 149: visual_c++

16.- TIPOS DE RELACIONES C++BUILDER

Analizando a fondo, la mayoría de las relaciones y sus documentos son del tipo llamado

1:M ( uno a muchos), es decir cada tabla de relación o documento contiene un renglón de la

primera tabla y muchos renglones de la segunda tabla, por ejemplo en una factura solo hay

o se encuentra, un cliente y muchos productos, en una receta por ejemplo solo hay un

paciente pero hay muchas medicinas, en una orden de compra o de pedido hay un solo

proveedor pero hay muchos productos y así sucesivamente.

En general existen los siguientes tipos de relaciones:

Repitiendo el caso mas común de relaciones, son las de 1:M, en este caso, solamente la

tabla de relación no permite resolver el problema de información, en casos de relaciones

1:M se ocupara una segunda tabla llamada detalle-relación.

El modelo completo de tablas para una y solamente una relación de tipo 1:M es;

tabla de 1(uno) tabla de M(muchos)

- Clave de uno - Clave de muchos

- otros campos - otros campos

tabla de R(relación) tabla detallerelacion

- Clave de relación - Clave de relación

- Clave de uno - Clave de muchos

- otros campos - otros campos

Este es el modelo principal de una base de datos relacional y se deberá siempre aplicar

cuando se tenga que construir una base de datos que tenga una relación 1:M.

Ejemplo;

Clientes(1) Productos (M)

Facturas(relación) DetalleFactura (detallerelación)

Clave Factura Clave Factura

Clave Cliente Clave Producto

Page 150: visual_c++

Fecha Factura Cantidad Producto

etcétera Factura Etcétera

ejemplo;

Pacientes (1) Medicinas (muchos)

Recetas (relación) DetalleReceta

Como se observa en los dos ejemplos, las tres claves ( la de uno, la de muchos y la de

relación) solo se repiten una sola vez en otra tabla.

De nuevo un problema o sistema de información, que descansa en una base de datos de tipo

relacional, y solo contiene una relación de tipo 1:M ocupa cuatro tablas ( la de uno, la de

muchos, la de relación y la de detalle-relacion).

Si el problema incluye una segunda relación 1:M por ejemplo NotaDeVentaque se deriva

de las mismas dos tablas básicas, entonces el modelo completo se resuelve con seis tablas (

las dos básicas, las dos de relación y las dos de detalle) y así sucesivamente.

Como se dijo anteriormente un problema sencillo de información por ejemplo el de una

tienda de vídeo, ocupa unas cuatro o cinco tablas básicas, unos dos o tres procesos y cada

proceso dos o tres relaciones mínimo, entonces el sistema se resuelve con 20 o mas tablas,

las quejas sobre este modelo a Codd (creador del modelo relacional de bases de datos).

El caso de relaciones 1:1 se resuelve con solo tres tablas, solo agregar también en la tabla

de relación la clave de muchos.

El caso de relaciones 1:Cte también se resuelve con tres tablas, solo agregar en la tabla de

relaciones tantas claves de la tabla de constantes como constantes existan en la relación, por

ejemplo si la relación es boleta de calificaciones y solo contiene tres materias, entonces se

ocupan la tabla de alumnos, la de materias y la tabla de boleta, esta ultima tendría clave

alumno, clave materia1, clave materia2, clave materia3.

El caso de relaciones M:M solo se resuelve localizando o identificando o de plano

construyendo, la dos relaciones 1:M originales de donde salió este documento, por ejemplo

en el informe al gobierno de todos los distribuidores de equipo de computo y todos los

equipos que compraron en el mes, es probable que este informe se construya con las tablas

de relaciones de facturas y notas de ventas.

TAREAS PROGRAMACION C++BUILDER

1.- CONSTRUIR EL MODELO DE LAS CUATRO TABLAS PARA LA RELACION EL

CLIENTE COMPRA A CREDITO PARTES O REFACCIONES EN LA

―REFACCIONARÍA‖.

Page 151: visual_c++

2.- CONSTRUIR EL MODELO DEL CLIENTE APARTA JOYAS EN UNA ―JOYERIA‖.

3.- CONSTRUIR EL MODELO COMPLETO DE CLIENTES Y PELICULAS CON LAS

RELACIONES, RENTA PELICULAS, DEVUELVE PELICULAS, DAÑA PELICULAS,

COMPRA PELICULAS.

4.- CONSIDERANDO EL PROBLEMA DE LOTES DE AUTOS, AUTOS, CLIENTES,

TALLERES CONSTRUIR MODELO PARA LOS PROCESOS DE COMPRA DE

AUTOS, Y RESTAURACION DE AUTOS( ES CUANDO EL LOTE COMPRA LOS

AUTOS Y LES DA UNA ARREGLADA PARA SU VENTA).

Page 152: visual_c++

17.- C++BUILDER MODELO RELACIONAL Y DATABASE DESKTOP

El modelo relacional completo, antes de traspasarlo al DataBase DESKTOP, debe incluir

todo lo siguiente:

tabla de uno

* Clave de Uno S, P* (S = ISuno ) * otros

tabla de muchos

* Clave de Muchos S, P* (S = ISmuchos) * otros

tabla de relación

* Clave Relación S, P* (S = ISrelacion) * Clave de Uno S, IR (S = ISReluno)

* otros

tabla de detalle

* Clave Relación C*,S,IR (S = Isdetrel IR = IRDetrel) * Clave Muchos C*,S,IR (S =

ISDetmuchos IR = IRDetmuchos) * otros

notas:

P* , significa que dicho campo es una clave o llave primaria, en DataBase Desktop,

recordar que solo se ocupa un click en la columna llamada KEY para que aparezca la *

C* , se conocen como claves o llaves compuestas, para crear una clave o llave compuesta

solo marcar con *, los dos campos involucrados

S, es un llamado índice secundario ( secondary índex), se usa para dar un orden o

clasificación alterno a la tabla indicada, por ejemplo en la tabla clientes, se puede marcar

ciudad como índice secundario, para que de ser necesario en lugar de desplegarse ordenada

por clave o numero de cliente, se despliegue ordenadas por ciudades, o por nombres, o por

teléfonos, etc.

El (S = ISuno ) es el nombre que va a recibir el índice secundario, por ejemplo si la tabla es

clientes el índice secundario se llamara Isclientes, otra vez en el caso (S = ISmuchos ) si la

tabla es productos al índice secundario se le pondrá el nombre de Isproductos.

Párrafos mas adelante, se muestra el procedimiento para crearlos dentro del Database

Desktop.

Page 153: visual_c++

IR, se conocen como integridad referencial ( integrity referential), se utiliza para garantizar

que nuevos elementos en una tabla ya existan en la otra tabla, por ejemplo de IR entre la

tabla de relación y la tabla de uno, en el caso de Facturas y Clientes, garantiza que no se

pueda capturar la clave de un cliente cualesquiera, si este cliente no existe o esta dado de

alta en la tabla de clientes.

Otra vez la IR entre la tabla de detalle y la tabla de muchos, en el caso de

DETALLEFACTURA y PRODUCTOS, garantiza que no se pueda capturar la clave de un

producto, en la tabla de detalle, si este producto no existe, en la tabla de relación y así

sucesivamente.

(IR = IRReluno) es el nombre que se le va a asignar a la relación, para el ejemplo que se

esta siguiendo se llamaría IRFacturaCliente, y así sucesivamente.

El procedimiento para crear un índice secundario (S) dentro del DataBase Desktop es:

A)Tools, Utilities, Restructure y seleccionar tabla a indexar.

B)Click en ComboBox de la derecha, hasta que aparezca y seleccionar la opción Secondary

Indexes.

C)Click abajo en botón Define.

D)Aparece ahora el siguiente editor de índices:

E)Solo seleccionar el campo o atributo a indexar y luego click en flecha negra ADD para

que pase a la segunda ventana, luego click en OK.

Page 154: visual_c++

F)DD pregunta ahora por el nombre del índice mediante la siguiente ventana:

G)Escribir el nombre ya propuesto por ejemplo ISNomProducto y click en OK.

H)DD regresa ahora ala tabla principal, click en botón SAVE para grabarla con los nuevos

cambios.

I) Cerrar la tabla, con click en X arriba.

J) Repetir los pasos desde inciso A, para construir los índices de las otras tablas.

El Procedimiento para crear las integridades referenciales es:

1.- Tools, Utilities, Restructure y seleccionar tabla a construirle la integridad referencial.

2.- Click en ComboBox de la derecha, hasta que aparezca y seleccionar la opción

Referential Integrity.

3.- Click abajo en botón Define.

4.- Aparece ahora el siguiente editor:

Page 155: visual_c++

5.- En la primera ventana están todos los campos de la tabla a enlazar (factura) solo doble

click en el campo de enlace (Clave Cliente) y observar que se pase a la ventana chica.

6.- En la segunda ventana están todas las tablas del directorio, solo doble click en la tabla a

enlazar (clientes), con eso el campo de enlace (Clave Cliente) de dicha tabla también pasa a

la ventanilla izquierda, como se observa en la gráfica anterior.

7.- En resumen la integridad referencial permite el enlace entre las dos tablas, su efecto

practico, como ya se indicó es que tablas unidas de esta manera no permiten altas o captura

de un renglón, si dicho renglón de información, no existe en la tabla enlazada.

8.- Para terminar este proceso solo click en el botón OK.

9.- DD pregunta ahora por el nombre que tendrá, esta integridad referencial o enlace usando

la siguiente ventana:

10.-Escribir el nombre ya propuesto por ejemplo IRFacturaCliente, en este ejemplo, se esta

simbolizando un enlace de la tabla de factura hacia la tabla de cliente, usando el campo

común en ambas de Clave Cliente.

11.-DD regresa ahora a la tabla principal, click en botón SAVE para grabarla con los

nuevos cambios.

12.-Cerrar la tabla, con click en X arriba.

13.-Repetir los pasos desde inciso A, para construir los enlaces o integridad referencial con

las otras tablas.

Como una nota u observación importante, recordar que es muy simple el proceso de que

enlazar o de a que construirle las integridades referenciales, en este ejemplo es de Factura

hacia Cliente con Clave Cliente, luego es de DETALLEFACTURA a Factura con Clave

Factura y al final es de DETALLEFACTURA hacia Producto con Clave Producto.

Otra vez, siempre es lo mismo, de Receta hacia Paciente con Clave Paciente, es de

DetalleReceta hacia Receta con Clave Receta y al final de DetalleReceta hacia Medicina

con Clave Medicina.

Page 156: visual_c++

Recordar que solo son tres campos claves y solo están repetidos dos veces, y dos de ellos

siempre están en Detalle, por eso solo son tres enlaces o IR y dos de ellos se encuentran en

Detalle.

El procedimiento general para crear las cuatro tablas, en DataBase Desktop y en el

siguiente y estricto orden es:

1.- Crear un directorio o folder especifico para almacenar las cuatro tablas, con explorer o

my computer de Windows.

2.- Crear las cuatro tablas, solo marcando las llaves primarias y llaves compuestas, (

estrellitas).

3.- Ir cargando las cuatro tablas para aplicarles el procedimiento que se dio para índices

secundarios.

4.- Hasta al final ir cargando las dos tablas que solo se ocupan para crear los enlaces o

Integridad Referencial ( observar las notas, solo se crean enlaces con la tabla de relación y

dos veces con la tabla de detalle).

5.- Abrir e ir cargando las tablas también en orden (1,M,R,D) para capturarles unos cuantos

renglones de pruebas.

TAREAS PROGRAMACION C++BUILDER

1.- CONSTRUIR Y CARGAR EN DATABASE DESKTOP LA RELACION

RECETA(SON CUATRO TABLAS).

2.- CONSTRUIR Y CARGAR EN DATABASE DESKTOP LA RELACION ORDEN DE

COMPRA.

3.- CONSTRUIR EN DATABASE DESKTOP LA RELACION DE LA NOTA DE

RENTA DE PELICULA.

4.- CONSTRUIR EN DATABASE DESKTOP LA RELACION RECIBO DE RENTA(

AQUI SOLO SON TRES TABLAS Y EXISTE TAMBIEN UNA IR O ENLACE DE

RECIBO A DEPARTAMENTOS).

Page 157: visual_c++

18.- APLICACIONES CON TABLA DE RELACION C++BUILDER

Es tiempo ahora de construir la aplicación final con las tablas construidas con el modelo

relacional de bases de datos.

Recordar primero que en general, el usuario solo tendrá acceso y podrá manipular tres de

ellas, la tabla de uno, la tabla de muchos y la tabla de relación, las dos primeras de ellas son

construidas usando aplicaciones normales por renglón y por tabla, como se realizo en los

primeros temas del capitulo, es recomendación y sugerencia que la tabla de uno se

construya usando el formato de renglón y la tabla de muchos se construya usando el

formato de tabla(DBGrid).

En cuanto a la aplicación a construir con la tabla de relación, también dentro de

C++Builder se debe construir los enlaces con las tablas ya descritas, con los siguientes

considerandos ;

T1-->TR ; TM-->TDET ; TDET-->TREL

Ej. 1) CTE-->FACTURA ; PROD-->DETFAC ; DETFACT-->FACT

ej. 2) PAC-->RECETA ; MED-->DETREC ; DETREC-->RECETA

OBSERVAR Y TOMAR EN CUENTA COMO Y DE DONDE HACIA DONDE SE

GENERAN LOS TRES ENLACES DENTRO de C++BUILDER.

Tomar nota de las diferencias entre los enlaces en DD y en C++Builder.

Estos enlaces se hacen usando dos propiedades extras en los componentes Table dentro del

C++Builder, propiedades que se explican y demuestran mas adelante.

Recordar ademas, que es en la primera tabla de cada uno de estos tres tipos de enlaces.

donde se establece la relación de enlace o donde se manipula la propiedad correspondiente.

Para construir una aplicación para la tabla de relación:

1.- Aunque es solo la tabla de relacion, la que está aparentemente a la vista del usuario, la

forma debera contener los cuatro componentes Table, puesto que esta relación, descansa y

ocupa las cuatro tablas.

2.- Estos cuatro componentes Table se colocaran y usaran en el siquiente orden para el

ejercicio de aplicación:

Table1 →Tabla de uno (ej. clientes)

Table2 →Tabla de muchos (ej. productos)

Page 158: visual_c++

Table3 → Tabla de relación (ej. facturas)

Table4 → Tabla de detalle (ej. detallefactura)

3) Igualmente se ocupan cuatro componentes DataSource en el mismo orden, es decir

DataSource1 apunta a Table1, DS2 a T2, y así sucesivamente.

4.- La Forma que contiene la tabla de relación se organiza usando tres componentes Panel

para su mejor distribución, estos componentes Panel, se construyen y contienen:

DBNav1(DS3) Nva Fact

DBEdit(DS3)

Panel de uno

Cve Cte Nom Cte Dir Cte etc.Cte NVO Cte

DBEdit DBEdit DBEdit DBEdit Buttonl

(DS3) (DS1) (DS1) (DS1)

Panel de detalle

NUM Prod. Nom Prod. etc. Prod.

DBEdit DBEdit DBEdit

(DS4) (DS2) (DS2)

DDBNav2(DS4)

Notas:

1.- Es muy importante que se respete el tipo de componente que va dentro de cada panel y

mas importante aún que dichos componentes apunten a el DataSource indicado entre

paréntesis.

Page 159: visual_c++

2.- Igualmente es muy importante, el siguiente código que se deberá poner en el evento

OnExit del ultimo DBEdit que se tenga en pantalla y que se cargue o capture por parte del

usuario de la tabla de relación y su DataSource3 correspondiente, generalmente es la clave

relación o fecha, en particular seria el ultimo componente que se tenga apuntado a DS3, es

en este componente, donde se debe usar:

OnExitDBEdit#() { Table3→Refresh();}

Esta instrucción actualiza los datos o renglón de la tabla de relación, antes que la tabla de

detalle, haga una búsqueda, dentro de la tabla de relación.

3.- El código de los tres botones de ordenes, es el siguiente:

OnClickButton1(){

//ocultar la pantalla de factura y desplegar o llamar la pantalla de

clientes

}

OnClickButton2(){

Table4->Insert();

// para insertar un nuevo renglón en tabla de detalle

}

OnClickButton3(){

// primero operaciones pertinentes si es que existen y

// al final cerrar con la instrucción

Table4->Refresh();

// para cargar en disco el ultimo renglón de la tabla

// de detalle

}

\

4.- Como se observa los métodos Insert() y Refresh(), usados se derivan y se pueden

sustituir con DDBnavegadores y sus botones visibles correspondientes, pero se debe buscar

que el usuario los presione en el momento indicado.

5.- Este esquema se puede aplicar a cualquier tabla relacional(recetas, ordenes de compra,

solicitudes de servicios, etc.) solo realizar los ajustes correspondientes.

PROCEDIMIENTO PARA CONSTRUCCION DE TABLA RELACIONAL

Page 160: visual_c++

1.- CARGAR C++Builder.

2.- PONER LOS CUATRO COMPONENTES TABLE EN LA FORMA, Y CARGARLES

SUS TRES PROPIEDADES BASICAS(DATABASENAME, TableName,

Active),RESPETANDO EL ORDEN SUGERIDO (Table1→Tabla de uno, Table2→Tabla

de muchos, Table3→Tabla de relación, Table4→Tabla de detalle).

3.- PONER LOS CUATRO COMPONENTES DataSource QUE SE OCUPAN Y

APUNTARLOS A SU TABLA CORRESPONDIENTE EN ORDEN, ES DECIR

DS1→TABLE1, DS2→Table2, DS3→Table3, DS4→Table4, USANDO LA PROPIEDAD

DATASET DEL COMPONENTE DataSource.

4.- ARMAR Y CARGAR LOS TRES ENLACES ENTRE TABLAS YA SUGERIDOS,

ESTO ES T1→TR, 2) TM→ TDET, 3) TDET→TREL, USANDO LAS PROPIEDADES

MASTERSOURCE Y MASTERFIELD EN LA PRIMERA DE LAS DOS TABLAS EN

CADA RELACION, COMO SE DEMUESTRA CON EL SIGUIENTE EJEMPLO DE LA

PRIMERA RELACION ES DECIR, T1→TR.

1. SELECCIONAR LA TABLA DE CLIENTES ( LA DE UNO)

2. CLICK A UN LADO DE LA PROPIEDAD MASTERSOURCE Y SELECCIONAR

DATASOURCE3( QUE ES LA DE RELACION O FACTURA) CLICK A UN LADO EN

LA PROPIEDAD MASTERFIELD (DONDE ESTAN LOS TRES PUNTILLOS) Y SALE

EL SIGUIENTE EDITOR DE CAMPOS DE ENLACE:

3.

4. OBSERVAR QUE EN LA PRIMERA VENTANA ESTA EL CAMPO DE ENLACE

DE LA TABLA DE UNO, Y EN LA SEGUNDA ESTAN TODOS LOS CAMPOS

POSIBLES A ENLAZAR DE LA TABLA DE RELACION( FACTURA)

Page 161: visual_c++

5. COMO SE VAN A ENLAZAR AMBAS USANDO EL MISMO CAMPO (CLAVE

CLIENTE), SELECCIONAR (CLICK) ESTE MISMO CAMPO (CLAVE CLIENTE) EN

LAS DOS VENTANAS Y LUEGO CLICK EN BOTON ADD, EL ENLACE DEBE

APARECER EN LA VENTANA DE ABAJO, COMO SE MUESTRA EN LA

SIGUIENTE GRAFICA:

6.

7. LUEGO CLICK EN BOTON OK PARA FINALIZAR EL PROCESO

5.- EL PROCEDIMIENTO ANTERIOR 4.1) A 4.6) SE DEBERA REPETIR PARA LOS

DOS CASOS RESTANTES(TM→TDET, TDET→TREL).

6.- PONER LOS TRES COMPONENTES PANEL EN LA FORMA Y DENTRO DE

CADA PANEL, PONER Y APUNTAR LOS COMPONENTES YA DESCRITOS EN EL

MODELO ANTERIOR.

7.- RECORDAR PONER LOS TRES COMPONENTES BUTTON Y CARGARLOS CON

EL CODIGO QUE TAMBIEN YA SE INDICO.

EJEMPLO:

Page 162: visual_c++

1. PANTALLA DE DISEÑO

1. CODIGO

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

void __fastcall TForm1::Button1Click(TObject *Sender)

{ // En esta parte se oculta la ventana de factura

// y se llama la ventana de cliente

}

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

void __fastcall TForm1::DBEdit3Exit(TObject *Sender)

{ Table3->Refresh();

}

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

void __fastcall TForm1::Button2Click(TObject *Sender)

{

Table4->Insert();

}

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

void __fastcall TForm1::Button3Click(TObject *Sender)

Page 163: visual_c++

{

// operaciones y terminar con:

Table4->Refresh();

}

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

PANTALLA DE EJECUCION

TAREAS PROGRAMACION C++BUILDER

1.- CONSTRUIR UN MENU QUE CONTENGA Y LLAME LAS TABLAS CLIENTES,

PELICULAS Y RECIBO DE RENTA DE UNA VIDEOTIENDA

2.- CONSTRUIR UN MENU QUE CONTENGA Y LLAME LAS TABLAS PACIENTES,

MEDICINAS Y RECETAS DE UNA FARMACIA

3.- CONSTRUIR UN MENU QUE CONTENGA Y LLAME LAS TABLAS

PROVEEDOR, PRODUCTOS Y ORDEN DE COMPRA DE UNA REFACCIONARIA

Page 164: visual_c++

V UNIDAD C++BUILDER COMPONENTES

TEMA 1.- INTRODUCCION PROGRAMACION ORIENTADA OBJETOS

C++BUILDER

Los componentes son los elementos u objetos mas básicos de la programación visual

moderna, con ellos se construyen las diversas aplicaciones que se ejecutan bajo un

ambiente Windows.

En esta

UNIDAD, se pretende profundizar en el estudio de estos elementos básicos de construcción

de programas, en esta

UNIDAD se pretende:

* Comprender los conceptos de componentes , clases y objetos, tanto visuales como no

visuales.

* Instalación y mantenimiento de nuevos componentes visuales.

* Creación e instalación de componentes visuales.

* Creación e instalación de componentes no visuales.

Page 165: visual_c++

TEMA 2.- C++BUILDER COMPONENTES, CLASES Y OBJETOS

Como ya se menciono anteriormente, componentes son las piezas basicas, con las que se

arma, construye y diseña, una aplicacion cualesquiera.

Como se explico al principio del libro, la programacion moderna o actual, es de tipo visual,

pero su fondo o esencia es la llamada programacion orientada a objetos.

En orden o principio, recordar que todo en la vida o el universo, no es mas que un objeto de

cualquier clase o naturaleza ya sea material o inmaterial, todos los objetos tienen sentido,

forma, tamaño y un gran conjunto de caracteristicas que permiten diferenciarlos, pero

tambien clasificarlos y agruparlos, entre si.

Desde este punto de vista un programa en ejecucion o un sistema de información, se puede

considerar como un conjunto de objetos que como en la vida real interactuan entre si,

creandose entre ellos ya se una serie de relaciones e interacciones, programacion de punta o

avanzada ya toma en cuenta, la naturaleza dinamica de los propios objetos(esto es llamada

concurrencia, es decir la capacidad de existir en forma independiente y a la vez que el resto

de los objetos del sistema, esto se estudia mas a fondo en el siguiente capitulo de este

libro).

Sin embargo, su manifestacion programatica de los objetos, en los lenguajes modernos de

programacion, son las llamadas clases, es decir una clase es la representacion simbolica y

computacional de toda una serie de objetos con caracteristicas comunes entre si, por eso

existe la clase gatos, empleados, arboles, listas, reportes, vectores, etc, es decir pueden

existir tantas clases como objetos existen en el universo y cada clase contiene todos los

objetos con caraceristicas comunes entre si, o de la misma categoria o clasificaacion, un

ejemplo de una clase en un lenguaje de programacion es:

Class gatos{

public:

int edadgato;

AnsiString nombregato;

maullar();

capturardatosgato();

}gatonegro, garfield, gatotijuanense;

gatos::maullar(){ cin»―miauuuu‖;}

Page 166: visual_c++

gatos::capturardatos(){ cin»―dame edad‖; cout«edad; }

Como se observa, comprender, localizar y programar todas las carecteristicas o atributos de

una sola clase, es una tarea bastante grande, mientras que los comportamientos ( metodos

en oop) es todavia mas laborioso y complejo y si agregamos la interaccion natural existente

entre objetos ( los llamados eventos en oop), garantiza que existiran la necesidad de

ingenieros de software por mucho tiempo en el futuro.

Observar del ejemplo, que del conjunto de objetos que representa la clase, se derivan

instancias(gatonegro, garfield) individuales de esa clase, desgraciadamente a esas instancias

individuales tambien se les conoce como objetos y esto manifiesta o conduce a la confusion

entre las dos interpretaciones de el concepto objeto, en su sentido generico o universal y su

sentido particular o programatico, como una instancia derivada de una clase, problema

viejo en los ambientes de programacion.

Por ultimo un componente, se puede entender como la manifestacion visible de un objeto

en un ambiente de desarrollo visual, es decir un componente no son mas que algunos

aspectos o propiedades del objeto, que permiten la conceptualizacion y manipulacion de los

objetos en los programas de aplicaciones visuales.

En resumen objeto→clase→componente, es la escencia o trilogia clasica en la

programacion visual moderna.

Page 167: visual_c++

TEMA 3.- C++BUILDER INSTALACION Y MANTENIMIENTO DE COMPONENTES

VISUALES

En este tema, se estudia la manera de manipular, eliminar, etc, nuevos componentes y

folders o paginas de nuevos componentes, usando el menu de componentes que

proporciona C++Builder.

Para efectuar procesos simples con paginas y componentes ya contenidos en C++builder,

usar en la barra de menu, la opcion de componentes, donde su opcion mas elemental, es

―configure palette‖, que muestra la siquiente ventana:

La primera ventananita, permite manipular las paginas de componentes y la segunda

ventanita permite manipular los componentes, las operaciones mas elementales y a la vista

son, reaacomodar el orden de paginas o componentes, solo click en ellos y luego, usar las

flechas, eliminar y renombrar, para mover un componenente de una pagina a otra pagina,

solo arrastrarlo a la nueva pagina y borrarlo de la antigua.

Solo recordar que al final que para que todas las operaciones indicadas se lleven a cabo, se

debera reconstruir la libreria de componentes con la orden Component, Rebuild Library.

En principio se debera entender claramente que en la actualidad, miles de Ingenieros de

Software, se encuentran desarrollando cantidades increibles de componentes y galerias o

paginas de componentes, especializados en muchas y diversas tareas de programacion,

incluyendo empresas o compañias de diverso ambito y espcialidad que desarrollan

Page 168: visual_c++

software, muchos de estos componentes e incluso paginas completas de ellas, estan a la

disposicion de todos los programadores, en el INTERNET, una visita rapida a la pagina de

www.borland.com, y concretamente de C++Builder muestra los siguientes lugares y

categorias:

Trademarks & Copyright © 1997 Borland International, Inc.

En muchos de ellos, ademas existen mas bibliotecas o paginas de componentes, asi como

nuevas ligas o enlaces a otros lugares tambien muy interesantes.

Tambien aqui en y de Borland, se encuentra una biblioteca de componentes, especializados

en internet, que no fueron agregados a la version normal de C++Builder actualmente en el

mercado.

Otra manera de localizar componentes, es usar busquedas de ―C++Builder‖, ―C++Builder

Component‖ o ―Delphi Component‖ en los lugares de busquedas habituales, Yahoo,

Altavista, Excite, etc.

Ya localizados y en disco duro, los componentes o galerias, bibliotecas o paginas de

componentes y bajados al disco duro de nuestra maquina, se procede a dar el

procedimiento, para incorporlos a una de las paginas en C++Builder:

Page 169: visual_c++

TEMA 3.- C++BUILDER INSTALACION Y MANTENIMIENTO DE COMPONENTES

VISUALES

En este tema, se estudia la manera de manipular, eliminar, etc, nuevos componentes y

folders o paginas de nuevos componentes, usando el menu de componentes que

proporciona C++Builder.

Para efectuar procesos simples con paginas y componentes ya contenidos en C++builder,

usar en la barra de menu, la opcion de componentes, donde su opcion mas elemental, es

―configure palette‖, que muestra la siquiente ventana:

La primera ventananita, permite manipular las paginas de componentes y la segunda

ventanita permite manipular los componentes, las operaciones mas elementales y a la vista

son, reaacomodar el orden de paginas o componentes, solo click en ellos y luego, usar las

flechas, eliminar y renombrar, para mover un componenente de una pagina a otra pagina,

solo arrastrarlo a la nueva pagina y borrarlo de la antigua.

Solo recordar que al final que para que todas las operaciones indicadas se lleven a cabo, se

debera reconstruir la libreria de componentes con la orden Component, Rebuild Library.

En principio se debera entender claramente que en la actualidad, miles de Ingenieros de

Software, se encuentran desarrollando cantidades increibles de componentes y galerias o

paginas de componentes, especializados en muchas y diversas tareas de programacion,

incluyendo empresas o compañias de diverso ambito y espcialidad que desarrollan

Page 170: visual_c++

software, muchos de estos componentes e incluso paginas completas de ellas, estan a la

disposicion de todos los programadores, en el INTERNET, una visita rapida a la pagina de

www.borland.com, y concretamente de C++Builder muestra los siguientes lugares y

categorias:

Trademarks & Copyright © 1997 Borland International, Inc.

En muchos de ellos, ademas existen mas bibliotecas o paginas de componentes, asi como

nuevas ligas o enlaces a otros lugares tambien muy interesantes.

Tambien aqui en y de Borland, se encuentra una biblioteca de componentes, especializados

en internet, que no fueron agregados a la version normal de C++Builder actualmente en el

mercado.

Otra manera de localizar componentes, es usar busquedas de ―C++Builder‖, ―C++Builder

Component‖ o ―Delphi Component‖ en los lugares de busquedas habituales, Yahoo,

Altavista, Excite, etc.

Ya localizados y en disco duro, los componentes o galerias, bibliotecas o paginas de

componentes y bajados al disco duro de nuestra maquina, se procede a dar el

procedimiento, para incorporlos a una de las paginas en C++Builder:

Page 171: visual_c++

TEMA 4 INSTALACION PRACTICA DE COMPONENTES C++BUILDER

Ejemplo, un componente llamado my_panel que se encuentra en

www.nh.ultranet.com/~bsturk , (el componente se llama my_panel.zip, si no se encuentra

en el lugar indicado, rastrearlo por los medios ya dichos o usar un sitio de busqueda de

archivos como http://ftpsearch.ntnu.no/ftpsearch) este componente permite poner un panel

con un fondo tipo wallpaper en la ventana de la aplicacion:

PROCEDIMIENTO

1.-Bajarlo de Internet y ponerlo en un directorio temporal en disco duro.

2.-Descomprimirlo, observar que deberá haber cuando menos un archivo de tipo *.pas,

*.cpp, *.obj

3.-Copiar los archivos fuentes (.pas, .cpp, .obj, .res. etc.) a el folder BIN de C++Builder, si

C++Builder se instalo con las opciones de default, entonces el path es c:\program

files\borland\cbuilder\bin

4.- Cargar o arrancar el C++Builder.

5.- Dentro de menú principal, primero click en component.

6.- Click en Install (sale ventana Install component).

7.- Click en botón Add (sale una ventana llamada Add module).

8.- Click en botón browse (sale una ventana llamada Add component).

9.- Abajo cambiar el tipo de archivo ( Files of Type) de a .CPP o .PAS dependiendo del

código fuente obtenido con el componente.

10.- Ir subiendo arriba desde el directorio de projects hasta llegar al directorio BIN.

11.- Aquí en este directorio Bin, debe existir y aparecer ahora un archivo llamado

my_panel.cpp o .pas

12.- Seleccionar este ultimo archivo y click en botón open.

13.- C++Builder regresa ahora a la ventana Install Component,

14.- Click en botón OK.

Page 172: visual_c++

15.- Empieza ahora un proceso de compilación de librerías, esperar hasta que Done=Make,

click en OK, sigue reconstruyendo.

16.- Revisar que ahora en la barra de componentes, se encuentre una nueva pestaña

(Samples),con sus nuevo componentes.

17.- Recordar que con opción Configure Palete y Rebuild Library, se pueden reorganizar

paginas y componentes.

TAREAS PROGRAMACION C++BUILDER

1.- Buscar e instalar los componentes de Internet de Borland

2.- Buscar e Instalar un componente llamado wallpaper

3.- Buscar e instalar una pagina completa de componentes matemáticos.

Page 173: visual_c++

TEMA 5 CREACION E INSTALACION DE COMPONENTES VISUALES

C++BUILDER

La herramienta mas poderosa de la programacion moderna (objeto-visual) es la capacidad

increible y la manera tan sencilla de poder crear y manipular nuestros propios componentes,

que seguramente seran, mucho mas faciles de usar y de entender, que los que trae de default

el C++Builder o los obtenidos de Internet.

Supongase que se quiere un componente muy especializado o mas estetico, por ejemplo

TRadio o TGrabadora (observar que componentes personales empiezan con la letra T, esto

es una convencion), solo se tiene que :

* primero derivarlo de algún componente del C++Builder que se le parezca o sea

apropiado, por ejemplo el media player.

* luego modificarle, o agregarle algunas o nuevas propiedades, esto se hace mediante

código ya conocido,

* después agregarle nuevos eventos, o programarle, algún default a los ya heredados.

* al final, instalarlo en alguna de las paginas de componentes.

Notas.

1.- Todo nuevo componente visual, se debera derivar de algun componente ya creado.

2.- Todo componente hereda todas las propiedades (caracteristicas),

metodos(procedimientos o funciones propios) y eventos (respuestas programadas del

componente a una interacción con otro objeto o componente) del componente padre.

3.- Borland provee de una tabla, que muestra todos los componentes de caracter visual y no

visual, dicha tabla es necesario conocerla, para poder localizar el componente apropiado,

para derivar el componente que se esta creando.

Diagrama Simplificado de la jerarquía de componentes

Page 174: visual_c++

* tomado de Component Writer's Guide

* El diagrama jerárquico completo, es muy grande y muestra mas de 100 clases y objetos,

es necesario conseguirlo y tenerlo a la mano.

El ejemplo será muy simple, se derivara un componente llamado miboton a partir del

componente visual TButton, solo se modificaran algunas propiedades.

1.- Cargar el C++Builder

2.- File, Close All

3.- Component, new y aparece la siguiente ventana:

Class Name = miboton.

Ancestor Type= usar flechita para buscar y seleccionar TButton.

Palette Page = usar flechita para buscar y seleccionar Standar.

Click en Ok

Page 175: visual_c++

4.- Aparece ahora el siguiente código dentro de unit1.cpp:

observar las cuatro partes o áreas bien diferenciadas entre si y la notas (encerradas entre

{{}} personales puestas ahí para su aclaración.

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

{{ primera área, solo código para incluir la librería de componentes

visuales(vcl.h) y una librería de interfase(mas adelante se explica que

significa(ver Pascal)) llamada unit.h }}

#include <vcl\vcl.h>

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

{{ segunda parte, código de C++Builder para verificar que el componente

creado miboton, es derivado de un componente valido y visual existente,

en este caso de TButton }}

static inline miboton *ValidCtrCheck()

{

return new miboton(NULL);

}

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

{{ tercera área y la mas importante, es el constructor (primer

procedimiento o función que se ejecuta cuando se usa este componente, es

decir se activa automáticamente en el momento de ponerlo en Form1), es

decir es en esta parte donde se pueden agregar las modificaciones a las

propiedades que se pretenden hacer, posteriormente desde aquí también se

puede enlazar o llamar o invocar a otros métodos propios }}

__fastcall miboton::miboton(TComponent* Owner): TButton(Owner)

{

}

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

{{ cuarta área, código de C++Builder para registrar nuestro componente en

la pagina "Standar" }}

namespace Unit1

{void __fastcall Register()

{

TComponentClass classes[1] = {__classid(miboton)};

Page 176: visual_c++

RegisterComponents("Standard", classes, 0);

}

}

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

Como se observa, solo se deberá usar la tercera área, solo escribir el

siguiente código dentro de las llaves que están abajo del constructor.

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

__fastcall miboton::miboton(TComponent* Owner): TButton(Owner)

{

Height = Height * 2;

Width = Width * 3;

Font->Color=clGreen;

Caption = "Hola, Bienvenido a C++Builder";

}

Se ha insistido bastante, que es necesario conocer y estudiar y aprender todas las

propiedades, métodos y eventos de todos los componentes visuales.

5.- File, Save As, escribir miboton y luego click en Save.

Con este paso el nuevo componente miboton, queda en el directorio Bin(en dos archivos,

miboton.cpp y miboton.h) de C++Builder, listo para instalarlo en la paleta de componentes,

los siguientes pasos son similares a la instalación de componentes bajados de Internet.

6.- File, Close All

7.- Componente, Install

8.- Add

9.- Browse y click en miboton

10.- Open, y ya debe aparecer abajo en la ventana izquierda de componentes instalados.

12.- Click en OK, y empieza a compilar la librería de componentes, y esperar hasta que

Done=Make y entonces click en OK.

Page 177: visual_c++

Si no hay errores, el componente miboton ya se encuentra en la pagina standard y listo para

que lo use cualquier aplicación, si hay errores, usar el siguiente procedimiento de

corrección y modificación de errores y componentes.

Page 178: visual_c++

TEMA 6 CORRECCION Y MODIFICACION DE COMPONENTES VISUALES

C++BUILDER

Procedimiento:

1.- File, Close All

2.- File, Open y subir hasta el directorio Bin de C++Builder, click en miboton.cpp, para

cargarlo.

3.- Corregirlo o modificarlo.

4.- File, Save

5.- File, Close All

6.- Component, Rebuild Librery

7.- Done=MaKe, entonces click OK

Page 179: visual_c++

TEMA 7 ELIMINACION DE COMPONENTES C++BUILDER

Recordar que con la opción de Delete en configure Palette, solo se eliminan lógicamente

los componentes visuales instalados.

Este procedimiento elimina completamente los componentes o paginas, para recuperar

paginas se deberá reinstalar C++Builder, para recuperar componentes propios se deberán

crearlos e instalarlos de nueva cuenta.

Procedimiento:

1.- File, Close All

2.- Componente, Install

3.- Seleccionar y click en la ventana derecha, la pagina o componente a remover

4.- Click en botón Remove

5.- Click en OK y empieza la compilación hasta que Done=Make y OK

6.- Cerrar Builder y con el explorer o Mycomputer de Windows ir al directorio Bin de

C++Builder, buscar y eliminar los dos archivos del componente, en este ejemplo

miboton.cpp y miboton.h

Page 180: visual_c++

8.- AGREGANDO UN RECURSO BITMAP AL COMPONENTE C++BUILDER

A cada componente se le puede asociar tres tipos de recursos graficos:

a) Un bitmap.- Es un icono grafico creado para sustituir, el icono de default en la barra de

componentes.

b) Un icon.- Grafico pequeño que aparece en la parte superior de un componente.(observar

Form1).

c) Un cursor.- Algunos componentes tiene la propiedad de manejar un cursor diferente al

default(la flechita), es posible crear cursores especiales y asignarlos al componente( si el

componente tiene está propiedad), en el momento que el componente recibe el focus del

programa, es decir en el momento que entra el cursor de default, se activara el nuevo

cursor.

Procedimiento:

Se supone que ya esta creado e instalado el componente original, en este ejemplo

miboton.cpp y miboton.h

1.- File, Close All

2.- Component, Install, seleccionar miboton.cpp, Remove, Ok, esperar hasta Done=Make,

Ok

* Este paso remueve el componente con su viejo bitmap, de la paleta de cmponentes.

3.- Tools, Image Editor, que es una ventana muy parecida al paint.

4.- Dentro del editor de imagenes:

4.1.- File, new, Resource File, y aparece una nueva ventanita, que tiene como primer

renglon, -Contents

4.2- Cursor sobre Contents y click derecho para un minimenu y crearle un bitmap, un icon

y un cursor

4.3.- Cursor sobre bitmap y click derecho para, primerlo editarlo y segundo renombrarlo

con miboton ( atención es necesario que el bitmap se llame igual que el componente)

4.4.- Cursor sobre icon y click derecho para, primero editarlo y luego renomrarlo a miboton

Page 181: visual_c++

4.5.- Cursor sobre cursor y click derecho para, primerlo editarlo y luego renombrarlo a

miboton tambien.

*Esta ventanita debe verse como lo siguiente:

4.6.- File, Save As, conmo miboton.res

4.7.- File, Exit

5.- En C++Builder:

Component, Install, Add, Browse, miboton.cpp, open, ok,

esperar a Done=Make, Ok y ya debe aparecer el componente en la paleta con su nuevo

bitmap.

Page 182: visual_c++

TEMA 9 CREACION DE COMPONENTES NO VISUALES C++BUILDER

En este temas se analiza, la creación y construcción de componentes no visuales.

La necesidad de este tipo de componentes se desprende del hecho de que existen muchas

tareas de programación de carácter repetitivo a lo largo de la construcción de muchas

aplicaciones, por ejemplo se manejan en 10 programas, o tareas o aplicaciones distintas el

mismo conjunto de tres fórmulas matemáticas o financieras, etc.

En caso como estos, es mas conveniente crear un componente especializado en solución de

dichas fórmulas y estarlo reutilizando en las diversas aplicaciones que lo ocupen.

Para realizar esto primero diseñamos la clase correspondiente, tal como el ejemplo de

clases en paginas anteriores:

// declaración de la clase, sus variables y sus métodos

Class fórmulas

{

int areatriangulo( int base, int altura);

float pesosdolares (int pesos, float tipocambio);

double promedio(int calif1, int calif2);

}

// implementacion de los métodos de la clase

int formulas::areatriangulo(int base, int altura)

{ return base* altura /2 ;}

float formulas::pesosdolares(int pesos, float tipocambio)

{ return pesos/tipocambio; }

double formulas::promedio(int calif1, int calif2)

{return (calif1+calif2)/2.0 ;}

La pasamos ahora al C++Builder, el procedimiento comentado es:

Procedimiento:

1.- File, Close All

Page 183: visual_c++

2.- Componente New,

Clase Name = fórmulas

Ancestor = TComponent

Page = Standard

* Observar que todo clase no visual, se deriva de TComponent, con esto se asegura un

mínimo visual de propiedades, incluyendo un icono de default, para la barra de

componentes y un par de eventos, los métodos de la clase es lo que se va a construir y

programar.

3.- File Save As, fórmulas, Save

4.- A la vista queda el editor con formulas.cpp , en la parte de arriba donde dice #include

<formulas.h>, poner cursor encima y click derecho para el popupmenu, seleccionar la

primera opción, de open source/header file, y con esto ya se tendrán a la vista los dos

archivos que se ocupan para construir la clase, ellos son formulas.cpp y formulas.h

En estos dos archivos se construye la clase, la parte declarativa de la clase queda en el

archivo formulas.h y la parte de implementacion o los métodos quedan en el archivo

formulas.cpp, como observación en PASCAL solo se ocupa el archivo llamado unit.pas y

ahí quedan juntos pero en su área apropiada las dos partes de una clase, su declaración y su

implementación.

Observar el código ya generado por C++Builder de formulas.h;

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

#ifndef formulasH

#define formulasH

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

#include <vcl\SysUtils.hpp>

#include <vcl\Controls.hpp>

#include <vcl\Classes.hpp>

#include <vcl\Forms.hpp>

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

class fórmulas : public TComponent

{

prívate:

Page 184: visual_c++

protected:

public:

__fastcall fórmulas(TComponent* Owner);

__published:

};

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

#endif

1.- Recordar que es en este archivo el .h donde se hace la declaración de la clase.

2.- Observar que C++Builder ya definió la clase y la hizo un descendiente publico de

TComponent, esto de publico es para permitir que todos los demás componentes puedan

accesar las propiedades y métodos de la clase Fórmulas.

3.- Variables, métodos( procedimientos y funciones) y propiedades que ocupe la clase

fórmulas deberán declararse dentro de la llaves.

4.- Tomar nota que pueden existir cuatro tipos diferente de variables, métodos y

propiedades, ellos son:

prívate: solo métodos dentro de la propia clase, tienen

acceso y pueden manipularlos.

protected: No pueden ser accesados por código fuera de la la clase, pero si por métodos de

la propia clase.

public: Código externo, otras clases y métodos propios pueden accesarlos.

_published: Solo para propiedades que se quiera que aparezcan en el inspector de objetos.

5.- Para el ejemplo de la clase que se esta manejando, se escriben o mejor dicho declaran

los métodos en la parte publica de la clase, como en el siguiente ejemplo

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

#ifndef formulasH

#define formulasH

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

Page 185: visual_c++

#include <vcl\SysUtils.hpp>

#include <vcl\Controls.hpp>

#include <vcl\Classes.hpp>

#include <vcl\Forms.hpp>

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

class fórmulas : public TComponent

{

prívate:

protected:

public:

__fastcall fórmulas(TComponent* Owner);

int areatriangulo( int base, int altura);

float pesosdolares (int pesos, float tipocambio);

double promedio(int calif1, int calif2);

__published:

};

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

#endif

6.- La parte de implementacion, se escribe al final del archivo .cpp, como se muestra en el

siguiente ejemplo.

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

#include <vcl\vcl.h>

#pragma hdrstop

#include "formulas.h"

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

static inline fórmulas *ValidCtrCheck()

{

return new fórmulas(NULL);

Page 186: visual_c++

}

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

__fastcall formulas::formulas(TComponent* Owner):TComponent(Owner)

{

}

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

namespace Fórmulas

{

void __fastcall Register()

{

TComponentClass classes[1] = {__classid(fórmulas)};

RegisterComponents("Standard", classes, 0);

}

}

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

// implementacion de los métodos de la clase

int formulas::areatriangulo(int base, int altura)

{ return base* altura /2 ;}

float formulas::pesosdolares(int pesos, float tipocambio)

{ return pesos/tipocambio; }

double formulas::promedio(int calif1, int calif2)

{return (calif1+calif2)/2.0 ;}

* Solo se escriben los últimos renglones y en la posición indicada, es decir al final del

archivo .cpp

7.- Files, Save All

8.- File, Close All

9.- Component, Install, Add, Browse, formulas.cpp, Open, Ok hasta

Page 187: visual_c++

que Done=Make, entonces OK

* Observar el nuevo icono de fórmulas en la barra de componentes.

Ejemplo de aplicación:

1. Pantalla de Diseño:

b) Código

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

void __fastcall TForm1::Button1Click(TObject *Sender)

{

Edit3->Text=formulas1->promedio(Edit1->Text.ToInt(),

Edit2->Text.ToInt() );

}

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

3. Pantalla de corrida

Page 189: visual_c++

VI UNIDAD C++BUILDER MULTIPROCESAMIENTO

C++BUILDER TEMA I INTRODUCCION

Uno de los elementos o aspectos mas usados y aprovechados por todos los usuarios de

Windows, es la propiedad que tiene Windows de realizar múltiples tareas a la vez, es con

esta característica por la que se puede tener abiertas tres o mas ventanas a la vez y cada una

de ellas realizando su propia tarea, por ejemplo se puede estar checando ortografía en una

ventana de word, al mismo tiempo buscando un ítem en una columna muy grande de excel,

y a la vez dos o mas ventanas de netscape están bajando software, etc.

Esta capacidad de MULTIPROCESAMIENTO ha sido muy poco aprovechada en los

ambientes de programación, C++Builder hace fácil la tarea de construir programas o

aplicaciones que tomen ventaja de esta capacidad.

Una de las principales razones de este problema, es que los ingenieros de software

(programadores) todavía están muy acostumbrados a razonar los programas o aplicaciones

como un conjunto secuencial y finito de procesos, donde la ejecución de uno de ellos

depende enteramente de la ejecución de los anteriores.

Es mejor y necesario considerar un programa o aplicación, como un conjunto de objetos

interactuando entre si, desde este punto de vista, algunos o muchos de los objetos pueden

tener su propia existencia y tiempo de ejecución en forma autónoma e independiente del

resto de los demás.

Por ejemplo en una aplicación cualquiera, existirán objetos que efectivamente dependan de

la terminación de la funcionalidad de otro objeto, pero es claro que también existirán partes

u objetos con una finalidad propia e independiente de los demás, estos últimos son

candidatos para convertirse en objetos de tipo multiproceso, es decir objetos que se ejecutan

ya no en forma secuencial sino concurrente es decir al mismo tiempo que los demás.

Ejemplo de ellos, se puede construir un objeto cuya función sea exclusivamente a localizar

u dato en una tabla o base de datos muy grande, en este caso, el programa principal solo

tendrá que ir creando instancias de este objeto y mandarle su parámetro de búsqueda, de

esta manera se podrán hacer muchas consultas al mismo tiempo a la tabla, sin tener que

esperar que termine una consulta, para empezar otra.

Una situación similar seria múltiples reportes de impresión, donde cada uno de ellos seria

un hilo de un proceso.

Mas ejemplos:

- Un objeto que este generando continuamente números aleatorios

Page 190: visual_c++

- Un objeto reloj

- Un objeto que este desplegando dos o mas imágenes muy similares continuamente(30

frames o imágenes por segundo y se tiene una película)

- Un objeto que este actualizando continuamente una base de datos

- etc. ( este etc. es problema sugerido)

C++Builder, recomienda solo hasta 16 procesos ejecutándose concurrentemente a la vez.

Page 191: visual_c++

TEMA 2 OBJETOS CONCURRENTES C++BUILDER

La buena noticia, C++Builder ya trae incorporado un objeto de tipo concurrente llamado

Thread object, que pertenece a la clase TThread ( ver en ayuda sus propiedades y métodos)

Se analiza el objeto Thread en su perspectiva mas simple y se anexan comentarios para su

comprensión:

Procedimiento:

1.- File, Close All

2.- File, New, Thread Object class name = proceso1

3.- File, Save As

- abrir folder tarea1

- proceso1

4.- Click derecho en donde dice #include ―proceso1.h‖ y open source/header, para tener a la

vista los dos archivos normales de un componente proceso1.cpp y proceso1.h

* Observar que este objeto, crea una clase llamada proceso1 derivada de la clase Thread.

* Esto también significa que en proceso1.h se almacena la declaración o definición de la

nueva clase proceso1 y que en el archivo proceso1.cpp se almacenara la implementación de

los métodos que contenga la clase proceso1, tal como se analizo en la

UNIDAD de componentes.

5.- El Código de proceso1.h es;

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

#ifndef proceso1H

#define proceso1H

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

#include <vcl\Classes.hpp>

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

class proceso1 : public TThread

Page 192: visual_c++

{

prívate:

protected:

void __fastcall Execute();

public:

__fastcall proceso1(bool CreateSuspended);

};

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

#endif

* Una clase proceso1 descendiente de la clase TThread, no hay sorpresas aquí.

* Un método protegido llamado Execute(), este método es muy importante porque cuando

se crea una instancia de la clase proceso1, todo el código que contiene es ejecutado

automáticamente, en otras palabras, es dentro de este método donde se coloca el código del

proceso ( en el archivo de implementación).

* El constructor proceso1, lleva como parámetro una variable booleana es decir con valor

true o valor false.

* Además el propio constructor como se observa en el código crea el proceso, pero el hilo

lo tiene suspendido, en cuanto se active o continúe el proceso, este constructor llama o

activa el método Execute().

6.- El código de proceso1.cpp es:

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

#include <vcl\vcl.h>

#pragma hdrstop

#include "proceso1.h"

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

// Important: Methods and properties of objects in VCL can

// only be used in a method called using Synchronize, for // // example:

//

// Synchronize(UpdateCaption);

Page 193: visual_c++

//

// where UpdateCaption could look like:

//

// void __fastcall proceso1::UpdateCaption()

// {

// Form1->Caption = "Updated in a thread";

// }

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

__fastcall proceso1::proceso1(bool CreateSuspended)

: TThread(CreateSuspended)

{

}

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

void __fastcall proceso1::Execute()

{

//---- Place thread code here ----

}

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

* No hay muchas sorpresas, solo la implementación de los dos métodos que contiene la

clase:

1.- El constructor proceso1, con su parámetro

2.- El método Execute() que deberá contener el código del proceso y que se activara cuando

se resuma o se pida que se continúe el proceso.

* Pero si existen unos comentarios o recomendaciones muy importantes que siempre

deberán tenerse en cuenta.

El resumen de la recomendación es que nunca se deberá poner dentro del código del

método Execute(), ninguna instrucción que referencie directamente un componente de

VCL, incluyendo Form1 o cualquier componente visual.

Page 194: visual_c++

* Si el Método Execute(), necesita procesar cualquier elemento o componente visual,

deberá hacer una llamada a un segundo método que si podrá manipular directamente la

forma o el componente necesitado, y además la llamada de Execute() al segundo método,

deberá ser dentro de un método especial de Execute(), llamado Synchronize(segundo

método).

* El ejemplo que se da en el comentario, es que se pretende que dentro de un proceso

concurrente o hilo, se actualice el Caption de Form1, recordando lo anterior, ese

actualización no puede hacerse directamente dentro del método Execute(), en su lugar

Execute(), hace un llamado a otro método(UpdateCaption) de la clase, para que este ultimo

método lo actualice.

Se construye el primer programa concurrente, usando el ejemplo que esta en el comentario.

Procedimiento:

1.- Crear el Thread Object, grabarlo como se indico, y cargar a la vista los dos archivos,

proceso1.h y proceso1.cpp

2.- Modificar los códigos con las siguientes instrucciones:

2.1.- proceso1.h

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

#ifndef proceso1H

#define proceso1H

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

#include <vcl\Classes.hpp>

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

class proceso1 : public TThread

{

prívate:

protected:

void __fastcall UpdateCaption();

void __fastcall Execute();

public:

__fastcall proceso1(bool CreateSuspended);

Page 195: visual_c++

};

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

#endif

* Observar que como se ocupa un segundo método especializado, en accesar componentes

visuales, se tiene que declarar dentro de la clase, ya sea en su parte protegida o en su parte

publica.

2.2.- proceso1.cpp

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

#include <vcl\vcl.h>

#pragma hdrstop

#include "proceso1.h"

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

// Important: Methods and properties of objects in VCL can // only be

used in a method called using Synchronize, for // example:

//

// Synchronize(UpdateCaption);

//

// where UpdateCaption could look like:

//

// void __fastcall proceso1::UpdateCaption()

// {

// Form1->Caption = "Updated in a thread";

// }

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

__fastcall proceso1::proceso1(bool CreateSuspended)

: TThread(CreateSuspended)

{ }

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

Page 196: visual_c++

void __fastcall proceso1::Execute()

{

//---- Place thread code here ----

Synchronize(UpdateCaption);

}

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

void __fastcall proceso1::UpdateCaption()

{

Form1->Caption = "Updated in a thread";

}

* Observar que Execute(), en este caso solo llama a un segundo método(), usando su

método especial.

* El segundo método, es un caso normal, se declaro en el archivo proceso1.h y se construyo

o implemento al final del archivo proceso1.cpp

* Grabar los dos archivos con File, Save All o CTRL S con cada uno, ya grabados en folder

tarea1, usar File, Close All

La preguntas son:

1.- Como se incorpora este objeto concurrente a una aplicación

2.- Como se activa o se continua la ejecución del proceso concurrente.

R.- esperar a la tercera edición del libro :>)

Procedimiento:

1.- Crear y almacenar el objeto thread, llamado proceso1 con el procedimiento anterior,

asegurarse de que ya todo este CLOSE All y los archivos en folder tarea1.

2.- File, New Aplication

3.- File, Save Project as, y asegurarse que se grabe dentro del folder tarea1

4.- Poner un BUTTON OK y solo se escriben los siguientes tres renglones de código:

Page 197: visual_c++

#include "proceso1.cpp"

proceso1 *pro1;

pro1 = new proceso1(false);

* observar dentro de Unit1, donde va cada uno de ellos;

4.1.- Unit1.cpp

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

#include <vcl\vcl.h>

#pragma hdrstop

#include "Unit1.h"

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

#pragma resource "*.dfm"

TForm1 *Form1;

#include "proceso1.cpp"

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

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

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

void __fastcall TForm1::Button1Click(TObject *Sender)

{

proceso1 *pro1;

pro1 = new proceso1(false);

}

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

* #include ―proceso1.cpp‖, es para que Form1 o sus componentes, puedan accesar

proceso1.

Page 198: visual_c++

* proceso1 *pro1; crea un variable de tipo proceso1 llamada pro1 derivada o instancia de la

clase proceso1

* pro1 = New proceso1(false); crea físicamente o en memoria el objeto, llamando a su

constructor.

* false.- Recordar que el constructor crea el objeto concurrente pero suspendido, es decir en

proceso1, CreateSuspend = true(default), por esa razón en la llamada al constructor se le

informa que CreateSuspend = false, por tanto el proceso se reactiva y hace la llamada al

método Execute().

* Como se observa, no es necesario ni tampoco se puede llamar directamente al método

Execute(), es decir no es valido pro1→Execute(); pero si es valido

pro1→Resume(), pro1→Suspend(), pro1→Terminate(), etc., ver la ayuda de la clase

TThread.

La pantalla de salida es:

Page 199: visual_c++

Tema 3 Aplicaciones Concurrentes c++builder

Se construye ahora, una aplicación con dos objetos concurrentes, el primero despliega los

números del uno al mil, y el segundo lo mismo pero de dos en dos.

Procedimiento:

1.- File, Close All

2.- Crear el Thread Object, llamarlo y grabarlo como proceso1 con el procedimiento

anteriormente descrito, no olvidar al final File, Close All

2.1.-Codigo de proceso1.h

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

#ifndef proceso1H

#define proceso1H

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

#include <vcl\Classes.hpp>

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

class proceso1 : public TThread

{

prívate:

protected:

int alfa;

void __fastcall Editar();

void __fastcall Execute();

public:

__fastcall proceso1(bool CreateSuspended);

};

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

#endif

Page 200: visual_c++

2.2.-Codigo de proceso1.cpp

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

#include <vcl\vcl.h>

#pragma hdrstop

#include "proceso1.h"

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

__fastcall proceso1::proceso1(bool CreateSuspended)

: TThread(CreateSuspended)

{

}

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

void __fastcall proceso1::Execute()

{ //---- Place thread code here ----

for(alfa=1;alfa<=1000;alfa++)

{ Synchronize(Editar); };

}

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

void __fastcall proceso1::Editar()

{ Form1->Edit1->Text=alfa;

}

3.- Crear otro Thread Object, llamarlo y grabarlo como proceso2 con el procedimiento ya

descrito, no olvidar al final File, Close All

3.1- Código de proceso2.h

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

#ifndef proceso2H

#define proceso2H

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

Page 201: visual_c++

#include <vcl\Classes.hpp>

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

class proceso2 : public TThread

{

prívate:

protected:

int beta;

void __fastcall Editar();

void __fastcall Execute();

public:

__fastcall proceso2(bool CreateSuspended);

};

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

#endif

3.2- Código de proceso2.cpp

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

#include <vcl\vcl.h>

#pragma hdrstop

#include "proceso2.h"

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

__fastcall proceso2::proceso2(bool CreateSuspended)

: TThread(CreateSuspended)

{

}

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

void __fastcall proceso2::Execute()

{ //---- Place thread code here ----

Page 202: visual_c++

for(beta=1;beta<=2000;beta=beta+2)

{ Synchronize(Editar); }

}

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

void __fastcall proceso2::Editar()

{ Form1->Edit2->Text = beta;

}

4.- File, New Aplication y no olvidar File, Save Project As dentro del folder tarea1.

5.- Colocar dos edits y dos buttons, en la aplicación, el

código de Unit1.cpp, es;

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

#include <vcl\vcl.h>

#pragma hdrstop

#include "Unit1.h"

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

#pragma resource "*.dfm"

TForm1 *Form1;

#include "proceso1.cpp"

#include "proceso2.cpp"

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

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

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

void __fastcall TForm1::Button1Click(TObject *Sender)

{ proceso1 *pro1;

Page 203: visual_c++

pro1 = new proceso1(false);

pro1->Terminate();

}

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

void __fastcall TForm1::Button2Click(TObject *Sender)

{ proceso2 *pro2;

pro2 = new proceso2(false);

pro2->Terminate();

}

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

* Observar que ahora hay dos include arriba

* cada botón activa su propio proceso

* Se usa el método Termínate(), para asegurarse que termine el proceso, pero es redundante

porque el destructor se activa la terminar el ámbito del buttonclick();

1. La pantalla de salida es:

No parece impresionante, pero las dos cajas Edits, se están cargando al mismo tiempo, es

decir concurrentemente.