Ir arriba

Lenguaje: DELPHI

Basado en el añejo Pascal permite desarrollar programas Orientado a Objetos que:
- Genera código ejecutable, sin archivos adicionales (RunTime).
- No usa librerias adicionales.
- Integra componentes “prefabricados”.
Programación
Visual
Control
Programa
Arreglos
Bases
Datos
Base
Datos
Lista 2
enlaces
Lista
Circular
MySQL
Delphi
Arbol
Archivo
Vector
Pila
Pila
Cola
Matriz
Ejemplo

PARADIGMA:
Puede uno amar sin ser felíz..
puede uno ser felíz sin amar..
Pero amar y ser felíz.. es prodigioso..!!!
( Balzac )

PROGRAMACION VISUAL:
ELEMENTOS BASICOS

  1. MODELO DE SOLUCION:
    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º 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º Operaciones generalmente algebraicas necesarias para solucionar el problema, suelen ser formulas (o igualdad matemática, ej. X= y + 5).
    - 3º Resultado o solución del problema que 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 de información es necesario plantearse las siguientes preguntas:

    - ¿Que datos ocupa conocer el computador para resolver el problema y en cuales variables de entrada se van a almacenar ?

    - ¿Que procesos u operaciones debe realizar el computador para resolver el problema planteado ?

    - ¿Que información o variables de salida se van a desplegar en pantalla para responder al problema planteado originalmente?

    - ¿Como nota importante no confundir los términos datos, variables e información;

    - - Datos: se refiere a información en bruto, no procesada ni catalogada, por ejemplo “Tijuana”, “calle primera # 213”,”15 años”, " $2,520.00”, etc.

    - - Variable: 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 párrafo anterior, CIUDAD, DIRECCION, EDAD, SUELDO, ETC.

    - - Información: Datos ya procesados que resuelven un problema planteado.

    Ejemplo: La 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.

    
           Variable(s) Entrada 	Proceso u operación 	Variable(s) salida
           BASE ALTURA 	      AREA = BASE * ALTURA2 	       AREA
    

  2. 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 BORLAND DELPHI 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.

  3. TIPOS DE DATOS:
    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 son:

    
    					   TIPO        	     RANGO
    					   char 	Caracter ASCII
    					   byte 	0 a 255
    					   integer 	-32,768 a 32,767
    					   Real 	1E-38 a 1E+38
    					   Boolean 	TRUE o FALSE
    					   shortint 	-128 a 127
    					   word 	0 a 65535
    					   longint 	-2147483648 a 214748364
    					   String 	Cadena caracteres
    
    Para el caso de strings se prodra usar cualquiera de los dos siguientes formatos:
    
    					Var
    					Nombre:string;
    					Carrera:string[30];
    

    Para el primer caso delphi pascal reserva 255 bytes de memoria, para el caso de carrera pscal solo reservara 30 bytes, es obvio cual de los dos casos es mas eficiente.

  4. OPERADORES ARITMETICOS:
    Son símbolos especiales que indican al compilador que debe efectuar una operación matemática o lógica. DELPHI reconoce los siguientes operadores aritméticos:
    
    			Operador  	    Operación
    				+ 	  SUMA
    				- 	  RESTA
    				* 	  MULTIPLICACION
    				/ 	  DIVISION
    				Div 	  DIVISION ENTERA
    				Mod 	  MODULO O RESIDUO
    

    Como nota importante a recordar siempre;

    Si se usa el operador DIV en problemas de división entre enteros, pascal trunca la parte residual, es decir;

    
    			// área de declaración de variables
    			
    			real a;
    			
    			// área de operaciones
    			
    			a := 10 div 4;
    			
    			// área de despliegue de resultados
    			
    			desplegar a; -> En pantalla sale ( 2.000000 )
    

    El problema no es el tipo real, sino que por definición de la división entre enteros pascal trunca la parte residual.

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

    
    			// área de declaración
    			
    			integer alfa;
    			
    			// área de operaciones
    			
    			alfa := 23 mod 4;
    			
    			// área de despliegue
    			
    			desplegar alfa; -> El resultado en pantalla es 3
    			
    			Otro ejemplo;
    			
    			alfa := 108 mod 10;
    			
    			desplegar alfa; -> El resultado en pantalla es 8
    
    Para resolver los problemas de potencias y raíces, se usan ciertas instrucciones especiales que proporciona el lenguaje, llamadas funciones matemáticas, en pascal existe todo un conjunto de instrucciones o funciones matemáticas.

    Y ademas deberan recordar sus leyes de logaritmos y de potencias:

    Con el uso de los logaritmos, los procesos de multiplicación, división, elevación a potencias y extracción de raíces entre números reales pueden simplificarse de la manera siguiente.
    - El logaritmo de un producto es igual a la suma de los logaritmos de los factores: log ( a . m) = log a + log m
    - El logaritmo de un cociente es igual a la diferencia de los logaritmos de los términos: Log(a:m) = log a - log m
    - El logaritmo de una potencia es igual al exponente por el logaritmo de la base: Log am = m * Log a
    - El logaritmo de una raiz es igual al logaritmo del radicando dividido por el índice de la raíz: log image231.jpg= m/n log a

    Las dos funciones que se usan para resolver este problema son:
    - Ln(x) ? Nos regresa el logaritmo natural del numero x.
    - EXP(x) ? nos regresa eX es decir el antilogaritmo de un numero.

    Otra vez si se ocupa resolver la multiplicacion de 5 * 20, la regla de logaritmos nos dice que el resultado es = log(5) + log(20) aunque en pascal se usa Ln(5) + Ln(20) pro en estos casos lo que se tiene de resultado no es 100 sino el logaritmo de 100, porque estamos sumando los logaritmos, es decir al resultado de la suma de logaritmos le tenemos que sacar su antilogaritmo, para conocer el resultado final(100) de la mulptiplicacion.

    Ejemplo en pascal

    Real alfa

    Alfa := Exp( Ln(5) + Ln(20) );

    Primero se calculan los logaritmos de 5 y de veinte con (Ln), luego los sumamos y a este resultado le extraemos el antilogaritmo con (EXP) que seria el resultado final.

    Otro ejemplo si se tiene la potencia 53 entonces aplicando la regla de logaritmos el programa quedaria:

    Real alfa

    Alfa = EXP(5 * Ln(3));

    Y si se tiene que obtener la raiz de 9 Ö 9 en borland delphi sera: Alfa = EXP( 1/2 * Ln(9));

  5. JERARQUIA DE OPERACIONES:
    En BORLAND DELPHI 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:

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

    Si calif1=60 y calif2=80 y si el programa usa: promedio := calif1 + calif2/2; la pc daría como resultado: promedio = 100

    Antes de plantear una formula en un programa se deberá evaluar el siguiente Orden de operaciones:

    1. Paréntesis
    2. Potencias y raíces
    3. Multiplicaciones y divisiones
    4. Sumas y restas
    5. Dos o más de la misma jerarquía u orden, entonces resolver de izquierda a derecha

    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;

    image15.jpg

    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.

  6. 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 BORLAND DELPHI, QUE SE ENCUENTRA EN LA BARRA DE START DE WINDOWS.

    image295.jpg

    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
    4. El Inspector de Objetos
    5. La forma activa o principal

  7. FORM, 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 Borland Delphi y como todos los objetos de Delphi 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 DELPHI 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:

    - Debe tener capacidad de detectar el evento

    - 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.

    Para los primeros programas en Borland Delphi solo se usaran propiedades sencillas como color, font, etc. de Form1, y no se usan, de momento los eventos que puede detectar Form1

  8. PROGRAMAS, FORMAS Y COMPONENTES:
    Un programa o problema de información en Borland Delphi no es mas que una o mas formas o ventanas, donde cada una de ellas contiene elementos u objetos especiales llamados componentes, dichos componentes DELPHI 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 DELPHI están agrupados en diversos folder o pestañas o paginas en la barra de componentes, las principales categorias para este curso contienen los siguientes componentes:

    Standard.- Frames MainMenu PopupMenu Label Edit Memo Button CheckBox RadioButton ListBox ComboBox ScrollBar GroupBox RadioGroup Panel ActionList

    Additional.- BitBtn SpeedButton MaskEdit StringGrid DrawGrid Image Shape Bevel ScrollBox CheckListBox Splitter StaticText ControlBar AplicationsEvents Chart

    Data Access.- DataSource Table Query StoredProc DataBase Session BatchMove UpdateSQL NestedTable

    Data Controls.- DBGrid DBNavigator DBText DBEdit DBMemo DBImage DBListBox DBComboBox DBCheckBox DBRadioGroup DBLookupListBox DBLookupComboBox DBRichEdit DBControlGrid DBChart

    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.

    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 borland delphi 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.

  9. COMPONENTE LABEL (STANDARD):
    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 Borland Delphi 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 Borland Delphi 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.

  10. COMPONENTE BUTTON (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 , 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 , solo poner la propiedad Cancel en true, a este caso se le conoce como “CANCEL BUTTON”.

    Ejemplo:
    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 Borland Delphi 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:

    1. Cargar Delphi
    2. Al cargarlo ya estará en la pantalla la primera forma (Form1).

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

      Donde se deberá seleccionar primero, el icono de nuevo folder, 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 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.pas”, 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.dpr”.

    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.

      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 Borland Delphi:

      Observar que ya trae listo el evento Button1Onclick() para programarse y es dentro del BEGIN-END donde se construye el programa.

      Solo escribir dentro de las llaves la instrucción Label8.Caption := “FORD”;

      • Escribirla dentro del BEGIN END como lo muestra el ejemplo
      • No olvidar terminar con ( ; )
      • Respetar y aprender siempre la ortografía de componentes, propiedades y valores de propiedades
      • Recordar que cualquier propiedad de cualquier componente se puede programar con el formato ya descrito;

      NomComponente.NomPropiedad := NvoValor;
      - Observar que Caption se carga como si fuese una variable de tipo “string”, dentro de un programa, es decir entre apostrofes ( ' ).
      - Observar que atrás del editor esta Form1, si se selecciona con un click, este procedimiento lo regresa a la forma para seguir arreglando o colocando nuevos elementos.
      - Otra manera de estarse intercambiando entre forma y editor ( ahora lo llamaremos Unit1.cpp), es decir entre form1 y Unit1, es usar el icono Toggle Form/Unit que se encuentra en la barra de componentes arriba y a la izquierda.

      La otra manera y mas sencilla de cargar el editor, es haciendo un dobleclick dentro del componente.

    8. Ahora ya esta lista la forma o programa para ejecutarse, también existen dos maneras:
      - Usar la opción Run que esta arriba en la barra de menús.
      - Usar icono “run” en barra de herramientas.

      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.

      1. COMPONENTE EDIT (STANDARD):
        Este componente es el mas importante componente visual de Borland Delphi, 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;

        • En BASIC, Input Edad ? Edit1

        • En PASCAL, Read(Ciudad) ? Edit2

        • En C, printf(”%d”, sueldo) ? Edit3

        • En C++, cin.get(nombre,30) ? Edit4

        • 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 := ‘GABY’;

        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.

        Es importante entender que la propiedad TEXT de este control o componente se cargara o se leera como una STRING, es decir para procesarlo se usa codigo similar a :

        Edit10.Text := ‘3,1416’;

        String temporal := Edit10.Text;

        Observar que aunque se cargue con un dato aparentemente de tipo REAL la propiedad TEXT solo puede contener STRINGS. Se usaran mucho a lo largo de todo el curso las siguientes funciones de BROLAND DELPHI para estar conviertiendo de STRINNS a VALORES NUMERICOS y tambien de VALORES NUMERICOS a STRINGS.

        1. Val(Edit1.Text,temporal,error) ? ESTA FUNCION TOMA LA STRING QUE ESTA EN TEXT Y LA MANDA O CARGA LA VARIABLE NUMERICA (INTEGER O REAL ) TEMPORAL, APARTE VAL CARGA UNA VARIABLE INTEGER ERROR CON UN CODIGO DE ERROR SI SE DIO ALGUN ERROR EN EL PROCESO DE CONVERSION, ES DECIR VAL SE USA PARA CONVERTIR TEXT A VARIABLES NUMERICAS.

        2. STR( 3.1416,temporal ) ? SE USA PARA CARGAR UNA VARIABLE STRING TEMPORAL CON UN DATO O VALOR NUMERICO DETERMINADO, RECORDAR QUE SE USA PARA CONVERTIR DATOS NUMERICOS A STRINGS, NO TEXT

        3. Edit1.Text:=FloatToStr(123.45) ? SE USA PARA CARGAR LA PROPIEDAD TEXT DE UN EDIT CON UN DATO O VARIABLE ENTERA O REAL.

        4. FloatToDecimal (PROCEDIMIENTO) ? CONVIERTE U FLOTANTE A DECIMAL

        5. FloatToStr (FUNCION) ? EJEMPLO CASO C) CONVIERTE FLOTANTE A STRING

        6. FloatToStrF (FUNCION) ? SIMILAR A C) PERO SE PUEDE AGREGAR UN FORMATO, PARTE ENTERA Y DECIMALES (VER EJEMPLOS EN PROGRAMAS )

        7. FloatToText(FUNCION) ? CONVIERTE FLOTANTES A TEXT, INCLUYENDO FORMATO, PARTE ENTERA Y DECIMALES.

        8. FloatToTextFmt(FUNCION) ? CONVIERTE FLOTANTE A TEXT USANDO UN FORMATO DETERMINADO.

        9. FormatFloat(FUNCION) ? FORMATEA UN FLOTANTE:

          Ejemplo:

          EDIT1.TEXT := ‘23.456789’;

          Format(’%0:2f’,[Edit1.Text]) ? EL DESPLIEGUE SERA 23.45

          ALGUNAS CONSTANTES DE FORMATEO SON:

          %5:5d –> despliega cinco digitos enteros y cinco decimales, si el dato tiene menos partes enteras se rellenara con ceros 0000.

          %u –> similar a %d excepto que no muestra el signo (+/-) del dato.

          %e –> despliega en notacion cientifica o exponencial.

          %f –> fijo dos decimales por default.

          %g –> el compilador decide si lo manda a decimal o exponencial.

          %n –> similar a %f solo que los miles se separan con comas.

          %m –> formato monetario.

          %x –> lo convierte a hexadecimal.

        10. StrToCurr(FUNCION) –> CONVIERTE UNA STRING A FORMATO MONETARIO.

        11. StrToFloat (FUNCION) –> CONVIERTE STRING A FLOTANTE.

        12. TextToFloat(FUNCION) CONVIERTE TEXT A FLOTANTE.

          ing-point value from a null-terminated string.

          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 USAR LAS FUNCIONES APROPIADAS, como se muestra en el siguiente ejemplo.

        temp := StrToFloat(Edit1.Text)* 5;

        Edit1.Text := FloatToStrF(temp,ffGeneral,5,2); NOTA: ffCurrency, ffExponent, ffFixed, ffGeneral, ffNumber

        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.

        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.

        Codigo;

        
        			procedure TForm1.Button1Click(Sender: TObject);
        			
        			var
        			
        			temp:Real;
        			
        			begin
        			
        			temp := StrToFloat(Edit1.Text)* StrToFloat(Edit2.Text);
        			
        			Edit3.Text:=Format('%0.2f',[temp]);
        			
        			end;
        

        corrida:

        notas:

        Como se observa este componente Edit permite capturar datos por parte del usuario del programa.

        Es mas sencillo considerar, estos componentes como variables normales y usarlos directamente.

        Solo en problemas algebraicos usar propiedad Text con las funciones apropiadas.

        Respetar la ortografía en el ejemplo, sobre todo en las instrucciones (las que terminan con ;)

        Si son muchas operaciones en un problema, el procedimiento es similar, solo resolverlo por partes ya que una formula que contenga cuatro o cinco Edit, se convierte en un renglón de código gigante.

        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:

        Edit3.Text:=Format(’%0.2f’,[temp]);

        Edit8.Text.ToDouble();

        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 métodos asociados a la clase AnsiString , por ejemplo uno de esos métodos es;

        Format(’string de formato’, var real);

        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

        # 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.

        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.

        EL RESUMEN DE CONVERSION DE DATOS A COMPONENENTE Y QUE SE USA A LO LARGO DE ESTE CURSO EN GENERAL DESCANSA EN LAS SIGUIENTES 4 FUNCIONES.
        - IntToStr( dato o variable integer);
        - StrToInt( variable string o propiedad text de un componente visual);
        - FloatToStr( dato o variable real);
        - StrToFloat(variable string o propiedad text de un componente visual);

        Ejemplo: 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í;

        Pantalla de diseño

      2. Programa

        El código o miniprograma, solo diseñarla, y dentro del evento Click del componente Button1, queda así;

        
        				procedure TForm1.Button1Click(Sender: TObject);
        				
        				var
        				
        				temp:Real;
        				
        				begin
        				
        				temp := StrToFloat(Edit1.Text)* StrToFloat(Edit2.Text)/ 2;
        				
        				Edit3.Text:=Format('%0.2f',[temp]);
        				
        				end;
        	
        Pantalla de ejecución o de salida

        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.

      3. 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).

        1. Es en la ventanilla abajo a la izquierda donde se pueden proporcionar algunos datos de prueba, para probar el formato diseñado.
        2. Recordar que este formato es para capturas, no para despliegues, puesto que para este caso (despliegue) se usa FormatFloat().
        3. No olvide usar el botón OK, cuando se termine de construir la mascara de edición.
        4. Los principales caracteres especiales de edición son:

          carácter significado

          ! 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.

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

      4. COMPONENTE ComboBox (STANDAR):
        Si 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 Tucumán, las posibles respuestas son (Banda del Río Salí, Concepción, San Miguel de Tucumán, Tafí Viejo, Yerba Buena), 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 oportunidad 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:

        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 flotante de manera normal

      5. COMPONENTES DE AGRUPAMIENTO:
        Como ya se empieza a notar en los programas construidos, 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.

      6. COMPONENTE PANEL (STANDARD Y ATRAS 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

      7. 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.

      8. VENTANAS EN BORLAND DELPHI 7:
        El siguiente problema común, con el manejo de programas en borland delphi, 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 borland delphi , 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.pas”.

        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.pas” 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. Ejemplos;

        
        		a) Form5.Edit3.Text := Form1.Edit2.Text;
        		
        		// se esta pasando el texto de edit2 de primera
        		
        		// ventana al texto de edit3 de la quinta ventana
        		
        		b) REAL alfa := StrToFloat(Form2.Edit4.Text);
        		
        		// se esta poniendo en una variable real el contenido
        		
        		// de la caja cuatro de la tercera ventana
        

        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:

        Crear, armar y diseñar todas las ventanas primero, junto con sus componentes y miniprogramas.

        Cualquier ventana que mencione o contenga una referencia dentro de su código a otra ventana, deberá incluir en su Unit respectiva, la unidad (Unit) de la otra forma o ventana, esto es muy similar a lo que se hace en PASCAL para el manejo de unidades.

        Para incluir la unidad(Unit) de la otra forma o ventana, solo tener seleccionada o al frente la ventana que llama, y usar la orden File, USE Unit, que se encuentra en arriba en la barra de menú, junto con el Run, Compile, etc., al dar esta orden(File USE 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, USE 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;

        
        		- Form2.Visible := true;
        		- 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 PROJECT REMOVE FROM PROJECT del menu normal y de la ventanilla que aparece seleccionar la unidad que contiene la forma que se quiere eliminar.

      9. COMPONENTE BITBUTON (ADITTIONAL):
        Este componente visual permite realizar en forma fácil toda una serie de tareas comunes en Windows.

        En principio es parecido al componente Button, pero en el ejemplo de arriba observar que incluye un gráfico o bitmap, que lo hace mas agradable y visible al usuario.

        Es en su propiedad KIND, en el inspector de objetos, donde se pueden definir cualquiera de sus diez opciones, como lo muestra la siguiente pantalla.

        Todos son BITBUTTON, nada mas con Kind Seleccionado.

        Close, en una ventana, cuando el usuario lo selecciona, cierra la ventana.


      Volver al principio


      INSTRUCCIONES DE CONTROL DE PROGRAMA Volver al principio

      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. Ejemplo de instrucciones condicionales ;

      1. si sueldo > 3000
        desplegar “rico”
        si no
        desplegar “pobre”
        fin-si

      2. si sexo = ‘m’
        imprime mujer
        si no
        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:

      
      					
      								  -------> si condición entonces
      								 /          grupo cierto de instrucciones
      								/
      					Instruccion Condicional -------> sino
      									\         grupo falso de instrucciones
      									 \ 
      									  -------> finsi
      

      Como se observa son cuatro partes bien diferenciadas entre si;

      1. La propia instrucción condicional en si
      2. La condición
      3. El grupo cierto de instrucciones
      4. 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.

      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 borland delphi son:

      
      				 Operador 	         Significado
      				= 	Igual que
      				> 	Mayor que
      				< 	Menor que
      				>= 	Mayor o igual que
      				<= 	Menor o igual que
      				<> 	No es igual o es diferente que
      				IN 	Pertenece A
      

      NOTA:
      Para el caso de objetos de tipo string, los operadores mencionados arriba funcionan, es decir es valido usar la siguiente condición:

      string carrera;

      if (carrera=’informatica’) etc, etc, etc,

      INSTRUCCION IF: Instrucción condicional mas usada en los diversos lenguajes de programación, su formato completo y de trabajo en borland delphi es :

      cargar o asignar la variable de condición;
      if condición Then
      begin
      grupo cierto de instrucciones;
      end
      else
      begin
      grupo falso de instrucciones;
      end;

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

      Secundus.- 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.

      Programa Ejemplo:

      Codigo:

      
      					procedure TForm1.Button1Click(Sender: TObject);
      					
      					var
      					
      					temp,error:integer;
      					
      					begin
      					
      					Val(Edit1.Text,temp,error);
      					
      					if temp >= 1000 then
      					
      					begin
      					
      					Label2.Caption := 'RICO';
      					
      					end
      					
      					Else
      					
      					begin
      					
      					Label2.Caption := 'POBRE';
      					
      					end
      					
      					end;
      

      Corrida:

      <

      CONDICIONES COMPUESTAS:
      Si 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 que BORLAND DELPHI reconoce:

      
            OPERADOR 	 SIGNIFICADO
      	AND 	“Y” LOGICO
      	OR 	“O” LOGICO
      	NOT 	“NO” NEGACION
      

      Para que el computador evalúe como CIERTA una condición compuesta que contiene el operador lógico “and”, 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 “or”, 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 image54.jpgdonde 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 image55.jpg, y se puede construir la siguiente tabla de verdad.

      Tabla de verdad con “and”
      1cs 2cs Eval

      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 “and”.

      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 “OR” es la siguiente;
        1cs 2cs Eval

        C C C
        C F C
        F C C
        F F F

      Como se observa, una condición compuesta con “OR”, 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;

      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

      INSTRUCCION CASE:
      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 case;

      La instrucción case 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;
      CASE var int o char OF
      const1: begin instrucción(es); end;
      const2: begin instrucción(es); end;
      const3: begin instrucción(es); end;
      else begin instrucción(es); end
      END;

      OBSERVAR donde se usan y donde no se usan los ( : ) y los ( ; )

      Mejor un ejemplo practico:

      Codigo:

      
      			procedure TForm1.Button1Click(Sender: TObject);
      			
      			begin
      			
      			case Edit1.Text[1] of
      			
      			'a': begin Label2.Caption := 'AGUILA'; end;
      			
      			'b','B': begin Label2.Caption := 'BECERRO'; end;
      			
      			'c': begin Label2.Caption := '5 ' + 'CABALLOS'; end;
      			
      			else begin Label2.Caption := 'No Hay' end;
      			
      			end
      			
      			end;
      

      Corrida:

      Recordar que la propiedad Text de cualquier componente, puede usar o accesar cualquier [posición o carácter] usando los corchetes por ejemplo;

      si Edit4 = “Juan” entonces:

      Label3.Caption = Edit4?Text[2]; pasa solo la ‘u’ al caption

      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 las dos constantes se separan con comas,

      En particular, instrucciones de tipo case 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.

      COMPONENTES VISUALES DE SELECCION Y DECISION:
      Las instrucciones if y case, nos permiten tomar decisiones o realizar seleccionase dentro del código de un programa.

      BORLAND DELPHI 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.

    9. COMPONENTE CheckBok (Standard):
      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:

      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. Ejemplo:

      
      				procedure TForm1.Button1Click(Sender: TObject);
      				
      				begin
      				
      				if CheckBox1.Checked Then
      				
      				Begin Label1.Caption := 'CALIENTE' end
      				
      				else begin Label1.Caption := ' '; end;
      				
      				if CheckBox2.Checked Then
      				
      				Begin Label2.Caption := 'FRIO' end
      				
      				else begin Label2.Caption := ' '; end;
      				
      				if CheckBox3.Checked Then
      				
      				Begin Label3.Caption := 'TEMPLADO' end
      				
      				else begin Label3.Caption := ' '; end;
      				
      				end;
      

      Corrida:

      Notas:
      - Observar que por cada checkbox en la forma se ocuapara un if.
      - La propiedad Checked estara cargada con TRUE o FALSE al ejecutarse el programa y por tanto la instruccion IF ejecutara la parte cierta o la parte falsa de instrucciones apropiada, es decir se uso CHECKBOX.CHECKED directamente en la instruccion porque seria equivalente a CHECKBOX.CHECKED = TRUE.

      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.

    10. 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 BORLAND DELPHI los evalúa por separado y se puede tener seleccionado un RadioButton en cada Panel.

    11. COMPONENTE RadioGroup (Standard):
      Aunque es común agrupar un conjunto de RadioButton dentro de componentes Panel Y RadioGroup, BORLAND DELPHI 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.

    12. COMPONENTE MainMenu (Standard):
      Con este componente 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ú;
      - 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).
      - 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.

      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 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.

    13. COMPONENTE PopupMenu (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 componente, sale la lista con todos los componentes PopupMenu que ya se hayan construidos.

    14. 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. Su formato general es:

      for VARCONTROL := ValorInicial to ValorFinal do

      begin instrucciones; end;

      ejemplo:

      FOR x :=1 TO 10 DO

      BEGIN Label4.Caption := ‘pato’; END;

      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 to 15 DO begin etc...

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

        for x := -3 to 8 do etc...

      4. Los incrementos también pueden ser diferentes al de uno en uno, solo alterar el contador de ciclos dentro del for pero tener cuidado que el ultmo cambio no se salga del limite del ciclo y usar un if para validar el limite de contador;

        for x := 1 to 20 do begin inst(es) x := x + 3 if x? 20 then x x:=19 etc..

      5. 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 datos o 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;

      Pantalla de diseño

      Programa

      
      				procedure TForm1.Button1Click(Sender: TObject);
      				
      				var
      				
      				x:integer;
      				
      				begin
      				
      				For x:= 10 to 20 do
      				
      				begin ListBox1.Items.Add(IntToStr(x));
      				
      				end;
      				
      				end;
      

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

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

      Recordar que todos los componentes visuales analizados hasta ahora, en sus propiedades text o caption, entran y salen puras strings.

      Por eso en el programa se uso la funcion IntToStr(variable entera) para cargar una string en el componente LISTBOX.

      Practicar hasta conseguir tener esta pantalla de salida o de ejecución, cuando se consiga entonces ya se esta listo para lo siguiente.

    15. 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 condicion;
      while ( condicion ) do
      begin
      instrucciones;
      instruccion de salida de ciclo ;
      end;

      programa ejemplo;

      
      		var
      		
      		x:integer;
      		
      		begin
      		
      		x:=1;
      		
      		while (x<=10) do
      		
      		begin
      		
      		ListBox1.Items.Add(IntToStr(x)+' pato');
      		
      		x:=x+1;
      		
      		end;
      		
      		end;
      

      Corrida

      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.

      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.

    16. CICLO REPEAT UNTIL:
      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 :

      cargar o inicializar variable de condición;
      repeat
      instrucciones ;
      instruccion de salida del ciclo
      until (condicion) ;

      programa ejemplo:

      
      		procedure TForm1.Button1Click(Sender: TObject);
      		
      		var
      		
      		x:integer;
      		
      		begin
      		
      		x:=1;
      		
      		repeat
      		
      		ListBox1.Items.Add(IntToStr(x)+' gato');
      		
      		x:=x+1;
      		
      		until (x>=10);
      		
      		end;
      

      Corrida

      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.

    17. CONCLUSIONES ACERCA DE LOS CICLOS:
      Dado un problema cualesquiera en borland delphi , 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 repeat until .


      Volver al principio


      ARREGLOS Volver al principio

      • ARREGLOA TRADICIONALES EN BORLAND DELPHI 7

        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;

        • ARREGLOS TIPO LISTA

          Juan
          Pedro ? Nombres[2]
          José
          Ana ? Nombres[4]
          Carmen

          18 ? Edad[1]
          20
          25
          30 ? Edad[4]

        • ARREGLOS TIPO TABLAS

          CIA ACME
          ING MENS VTAS
          (MILES DE $)
          ENE FEB MAR ABR MAY
          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.

      • ARREGLOS TIPO LISTAS

        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;

        VAR
        nomlista :array [1..n] of Integer;

        • ESTO SIGNIFICA que el arreglo debera declararse en la parte VAR publica del programa (AL PRINCIPIO DEL PROGRAMA ARRIBA DEL PROCEDIMIENTO BUTTONCLIK SE ENCUENTRAN ESTAS PARTES VAR Y TYPE DEL PROGRAMA)

        • Y el indice (n) es la cantidad de elementos de la lista.

        ejemplos;

        VAR
        Edades : array[1..12] of integer;
        Sueldos : array[1..10] of Real;
        Municipios : array[1..5] of string[20];

        Nota: en caso de listas de strings observar que la string se le asigna un tamaño especifico.

        Notas:

        Declaración.- Es necesario recordar, que la declaración de un arreglo tipo lista se puede hacer en dos lugares diferentes, dependiendo de si solo se usa un botón de ordenes en la pantalla, o si dos o mas botones de ordenes, estarán procesando el arreglo, el segundo caso, es el mas común. El dato capturado, proviene de momento de un componente visual escalar y por tanto para capturas se usan algunas variables de control como lo muestra el siguiente programa ejemplo, para capturar y procesar cuatro edades, el código y pantalla se es;

        Programa ejemplo;

        
        				var
        				
        				Form1: TForm1;
        				
        				edad : array[1..5] of integer;
        				
        				ren:integer=1;
        				
        				implementation
        				
        				{$R *.DFM}
        				
        				procedure TForm1.Button1Click(Sender: TObject);
        				
        				begin
        				
        				if ren <= 5 then
        				
        				begin
        				
        				edad[ren]:=StrToInt(Edit1.Text);
        				
        				ListBox1.Items.Add(IntToStr(edad[ren]));
        				
        				ren := ren + 1 ; Edit1.Text :=' ';
        				
        				end;
        				
        				if ren = 6 Then ShowMessage ('LISTA LLENA');
        				
        				end;
        				
        				procedure TForm1.Button2Click(Sender: TObject);
        				
        				var
        				
        				r:integer;
        				
        				begin
        				
        				for r := 1 to 5 do
        				
        				begin
        				
        				ListBox1.Items.Add(IntToStr(edad[r] * 12));
        				
        				end;
        				
        				end;
        

        Pantalla de corrida

        Notas:

        La declaracion del arreglo y la variable de control renglon se realiza en la parte VAR del PROGRAMA no las partes verdes de var que se han puesto dentro del procedimiento buttonclick como se ha realizado en todos los programas que se han construido hasta la fecha.

        Recordar que estas variables son globales o compartidas por todos los procedimientos o eventos del programa.

        Se uso un componente nuevo el ShowMessage(’MENSAJE’); para desplegar un mensaje de lista llena.

        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 como se hizo en el problema ejemplo.

        Recordar que todos los datos internos de la lista estarán almacenados en la memoria ram del computador, para despliegues se usa 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.

      • 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 declarar un arreglo de este tipo se usa el siguiente formato:

        VAR
        Nomtabla: array[1..1,1..c] of Integer;

        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 logica de control ya sea con variables globales o se pueden usar controles o componentes ocultos de tipo label o edit y en despliegue usar un ListBox como lo muestra el programa ejemplo.

        Programa delphi

        
        				var
        				
        				Form1: TForm1;
        				
        				calif : array[1..3,1..4] of integer;
        				
        				ren:integer=1;col:integer=1;
        				
        				implementation
        				
        				{$R *.DFM}
        				
        				procedure TForm1.Button1Click(Sender: TObject);
        				
        				begin
        				
        				Label2.Caption:=IntToStr(ren);
        				
        				Label3.Caption:=IntToStr(col);
        				
        				calif[ren,col]:=StrToInt(Edit1.Text);
        				
        				col := col+1;
        				
        				Edit1.Text :=' ';
        				
        				if (col=5) then
        				
        				begin ren:=ren+1; col:=1;
        				
        				end;
        				
        				if (ren=4)
        				
        				then
        				
        				begin
        				
        				ShowMessage('TABLA LLENA');
        				
        				Edit1.Visible := false;
        				
        				end;
        				
        				end;
        				
        				procedure TForm1.Button2Click(Sender: TObject);
        				
        				var
        				
        				r:integer;c:integer;
        				
        				temp:string;
        				
        				begin
        				
        				for r := 1 to 3 do
        				
        				begin
        				
        				for c:= 1 to 4 do
        				
        				begin
        				
        				// operaciones calif + 10 puntos
        				
        				calif[r,c]:=calif[r,c]+10;
        				
        				// juntando columnas para desplegar
        				
        				temp:= temp + IntToStr(calif[r,c])+ ' ';
        				
        				end;
        				
        				// desplegando
        				
        				ListBox1.Items.Add(temp);
        				
        				temp:='';
        				
        				end;
        				
        				end;
        

        Pantalla de salida

      • COMPONENTE ListBox (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, que son las clases bases de las cuales hereda propiedades y metodos, mas algunas propiedades y métodos propios tales como:

        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.
          • Expand.- Se usa para agregar mas espacio para nuevos objetos en la lista.
          • First.- Se utiliza para regresar al primer objeto de la 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 contiene muchas propiedades y métodos que facilitan grandemente el trabajo con los elementos de una lista.

            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; )
        • 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 analizado en los temas anteriores ;

          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 las funciones INTTOSTR y STRTOINT.

          Si es necesario pasar el contenido de ListBox1 a ListBox2, solo usar la propiedad Text en ambas, ej.; (ListBox2.Text := ListBox1.Text).

          LO MAS IMPORTANTE A TOMAR EN CUENTA Y RECORDAR ES QUE A DIFERENCIA DE ARREGLOS TRADICIONALES LISTBOX EMPIEZA SU PRIMRE INDICE O RENGLON EN 0 ( CERO ) COMO ES COMUN EN EL LENGUAJE DE PROGRAMACION C++, RECORDAR AJUSTAR SUS CICLOS DE PROCESOS Y SUS CONTADORES DE CONTROL PARA QUE TOMEN ESTA NOTA EN CONSIDERACION.

          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:

        
        				procedure TForm1.Button1Click(Sender: TObject);
        				
        				begin
        				
        				ListBox1.Items.Add(Edit1.Text);
        				
        				Edit1.Text := '';
        				
        				end;
        				
        				procedure TForm1.Button2Click(Sender: TObject);
        				
        				var
        				
        				r, temp :integer;
        				
        				Begin
        				
        				for r:=0 to ListBox1.Items.Count - 1 do
        				
        				begin
        				
        				temp := StrToInt(ListBox1.Items.Strings[r]) * 12;
        				
        				ListBox2.Items.Add(IntToStr(temp));
        				
        				end;
        				
        				end;
        

        Pantalla de salida:

      • COMPONENTE StringGrid (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.

        Y RECORDAR QUE SUS INDICES EMPIEZAN EN RENGLON=0 y COLUMNA=0.

        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.

        +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, ej.

        StringGrid1.Cells[1,1] := ‘PATO’;

        Edit1.Text=StringGrid1.Cells[0,0];

        Las demás propiedades investigarlas en la ayuda del borland delphi .

        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: (inspector objetos)

        FORM1:

        Programa;

        
        				procedure TForm1.Button1Click(Sender: TObject);
        				
        				var
        				
        				c,r,temp:integer;
        				
        				begin
        				
        				for c:=0 to 2 do begin
        				
        				for r:=0 to 3 do
        				
        				begin
        				
        				temp:= StrToInt(StringGrid1.Cells[c,r])-4;
        				
        				StringGrid1.Cells[c,r] := IntToStr(temp);
        				
        				end; end; end;
        

        Pantala de corrida:

        CIA ACME
        INGRESOS MENSUALES
        (MILES DE PESOS)
        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 en C++ es sencillo, pero cambiarlo a borland delphi, recordarlo y aprenderlo para siempre:

        
        				//declaración
        				
        				float tabla[4][3], totsuc[4], promsuc[4];
        				
        				float totmes[3], promes[3];
        				
        				//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;
        

      LAS BASES DE DATOS Volver al principio

      • MODELOS DE ALMACENAMIENTO DE DATOS:

        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:

        • 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.

        • 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.

        • 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.

        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.

      • TABLAS:

        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 de tipo 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

        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.

        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 BORLAND DELPHI , un mini DBMS llamado DataBase Desktop, mismo que se encuentra en el mismo folder o subdirectorio que el BORLAND DELPHI, 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 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.

        A estos atributos o campos especiales se les conoce como claves o llaves secundarias, que internamente generan otra tabla especial llamada tabla o archivo de índices, (tabla o archivo que contiene dos campos,

        el primero es la clave secundaria ordenada y el segundo la posición o renglón donde se encuentra en la tabla original).

        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 BORLAND DELPHI.

      • DATABASE DESKTOP:

        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:

        Primero crear un folder o subdirectorio especial en el disco duro C:, para guardar o almacenar las tablas o base de datos (conjunto de tablas), esto se hace con un click en My Computer, luego click en disco C;, luego File, New Folder, y renombrarlo por ejemplo a Datos1, o Tablas o Base de Datos (Win95 permite directorios con espacios en blanco intermedios).

        • Ahora cargar o ejecutar el DESKTOP DATABASE ( SE ENCUENTRA EN PROGRAM FILES\BORLAND\DATABASE\DESKTOP)

          La pantalla de entrada es:

        • Crear una nueva con file, new, table, DD pregunta cual formato de tabla se va a usar;

        • El formato a seleccionar es Paradox 7,(Borland es la compañía propietaria de los arriba mencionados, otras versiones de BORLAND DELPHI ya traen licencias para nuevos tipos, como Access, etc.), ya hecha la selección entramos a el siguiente editor de tablas:

          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.

        • 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:

          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.

        • 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:

          [ ] campo requerido

          [ ] valor mínimo

          [ ] valor máximo

          [ ] valor de default

          [ ] picture(mascarilla de edición)

          La propiedad siguiente tiene sus propios elementos y así sucesivamente.

          De momento solamente dejar las propiedades o sus partes en blanco.

        • 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., 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 por ejemplo (MITABLA).

          Ya creada la tabla, es conveniente cargarle unos cuantos renglones registros o datos para pruebas, esto se hace con:

          1. Usar el icono de OPEN tabla y seleccionar la tabla a cargar.

          2. Entrar al modo de edición usando la opcion TABLE EDIT TABLE o TECLA F9 o icono EDIT (para que se vea este icono maximizar DATABASE DESKTOP) y ya se puede empezar a capturar los datos en cada renglón.

          3. Para terminar solo click en la X arriba en la tabla respectiva.

            Ejemplo de una tabla;

            Recordar que como la clave es de tipo AUTOINCREMENT en mi ejemplo, no se ocupa capturarla, solo capturar el resto del renglon y cambiarse de renglon, para que database desktop la cargue.

            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 BORLAND DELPHI

      • APLICACIONES O PROGRAMAS CON TABLAS:

        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.

        En Borland Delphi 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.

      • APLICACIONES POR RENGLON:

        Para construir una aplicación, presentándole un solo renglón al usuario para su procesamiento en Borland Delphi solo se ocupa una forma (Form1) y cuatro 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 contiene todos los procesos mas usuales para la manipulación y procesamiento de los datos en renglones de la tabla.
          • Su aspecto físico en pantalla es:

          • como se observa, es una pequeña barra de botones, donde cada uno de ellos, representa y ejecuta un proceso con todo un renglón de la tabla, dichos procesos son: 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.

        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:

      • APLICACION POR TABLA:

        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)

        Este componente le presenta todos los renglones a la vez al usuario para su procesamiento, en un formato muy similar al visto en el componente StringGrid.

        Su propiedad mas común es:

        • 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.

        Un ejemplo de aplicación con esta estructura es:

        Pantalla de Diseño

        Pantalla de ejecución:

      • PROCESOS BASICOS:
        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 tiene el campo edad en DBEdit3) poner un componente edit1 para desplegarlos en meses y realizar la siguiente operación en el onclick de un botón apropiado como lo muestra el siguiente programa ejemplo

        
        				procedure TForm1.Button1Click(Sender: TObject);
        				
        				var
        				
        				meses:integer;
        				
        				begin
        				
        				meses := StrToInt(DBEdit3.Text) * 12;
        				
        				Edit1.Text := IntToStr(meses);
        				
        				end;
        

        Corrida:

        Como se observa se puede accesar y manipular los componentes DBEdit usando la propiedad Text, tanto para leerlos como para cargarlos.

      • BUSQUEDAS:

        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:

        • Una aplicación construida por renglón, es decir con DBEdit para desplegar el resultado.
        • Un Edit para almacenar el dato o valor a buscar por parte del usuario.
        • Haber estudiado la ayuda del borland delphi para las propiedades y métodos del componente Table.
          • Un botón de ordenes (OK) con el siguiente código:
          
          			procedure TForm1.Button1Click(Sender: TObject);
          			
          			var
          			
          			temp:integer;
          			
          			opcion:TLocateOptions;
          			
          			begin
          			
          			Table1.Locate('NOMBRE',Edit1.Text,[]);
          			
          			end;
          

          corrida:

          Los parámetros del método Locate(), son;

          Locate(”Columna de búsqueda” ,”Dato a buscar” , [loCaseInsensitive, loPartialKey]);

          cuando opción = loCaseInsensitive ? ignora diferencia entre mayúsculas y minúsculas

          cuando opción = loPartialKey ? resultado parcial, ejemplo si se busca “ju” se posesiona en el primer renglón donde ese campo empiece con “ju”, ejemplo Juan, juvenal, etc.

      • FILTROS:

        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.

        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.__

        • Datos o constantes strings en PASCAL, van encerrados entre apóstrofes( comillas sencillas), ejemplo ‘Juan’, ‘Tijuana’, etc.
        • Los operadores relaciónales son ( =, >, <, >=, ?, <> ).
        • Los operadores lógicos son ( and, or, not ).

        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;

          }

      • GRAFICOS O IMAGENES:

        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 borland delphi 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:
          • Un archivo de tipo *.jpg( u otros formatos similares)
          • 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:
          • 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).
          • Usar además del componente DBImage un componente Button de ordenes(OK) con el siguiente código:

            onclickbutton1()
            { DBImage1.PasteFromClipboard(); }

          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 grafico por ejemplo un 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()
          { DBImage1.Picture.LoadFromFile(’C:\datos\mifoto.jpg’); }

          Ya debe estar en el directorio o folder datos dicho archivo grafico 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.

      • IMPRESION O REPORTES:

        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™

        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:

          • +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:

          • Caption = CIA ACME
          • 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:

          • Data = click a un lado y seleccionar qrsdate

        6. QRSysData2

          Otro del anterior, colocarlo dentro de la banda de encabezado, propiedad

          Data = click a un lado y seleccionar qrsPageNumber

        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

          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. 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();

          solo una de las dos }

        ejemplo:

        • Pantalla de diseño

        • Programa:

          --------------------------

          Button1Click(TObject *Sender)
          QuickRep1.Preview();

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

        • Pantalla de corrida:

        • Pantalla de Preview durante ejecución:

          bueno parte de ella.

      • IMPRESION DE TODA LA TABLA: 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.

        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,

        QRBand1 = banda de encabezado,
        QRBand2 = Banda de titulo,
        QRBand3 = Banda de detalle, etc.

        En general el procedimiento completo es:

        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.

      MySQL Y DELPHI Volver al principio

      • Primero tiene que instalar Easy-PHP.

      • Luego instalar MySQL ODBC.

      • Los pasos para poder ver nuestra base de datos recién creada desde Delphi son los siguientes:

        Lo primero que vamos a hacer es crear el alias de la base de datos. Para esto debemos seguís los siguientes pasos:

        Inicio -> Configuración -> Panel de Control -> Herramientas Administrativas -> Orígenes de Datos ODBC:

        Hacen click en Agregar…

        Aparece la siguiente ventana:

        Seleccionan MySQL ODBC 3.51 Driver y hacen click en Finalizar.

        Aparecerá la ventana que se muestra a continuación:

        En donde completamos los siguientes datos:

        • Data Source Name: El Alias, es decir el nombre con el que haremos referencia nuestra base de datos.

        • Data Base Name: El nombre con el que creamos la base de datos en MySQLFront. Aquí debe aparecer el nombre de uno de los directorios que se encuentran en C:\Archivos de programas\ EasyPHP1-8\mysql\data.

          Recuerden que aquí se crea un directorio para cada base de datos.

        • User y Password: Nombre de usuario y contraseña. Podemos dejarlo en blanco por razones prácticas.

        • Botón Test Data Source: Hacer click para probar la conexión.

          Si ponemos un nombre de una base de datos inexistente aparece la siguiente ventana de error:

          Lo que nos indica que no se conoce la base de datos.

          Colocando el nombre correcto de la base de datos, y probando una vez más tenemos que ver lo siguiente:

          Lo cual indica que todo salió bien. Hacemos click en los botones Aceptar y OK en las ventanas sucesivas y cerramos el panel de control.

          Listo.

          Si tienen corriendo Delphi deberán cerrarlos y ejecutarlo de nuevo para que se tomen los cambios.

          Ahora creamos una nueva aplicación Delphi. Creamos un módulo de datos. Colocamos en el los componentes de Table y DataSource.

          En el componente de tabla elegimos el alias de la base de datos, el nombre de la tabla, la activamos, etc., tal como lo vimos anteriormente.

          De aquí en más nos olvidamos que estamos trabajando con MySQL. Todos los métodos tradicionales para insertar, modificar y eliminar registros van a funcionar bien.

      Ejemplo: Video Club Volver al principio

      Código de Altas

      
      			procedure TForm1.botonaltasClick(Sender: TObject);
      			begin
      			panelbajas.Visible:= False;
      			botonautores.enabled:=false;
      			botsalir.enabled:=false;
      			 panelmodif.Visible:= False;
      			 panelbuscar.Visible:= False;
      			 panelaltas.Visible:= True;
      			  pgrilla.Visible:= false;
      			  mconsultas.enabled:=false;
      			  editaltacodigo.setfocus;
      			
      			  marchivo.Enabled:=false;
      			
      			  end;
      

      Código de Bajas

      
      				procedure TForm1.botonbajasClick(Sender: TObject);
      				begin
      				botonautores.enabled:=false;
      				botsalir.enabled:=false;
      				 panelaltas.Visible:= false;
      				 panelbajas.Visible:= True;
      				 editejemplareli.setfocus;
      				 panelmodif.Visible:= False;
      				 panelbuscar.Visible:= False;
      				 puedeborrar:= False;
      				  pgrilla.Visible:= false;
      				  mconsultas.enabled:=false;
      				
      				  marchivo.Enabled:=false;
      				
      				end;
      

      Código de Modificación

      
      				procedure TForm1.botonmodificacionesClick(Sender: TObject);
      				begin
      				 panelaltas.Visible:= false;
      				 panelbajas.Visible:= false;
      				 panelmodif.Visible:= true;
      				 panelbuscar.Visible:= False;
      				 puedeborrar:= False;
      				 pgrilla.Visible:= false;
      				  mconsultas.enabled:=false;
      				  botonautores.enabled:=false;
      				botsalir.enabled:=false;
      				editmodificarcodigo.clear;
      				editmodificarnombredepelic.clear;
      				editmodificargenero.clear;
      				editmodificaredicion.Clear;
      				editmodificarcodigo.Enabled:=true;
      				editmodificarcodigo.SetFocus;
      				  marchivo.Enabled:=false;
      				
      				end;
      

      Código de Consultas

      • En forma manual
        
        				procedure TForm1.busquedacomboClick(Sender: TObject);
        				begin
        				 panelbuscar.visible:= True;
        				 botonautores.enabled:=false;
        				 botsalir.enabled:=false;
        				 mconsultas.enabled:=false;
        				 editbuscarcodigo.setfocus;
        				
        				  marchivo.Enabled:=false;
        				
        				 end;
        

      • Con grilla
        
        				procedure TForm1.busquedagrillaClick(Sender: TObject);
        				var
        				 registro: peliculas;
        				 contadorfila: integer;
        				begin
        				botonautores.enabled:=false;
        				botsalir.enabled:=false;
        				 pgrilla.Visible:= True;
        				 panelmodif.Visible:=false;
        				panelbajas.Visible:=false;
        				panelaltas.Visible:=false;
        				 grilla.Cells[0,0]:= 'Codigo';
        				 grilla.Cells[1,0]:= 'Nombre de pelicula';
        				 grilla.Cells[2,0]:= 'Genero';
        				 grilla.Cells[3,0]:= 'Edicion';
        				 Seek(asArchivo,0);
        				 contadorfila:= 1;
        				 mconsultas.enabled:=false;
        				
        				
        				  marchivo.Enabled:=false;
        				
        				 while not(eof(asArchivo)) do
        				 begin
        				  read(asArchivo,registro);
        				  if registro.borrado= False then
        				  begin
        				   grilla.Cells[0,contadorfila]:= floattostr(registro.ejemplar);
        				   grilla.Cells[1,contadorfila]:= registro.Nombre;
        				   grilla.Cells[2,contadorfila]:= registro.Autor;
        				   grilla.Cells[3,contadorfila]:= floattostr(registro.Edicion);
        				   contadorfila:= contadorfila + 1;
        				   Grilla.RowCount:= contadorfila;
        				  end;
        				 end;
        				end;
        

      PARADIGMA
      La ignorancia niega o agrede o critica
      La ciencia duda..!!
      Wilucha

      Apuntes de clasesLenguaje Apuntes de clasesGramática Apuntes de clasesAutómata Apuntes de clasesLaplace Apuntes de clasesSeries Apuntes de clasesEcuación Apuntes de clasesOperador

      PARADIGMA
      Cultivo una rosa blanca
      ..en julio, como en enero
      para el amigo sincero
      que me da su mano franca..!!

      Y para el cruel que me arranca
      el corazón con que vivo,
      cardo ni ortiga cultivo;
      ..cultivo una rosa blanca..!
      José Martí

      Te espero en: wilucha@gmail.com

      Esta page está en: www.wilocarpio.com.ar

      13/10/2010

      Volver al principio