Está en la página 1de 83

www.casadelphi.

com

Pablo Bustos Fernndez.

Manual Bsico de Delphi 6


Autor: Pablo Bustos Fernndez.

Email: Pablo@casadelphi.com
Web: www.casadelphi.com

Pgina 1

www.casadelphi.com

Temas

Pablo Bustos Fernndez.

Pgina

Entorno de desarrollo.

Operadores Aritmticos y Lgicos

Declaracin de Variables.

13

Sentencias de Control.

17

Mensajes en Delphi

21

Componentes de la ficha Standar.

24

Componentes de la ficha Adittional.

27

Componentes de la ficha Win32.

31

Componentes de la ficha System.

34

Creacin de un Reproductor de Vdeo.

35

Bases de Datos.

41

Ficha Data Access

41

Ficha Data Controls

42

Ficha BDE

43

DataBase DeskTop y Componentes de la ficha


para B.D.).

DataControls (Exclusivos
44

Bsquedas mediante consultas SQL .

58

Generacin de Reportes con QuickReport.

62

Creacin de Una Aplicacin

68

Pgina 2

www.casadelphi.com

Pablo Bustos Fernndez.

Hola,

antes que nada quiero que no se desanimen si es que apenas


comienzan a utilizar Delphi, y sobre todo si estn migrando de lenguajes de MsDos como turbo C, Pascal, Clipper, etc., se presta mucho a confusiones. As es
que tratare de dar este curso lo ms explicado posible.

Delphi

es un lenguaje de programacin de propsito general de cuarta


generacin, desarrollado por Borland. Utiliza la programacin orientada a
objetos, de hecho el cdigo se escribe igual que en pascal ya que utiliza el Objet
Pascal. Existen competidores de Delphi como el Visual Basic o Visual Foxpro de
Microsoft, pero en lo personal me agrada ms Delphi.

Muy bien ahora viene lo interesante, el desarrollo de los temas.


Entorno

de Desarrollo

El entorno de desarrollo, tambin conocido como IDE, se muestra al iniciar


Delphi integrando todas las herramientas necesarias (Editor de cdigo, Editor de
imgenes, Depurador, Herramientas de conexin a bases de datos, fichas de
componentes, etc.) para desarrollar nuestras distintas aplicaciones. En la
siguiente figura se muestra su entorno.

Pgina 3

www.casadelphi.com

Pablo Bustos Fernndez.

Men Principal

. . . En l, Se puede realizar casi todo desde los diferentes


submens como definir las opciones de compilacin, personalizar las fichas de
componentes o agregar nuevas, guardar o abrir proyectos, etc., es necesario
revisarlo antes de comenzar.

Barra de Herramientas . . .

Esto es solo un conjunto de botones de acceso


rpido a las diferentes opciones del men, lo cual nos facilita ejecutar las
acciones ms utilizadas de una manera mas rpida. Dando un Click sobre ellas
con el botn derecho del ratn podremos configurarlas. A continuacin muestro
la funcin de alguno de ellos.

Fichas de Componentes . . .

Son las que dan Acceso a los componentes que


forman la biblioteca de componentes visuales conocida tambin como VCL (
Visual Component Library) y se encuentra dividida en varias categoras segn
las funciones que realizn. Cada paleta incluye en su parte izquierda el botn
puntero que no es un componente sino que su funcin es parecida a la de
cualquier programa grfico sirve para deseleccionar componentes
seleccionados, etc. Para insertar un componente en el formulario solo selecciona
el componente a insertar despus pulsa sobre el formulario y arrastra el ratn
para definir su tamao, en caso que no lo arrastres Delphi automticamente le
pone su tamao predeterminado. Otra forma de insertar los componentes es
dando doble Clic sobre el componente a insertar en la ficha de componentes.

Formulario o Form . . . Es la pieza principal del diseo de las aplicaciones, es el


contenedor final de otros componentes que finalmente constituirn nuestra
aplicacin. El formulario es un componente ms de Delphi por lo cual tiene
propiedades y eventos los cuales se pueden alterar y trabajar con ellos. Para
aquellas personas que emigran de lenguajes de programacin lineal como C o
Clipper tengan en cuenta que ustedes utilizaran tantos formularios como su
aplicacin los requiera.

Pgina 4

www.casadelphi.com

Pablo Bustos Fernndez.

Inspector de Objetos u Object Inspector . . . Este nos permite modificar las


propiedades y respuestas a sucesos o eventos de los componentes, sus datos
muestran el estado del componente seleccionado o del mismo formulario. Esta
dividido en dos partes en forma de pestaas o solapas una que dice Properties y
Events. A continuacin se muestra las propiedades del formulario.

Existen propiedades que tienen un signo de mas, eso


significa que son contenedoras de otras opciones. A
continuacin se explican algunas de las propiedades ms
comunes del formulario.
BorderIcons: Tiene cuatro opciones mismas que reciben
un valor falso o verdadero (True o False) de las cuales
dos son muy tiles y empezaremos por la de biMinimize,
esta opcin esta en True por default y permite que
nuestro formulario se pueda minimizar. biMaximize por
default est en True y permite que nuestro formulario se
pueda maximizar en tiempo de ejecucin.

BorderStyle: Despliega una lista con los diferentes estilos de bordes para el
formulario.

Pgina 5

www.casadelphi.com

Pablo Bustos Fernndez.

Caption: Esta es una propiedad importante debido a que es aqu en donde


escribimos el texto de la barra de titulo del formulario, es alfanumrica y por
defaul tendr el nombre del formulario (Form1 en este caso)..
Name: Es el nombre del componente, por Defaul aparecer Form y el numero de
formulario, en este caso es Form1, este se puede modificar y ponerle un nombre
que nosotros queramos has de cuenta que el formulario es una variable y la
propiedad Name tiene el nombre de esa variable.
Position : Despliega una lista en la cual muestra las diferentes posiciones sobre
las cuales podemos mostrar nuestro formulario al momento de correrlo.
WindowsSatate: Despliega una lista de valores WsNormal, WsMinimized,
WsMaximized, las cuales alteran nuestro formulario al momento de correrlo es
decir si elegimos la de WsMaximized mostrara maximizado nuestro formulario.

Para dimensionar nuestro formulario basta con alterar las propiedades Height y
Width aunque tambin se puede realizar posicionando sobre los bordes del
formulario el puntero del ratn y arrastrarlo hasta lograr la dimensin que
queramos.

Nota: Existen Propiedades que son iguales para varios componentes como
Caption, Font, Visible, etc.

Ahora mostrar los eventos del formulario.


Los eventos son sucesos que detecta nuestro formulario
y segn el suceso detectado se ejecuta su cdigo, existen
varios eventos, explicar solo algunos, de cualquier forma
durante el curso se explicarn ms. Para introducir el
cdigo basta con dar doble Click en la parte derecha del
evento a utilizar y Delphi automticamente nos crea el
procedimiento de dicho evento y nos muestra el editor de
cdigo.

Pgina 6

www.casadelphi.com

Pablo Bustos Fernndez.

Principales eventos del ratn.


Nombre.
Accin.
OnDlClik
Doble clic de ratn.
OnClick
Un clic de ratn.
OnMouseMove El ratn pasa por encima del control.
OnMouseDown Es pulsado un botn del ratn.
OnMouseUp
Es liberado el botn anteriormente pulsado

Principales eventos de teclado.


Nombre

Accin

OnKeyPress

El cdigo que se ponga en este


evento se ejecutar cada que se
presione una tecla, este evento
nos permite revisar la variable
Key,
misma
que
contiene
contiene la tecla presionada.
Previamente
la
propiedad
KeyPreview se tiene que poner
en True.

OnKeyDown

Una tecla ha sido pulsada.

OnKeyUp

La tecla anteriormente pulsada


ha sido liberada

Principales eventos del sistema.


Nombre

Accin

OnActivate

El formulario se activa, y toma


el papel principal.

OnClose

El formulario se cierra.

OnCloseQuery Se ha solicitado cerrar el


formulario.
OnCreate

El formulario se crea.

OnDesactive

El formulario pierde el papel


principal
pero
sigue
existiendo.

OnDestroy

El formulario es destruido, y

Pgina 7

www.casadelphi.com

Pablo Bustos Fernndez.


se devuelve la
usada a Windows.

memoria

OnPaint

El formulario necesita
pintado, porque algo
cambiado en l.

OnResize

Ha cambiado el tamao del


formulario.

ser
ha

Nota: Existen eventos que nos ofrecen ciertos datos o variables propios del
evento a tratar con los cuales se puede trabajar y pueden ser de mucha utilidad
como es el caso de Key del evento OnkeyPress.

Editor de Cdigo

. . . Es la parte principal del entorno de desarrollo, es aqu


donde se escribir el cdigo del programa. Por cada formulario que se crea
Delphi genera un unit que contiene todo el cdigo asociado a ese formulario.
Ese unit se graba con la extensin .Pas. A continuacin se muestra el editor de
cdigo.

Como se puede ver, en el formulario yo puse un componente TButton y en su


evento OnClick puse un mensaje. Hay que recordar que la escritura del cdigo
es en Pascal o dicho de otra forma Object Pascal.

Nota: Antes de pasar a nuestro primer programa quisiera dar un tip. Una vez
que tenemos un componente insertado en nuestro formulario en caso de que
queramos moverlo lo podemos hacer con el ratn pero tambin lo podemos

Pgina 8

www.casadelphi.com

Pablo Bustos Fernndez.

hacer con la tecla CTRL + Flechas de direccin, de igual forma si queremos


redimensionarlo lo podemos hacer con la tecla Shift + Flechas de direccin.

Ahora si, para que veas que el manual va en serio desarrollaremos un sencillo
programa, muy clsico pero necesario. Entra a Delphi, automticamente te va a
crear un nuevo proyecto, de cualquier forma puedes crearlo en el men
File/New/Applications. bien ya tenemos un nuevo proyecto ahora realiza lo
siguiente:

Vete al Inspector de Objetos, tendrs activada la ficha Properties si no


actvala, posicinate en la propiedad Caption y ponle el siguiente texto: Mi
primer programa en Delphi compadre.

Vete a la Propiedad Position dale click en su derecha y te desplegara


una lista de valores elige la que dice PoScreenCenter. Esto para que te
centre el formulario en tu pantalla.

Ahora Dale un Click a la pestaa que dice Events para que te muestre
los eventos del formulario. Despus posicinate en el evento que dice
OnClick y da doble Click en su parte derecha en lo blanco, te abrir el
editor de cdigo y crear un procedimiento, dentro del begin y el end pon
ShowMessage('Esperate estoy empezando'); Te tiene que quedar de la
siguiente forma:
procedure TForm1.FormClick(Sender: TObject);
begin
ShowMessage('Esperate estoy empezando');
end;

Ok. Ahora solo corre tu programa pulsando F9 y veras el resultado. Cada


que des un click sobre el formulario te mostrara el mensaje. Puedes
experimentar tu solo, cambiando las propiedades del formulario y corrindolo
para ver sus efectos.

Pgina 9

www.casadelphi.com

Pablo Bustos Fernndez.

Operadores Lgicos y Aritmticos


Operadores

Aritmticos . . . . Permite realizar todo tipo de operaciones


comunes con operandos numricos ya sean reales o enteros, en la siguiente
tabla se muestran los tipos de datos.
Operador

Operacin
Suma

Tipo
Tipo
Operando Resultado
Integer

Integer

Real

Real

Integer

Integer

Real

Real

+
Resta
-

Multiplicacin Integer
*
Divisin

Integer

Real

Real

Integer

Integer

Real

Real

Div

Divisin
entera

Integer

Integer

Mod

Resto

Integer

Integer

Operadores Lgicos . . . Se dividen en dos categoras los lgicos y los


booleanos. La diferencia esta en que las operaciones lgicas llevan la
comparacin de valores a nivel de bit y las operaciones booleanas realizan
comparaciones verificando si una cierta expresin es verdadera o falsa. En la
siguiente tabla se presentan las operaciones lgicas.
Operador

Operacin

Tipo
Operando

Tipo
Resultado

Not

Negacin a nivel de
Bit.

Integer

Integer

Pgina 10

www.casadelphi.com

Pablo Bustos Fernndez.

And

Producto a nivel de
Bit.

Integer

Integer

Or

Suma a nivel de Bit.

Integer

Intege

Xor

Or Exclusiva a nivel
de Bit.

Integer

Integer

Shl

Desplazamiento bit
a bit hacia la
izquierda.

Integer

Integer

Shr

Desplazamiento bit
a bit hacia la
derecha.

Integer

Integer

La siguiente tabla muestra los operadores booleanos.


Operador Operacin Tipo
Tipo
Operando Resultado
Not

Negacin.

Boolean

Boolean

And

Producto
lgico.

Boolean

Boolean

Or

Suma
lgica.

Boolean

Boolean

Xor

Or
Exclusiva
lgica.

Boolean

Boolean

Operadores Relacinales . . . Los utilizamos para realizar comparaciones entre


dos valores y a continuacin se muestran en la siguiente tabla.
Operador
=
<>

Operacin

Tipo Resultado

Igualdad.

Boolean

Desigualdad.

Boolean

Pgina 11

www.casadelphi.com

Pablo Bustos Fernndez.


<

Menor que.

Boolean

>

Mayor que.

Boolean

<=

Menor o Igual
que.

Boolean

>=

Mayor o Igual
que.

Boolean

Precedencia de Operadores . . . Cuando se evala una expresin

en la que
aparecen combinados diferentes operadores, las operaciones que representan
se ejecutan en cierto orden que estn marcados por la precedencia de los
operadores. A continuacin se muestra una tabla con su precedencia.
Operador
@ , Not

Precedencia
Primera

* , / , Div , Mod , Segunda


And , Shl , Shr ,
As
+ , - , Or , Xor

Tercera

=, <> , < , > , <= Cuarta


, >=

Categora
Operadores
Unarios
Operadores de
Multiplicacin
Operadores de
Adicin
Operadores
Relacionales

Existen cuatro reglas de precedencia que se deben de tomar en cuenta:

Las expresiones encerradas entre parntesis se evalan antes de


tratarlas como un nico operando. Lo que significa que primero se evala
lo que esta dentro del parntesis por ejemplo la siguiente operacin valor
:= 10 + (3*3); primero multiplica 3*3 y su resultado lo suma con el 10.
Un operador unario siempre precede al operador binario, por ejemplo -5
* 10 es lo mismo que tuviramos (-5) * 10.
Un operador que se encuentra entre dos operadores de precedencias
diferentes se relaciona con el operador de precedencia mayor, por
ejemplo valor := 5 * 3 + 10; en este caso primero se multiplica y despus
se suma.

Pgina 12

www.casadelphi.com

Pablo Bustos Fernndez.

Un operando que se encuentra entre dos operadores iguales se relaciona


con el de su izquierda. Por ejemplo si se tuviera valor := 5 + 3 + 6; es lo
mismo que valor := (5 + 3) + 6;.

Declaracin de Variables y Constantes


CONSTANTES . . . Se utilizan para representar lgicamente un valor que
ser utilizado repetidamente en nuestro programa y que no variar durante su
ejecucin. Para su declaracin se utiliza la palabra reservada Const. Por ejemplo
continuacin declarar la constante PI = 3.14 y nombre ='Pablo ' en el evento
Oncreate del formulario.
procedure TForm1.FormCreate(Sender: TObject);
const
PI = 3.14;
nombre = 'Pablo ';
begin
ShowMessage(nombre+FloatToStr(PI));
end;
Si declaras constantes o variables dentro de algn procedimiento, iran entre el
Procedure y el Begin. Como puedes ver utilizamos nuevamente la funcin
ShowMesage() la cual me permite mandar un mensaje sencillo al usuario pero
bueno se explicar ms adelante en mensajes. De igual forma utilizo la funcin
FloatToStr() la cual me permite convertir valores de tipo flotante a cadena.

Variables . . .

Una variable es un valor perteneciente a un cierto


dominio y puede variar durante la ejecucin del programa. En Delphi las
Variables se declaran con la palabra reservada Var. Por ejemplo realizaremos la
misma funcin que las constantes pero ahora utilizando variables y el cdigo
quedara as:
procedure TForm1.FormCreate(Sender: TObject);
var
PI : Real;
nombre : String;
begin
PI := 3.14;
nombre := 'Pablo ';
ShowMessage(nombre + FloatToStr(PI));
end;

Pgina 13

www.casadelphi.com

Pablo Bustos Fernndez.

NOTA: En Delphi las Asignaciones se realizan mediante := como puedes


observar.
Bien ya vimos como declarar constantes y variables ahora es necesario ver los
tipos de datos soportados por Delphi.
Delphi Soporta tipos de datos simples y tipos de datos compuestos pero por
ahora nos enfocaremos a los simples.

Tipos Enteros . . .

Son aquellos que representan nmeros no


decimales dentro de un rango y existen diferentes tipos de enteros clasificados
segn su rango. A continuacin muestro una tabla con los tipos de datos
enteros.
Tipo
Byte
Word
LongWord
ShortInt
SmallInt
LongInt
Int64
Integer
Cardinal

Rango de
Formato
Valores
0 .. 25
8 bits sin signo
0 .. 65535
16 bits sin signo
0 .. 4294967295 32 bits sin signo
-128 .. 127 8 bits con signo
-32768 .. 32767 16 bits con signo
-2147483648 ..
32 bits con signo
2147483648
-2Exp63 ..
64 bits con signo
2Exp63-1
-2147483648 ..
32 bits con signo
2147483648
0 .. 214 7483648 32 bits sin signo

Por defecto las operaciones aritmticas con valores enteros devolvern un valor
entero, hay que tener cuidado por que una variable de tipo entera no puede
almacenar un dato de tipo real, ms sin embargo una variable de tipo real si
puede recibir un dato entero.

Tipos Reales . . . Son adecuados para variables que albergan valores


con una parte decimal, a continuacin muestro una tabla con los diferentes tipos
reales soportados por Object Pascal.
Tipo
Single
Real48

Rango de valores
1.5 * 10Exp-45 ..
3.4 * 10Exp38
2.9 * 10Exp-39 ..
1.7 * 10Exp38

Tamao
Dgitos
en
Significativos
Bytes
7-8

11-12

Pgina 14

www.casadelphi.com

Pablo Bustos Fernndez.

5.0 * 10Exp-324 ..
1.7 * 10Exp308
5.0 * 10Exp-324 ..
Double
1.7 * 10Exp308
3.4 * 10Exp-4932 ..
Extended
1.1 * 10Exp4392
Comp -2Exp63 .. 2Exp63 -1
9223372036854775808
Currency
..
9223372036854775807
Real

15-16

15-16

19-20

10

19-20

19-20

La declaracin de variables reales utiliza exactamente la misma sintaxis que la


explicada para los nmeros enteros. De hecho en el ejemplo anterior se declaro
una variable de tipo Real.

Tipos Booleanos . . .

Este es un tipo de dato muy sencillo pero


igualmente utilizado, representan cantidades lgicas como verdadero o falso y
en el Object Pascal existen cuatro que son: Boolean, ByteBool, WordBool y
LongBool. El que se recomienda ms es el tipo Boolean debido a que utiliza
menos memoria, las otras existen para permitir la compatibilidad con otros
lenguajes y el entorno de Windows. Bueno a continuacin te muestro su tabla.
Tipo
Boolean
ByteBoolean
WordBool
LongBool

Memoria Requerida
en bytes
1 (Recomendado)
1
2
4

Se declaran como cualquier otra variable solo que el valor que pueden recibir es
True o False. Ejemplo. Este cdigo se puso en el evento Oncreate del
Formulario Ok.
procedure TForm1.FormCreate(Sender: TObject);
var
Compadre : Boolean;
begin
Compadre := True;
If Compadre = True then
ShowMessage('Tu si eres mi compadre')
Else
ShowMEssage('Tu no eres mi compadre');
end;

Pgina 15

www.casadelphi.com

Pablo Bustos Fernndez.

Este fue un ejemplo intil, pero es solo para ilustrar su manejo muy
simplemente, tu eres quien le dars una verdadera aplicacin si tus problemas lo
requieren. Por lo pronto puedes experimentar cambiando la asignacin de
compadre a False.

Tipos de Carcter . . .

Los tipos de carcter estn diseados para


albergar caracteres segn un cierto cdigo numrico que usualmente es el ANSI
que mediante palabras de 8 bits representa hasta 256 caracteres. A
continuacin muestro su tabla.
Tipo
AnsiChar
WideChar
Char

Carcter que
contiene

Memoria
requerida en
Bytes

Un Caracter
Ansi
Un Caracter
Unicode
Un Caracter
Ansi

1
2
1

Tipos Cadena de Caracteres . . .

Tambin conocidos como


String. Estas existen como tipos predefinidos que albergan la concatenacin de
un determinado nmero de caracteres bueno es algo parecido a los arrays si as
lo quieren ver. En seguida muestro la tabla con los diferentes tipos.
Carcter
Longitud
Tipo
que
Memoria
Mxima
contiene
~2Exp31 Hasta
AnsiString AnsiChar
Caracteres GB.
255
2 a 256
ShortString AnsiChar
Caracteres Bytes.
~2Exp31 256 hasta
String AnsiChar
Caracteres 2GB.
~2Exp30 Hasta
WideString WideChar
Caracteres 2GB.
Te pongo un ejemplo para explicar su uso.
procedure TForm1.FormCreate(Sender: TObject);
var
Nombre, Apellido : String;
begin
Nombre := 'Pablo ';
Apellido := 'Bustos';
Pgina 16

www.casadelphi.com

Pablo Bustos Fernndez.

Nombre := Nombre + Apellido;


ShowMessage(Nombre);
end;
Nota: a diferencia de C y otros lenguajes, en Delphi las concatenaciones se
hacen con el signo +; las asignaciones se hacen normalmente, nicamente
utilizan las comillas simples (') para indicarle que se trata de una cadena. Como
anteriormente se mencion estas variables son parecidas a los arrays y
podramos accesar directamente a alguna posicin de la variable por ejemplo si
a la variable Nombre nicamente quisiera concatenarle la letra B de la Variable
Apellido lo hara de la siguiente forma: Nombre := Nombre + Apellido[1]. Como
puedes ver a diferencia de C el inicio de posiciones comienza en 1 y no en 0.
Ok.
Existe la instruccin Array perteneciente a los datos compuestos, la cual permite
declarar arreglos de una o varias dimensiones.

Sentencias de control
Todo programa esta constituido por decisiones y acciones que se ejecutan
repetidamente en funcin del estado del programa y las sentencias de control,
son las que nos permiten hacer esas cosas. Explicar las ms utilizadas.

Condicion If ... Then :

Las condiciones If sin duda son unas de las


mas utilizadas y permite condicionar la ejecucin de un determinado cdigo al
cumplirse una determinada condicin. La sintaxis seria como sigue:
If Condicion Then
Codigo1
Else
Codigo2
Codigo1, se ejecutar cuando la condicin se cumple y Codigo2 cuando la
condicin no se cumple. Pueden anidarse tantas sentencias if como necesites.
Cuando los cdigos a ejecutar tanto para el Else como para el IF son ms de
una instruccin se deben de poner entre un Begin y un End. Para que quede
mas claro haremos un ejercicio mas practico, el cdigo ir en el evento Oncreate

Pgina 17

www.casadelphi.com

Pablo Bustos Fernndez.

del Form. Se preguntarn por que utilizo ese evento bueno pues por que todava
no les enseo como funcionan otros componentes.
procedure TForm1.FormCreate(Sender: TObject);
var numero : Integer;
begin
Randomize();
numero := random(20);
if numero > 10 Then
begin
numero := numero * numero;
ShowMessage('Es mayor, al cuadrado es: ' + IntToStr(numero));
end
Else
begin
numero := numero * numero;
ShowMessage('Es menor, al cuadrado es: ' + IntToStr(numero));
end;
end;
Nota: En el ejemplo declaro una variable de tipo entero despus utilizo la
funcin Randomize() la cual inicializa el motor de generacin de nmeros
aleatorios luego asigno a numero el resultado que devuelva random(20) la cual
es una funcin que devuelve un valor aleatorio entre un rango previamente
especificado que en este caso es un 20. Este ejemplo es muy sencillo lo que
hace es generar un numero aleatorio lo compara y si es mayor que diez manda
un mensaje diciendo que es mayor y mostrando su cuadrado y en caso de que
sea menor hace casi lo mismo solo que indica que es menor.

Case ... OF :

Permite comparar una variable o expresin con un conjunto


predeterminado de valores y ejecutar un cdigo determinado de acuerdo al
resultado de la comparacin o expresin. Aqu tienes su sintaxis.
Case Expresion Of
Lista de constantes separadas por comas : Codigo;
Valor Inicial .. Valor final : Codigo2;
Else
Codigo por Defecto;
Hay va un ejemplo para que quede mas claro Ok.
procedure TForm1.FormCreate(Sender: TObject);
var numero : Word;
begin
Pgina 18

www.casadelphi.com

Pablo Bustos Fernndez.

Randomize();
numero := Random(4);
Case numero Of
0: ShowMessage('El numero es un Cero');
1: ShowMessage('El numero es un Uno');
2: ShowMessage('El numero es un Dos');
else
ShowMessage('El numero es mayor que dos');
end;
end;
Este es un ejemplo muy sencillo, genero un numero aleatorio de entre 4 dgitos
incluyendo el cero, luego con el Case lo comparo hasta el numero dos dejando
un mensaje en el else para cuando el numero sea mayor que dos.
Bueno creo que ha llegado la hora de explicar los ciclos o bucles as que
empezaremos.

Repeat Until :

Permite ejecutar un determinado cdigo hasta que se


satisfaga una cierta condicin, su sintaxis es de la siguiente forma:

Repeat
Codigo
Until Condicion
La condicin debe producir un resultado de tipo Booleano, cabe mencionar que
en este tipo de ciclos el cdigo se ejecuta por lo menos una vez debido a que la
condicin se realiza en la parte final del ciclo.
Les pondr un sencillo ejemplo pero ahora utilizaremos el evento OnClick del
Form.
procedure TForm1.FormClick(Sender: TObject);
var numero, suma : Integer;
begin
numero := 1;
suma := 0;
repeat
suma := suma + numero;
inc(numero);
until numero = 10;
Pgina 19

www.casadelphi.com

Pablo Bustos Fernndez.

ShowMessage(IntToStr(suma));
end;

While ... Do :

Es parecido al anterior solo que la verificacin del ciclo se


realiza al inicio. Aqu tienes su sintaxis.
While Condicin Do
Codigo
Si el cdigo es mas de una instruccin se tendr que poner entre un Begin y un
End. que no se te olvide. De este ciclo no pondr ejemplo creo que tu puedes
utilizar el cdigo anterior y aplicarlo a este ciclo.

For ... Do :

Nos permite repetir la ejecucin de un determinado cdigo un


numero definido de veces. La sintaxis es como sigue.

For Variable := Valor Inicial To/Downto Valor Final Do


Codigo

El Downto es para realizar ciclos en decremento y el To en incremento. as que


si quieres sumar los nmeros del 1 al 100 seria:
procedure TForm1.FormClick(Sender: TObject);
var numero, suma: Integer;
begin
suma :=0;
For numero := 1 To 100 Do
suma := suma + numero;
ShowMessage(IntToStr(suma));
end;

Con esto hemos concluido una parte que es fundamental conocer para el
manejo de Delphi, como lo es su entorno de desarrollo, declaracin de
constantes, variables y sus sentencias de control. As que de aqu en adelante
nos dedicaremos a ver cosas mucho ms interesantes, explotaremos la
potencialidad de Delphi y empezaremos por ver los tipos de mensajes que
Delphi permite realizar.

Pgina 20

www.casadelphi.com

Pablo Bustos Fernndez.

Mensajes en Delphi
Es verdaderamente til poder interactuar con el usuario, decirle que es lo que
esta ocurriendo o dejarlo que tome decisiones. Esto en parte podemos lograrlo
con las ventanas o cuadros de mensaje, por si no tienes una idea clara de que
es lo que son pues son por ejemplo el cuadro que te aparece en Word (u otra
Aplicacin) cuando no has guardado tu trabajo preguntando si deseas guardarlo.
Delphi permite Los siguientes tipos de Mensajes.

ShowMessage
ShowMessagePos
MessageDlg
MessageDlgPos
MessageBox

ShowMessage . . .

Es el mas sencillo de todos y ya lo hemos utilizado


en ejercicios anteriores. El cuadro parece por defecto centrado en la pantalla, el
titulo de la ventana es el nombre de la aplicacin, el texto del mensaje lo
indicamos nosotros entre comillas simples y solo tiene un botn. Ejemplo:
ShowMessage('Quiubule Familia').

ShowMessagePos . . . Es Parecido al anterior pero tiene dos valores mas


que indican las coordenadas donde se mostrara el cuadro indicando primero el
ancho y luego el largo. Debes tener cuidado pues la posicin se debe poner en
Pixeles por lo tanto debes sabe el tamao de tu pantalla, esto lo logras haciendo
una pequea llamada al Objeto TScreen.Width obtienesel ancho y con
Screen.Height el Largo. Bueno como ejemplo podras poner en el evento
Onclick de tu formulario el siguiente cdigo:
ShowMessagePos ('Utilizando Coordenadas', Screen.Width div 3,Screen.Height
div 3);

MessageDlg . . .

Hasta ahora los tipos anteriores de mensajes no dejan


que el usuario pues pueda tomar alguna decisin o algo por el estilo verdad, as
que el tipo de mensaje MessageDlg nos proporciona esa posibilidad. Los valores
que recibe son primeramente el texto que queremos mostrar, el tipo de cuadro
que mostraremos segn una lista predefinida por Windows, los botones que se
mostraran y la ayuda de la aplicacin que creemos si es que colocamos un
botn de ayuda en el cuadro. Bien ahora les mostrare la lista de cuadros
predefinidos por Windows.

mtIformation

Pgina 21

www.casadelphi.com

Pablo Bustos Fernndez.

mtWarning
mtError
mtConfirmation
mtCustom

Por cada tipo de cuadro windows automticamente te mostrara una imagen


relacionada al cuadro elegido. Ahora es necesario saber cuales son los tipos de
botones que podemos utilizar.

mbYes
mbNo
mbOk
mbCancel
mbAbort
mbRetry
mbIgnore
mbAll
mbHelp

Los tipos de botones que deseas debes ponerlos entre corchetes ([ ]), y
seguidos de una coma. O si lo prefieres Otra forma de hacerlo es poner un serie
de botones predefinidos, pero si lo haces no pongas los corchetes. Los botones
predefinidos son:

mbYesNoCancel
mbAbortRetryIgnore
mbOkCancel

Bien ahora pondr un ejemplo de como utilizarlo, pon el siguiente cdigo en el


evento
Onclick
de
tu
Formulario.
If MessageDlg ('Estas Aprendiendo?', mtConfirmation ,[mbyes,mbno],0) =
mrYes Then ShowMessage ('Que bueno, entonces vamos bien')
else
ShowMessage ('Hay jode, pos estdiale mas');
Si pusiste atencin te pudiste haber dado cuenta que MessageDlg devuelve el
valor del botn pulsado por el usuario. El valor devuelto puede tomar los
siguientes valores:

mrNone
mrAbort
mrYes
mrOk
mrRetry

Pgina 22

www.casadelphi.com

Pablo Bustos Fernndez.

mrNo
mrCancel
mrIgnore
mrAll

El valor de la constante tiene el nombre del botn pulsado, de esa forma en el


ejemplo cuando es pulsado el botn mbYes, el valor devuelto es mrYes.

MessageDlgPos . . .

Esta es una variante de la funcin MessageDlg,


funciona exactamente igual solo que se le tienen que pasar las coordenadas de
donde queremos que aparezca el cuadro de mensaje. Ejemplo
If MessageDlgPos ('Estas Aprendiendo?', mtConfirmation
,[mbyes,mbno],0,Screen.Width,Screen.Height) = mrYes Then ShowMessage
('Que bueno, entonces vamos bien')
else
ShowMessage ('Hay jode, pos estdiale mas');

MessageBox . . . Es un tipo de mensaje que hace llamada a la Api de


Windows sacndonos el titulo de los botones en espaol, claro si nuestro
Windows esta en espaol. No adentrare mucho en esto as que pondr un
ejemplo de su uso.
if Application.MessageBox('QUIERES SALIR DEL PROGRAMA
?','SALIR',MB_OKCANCEL+MB_ICONQUESTION)=IDOK then
Application.Terminate;
En este caso tambin se controla el tipo de botn a poner y las combinaciones
de las imgenes que pone Windows por defecto te las listo continuacin. Los
tipos de botones a poner ya se listaron anteriormente.









Mb_IconAsterisk
Mb_IconError
Mb_IconExclamation
Mb_iconHand
Mb_IconInformation
Mb_IconQuestion
Mb_IconStop
Mb_IconWarning

Bueno creo que sobre mensajes seria todo. Ahora pasaremos a explicar lo que
estaban esperando las fichas de componentes visuales. Finalmente verdad...

Pgina 23

www.casadelphi.com

Pablo Bustos Fernndez.

Ficha Standar
En esta ficha se encuentran los componentes mas utilizados y es la que esta
activada cuando entramos a Delphi. Explicare nicamente los principales.
Nota: Realizare algunos ejercicios durante el transcurso de la explicacin.
Ficha Standar.

Empezaremos a partir del segundo componente.


Imag Componente

Descripcin

Es un componente no visual que permite disear


el men del formulario que si ser visual.
Permite
disear
Mens
contextuales
o
PopupMenu emergentes, que aparecern al pulsar el botn
secundario del ratn.
Es un cuadro de texto esttico, por lo tanto
Label
visualiza texto pero no puede ser modificado.
Es un cuadro de Edicin de Texto que permite
Edit
visualizar y modificar una lnea de texto.
Es un Cuadro de Texto multilinea, se puede
Memo
visualizar y modificar varias lneas de texto. Es
parecido al Bloc de Notas
Es un Botton clsico de cualquier aplicacin
Button
Windows, no lleva ninguna imagen solo texto.
Es una casilla de verificacin que permite
ChechBox
seleccionar y deseleccionar opciones.
Botn de opcin parecido al CheckBox, se utiliza
RadioButton para seleccionar dentro de un conjunto de
RadioButton u opciones solamente uno de ellos.
Es una lista Standard de Windows en la que el
ListBox
usuario puede seleccionar un elemento de la lista.
Lista desplegable que combina las caractersticas
ComboBox de un ListBox y un Edit permitiendo al usuario
seleccionar un elemento.
ScrollBar
Barra de desplazamiento estndar.
Funciona
como
contenedor
de
objetos,
GroupBox
permitiendo agrupar diferentes controles.
MainMenu

Pgina 24

www.casadelphi.com

RadioGroup
Panel

Pablo Bustos Fernndez.


Es un contenedor exclusivamente para los
RadioButtons.
Contenedor de objetos pero mas potente que el
GroupBox.

Bueno ahora vamos a lo bueno aremos un ejercicio utilizando algunos


componentes explicados. as es que arranca Delphi o crea una nueva
Aplicacin.
Coloca un GroupBox en tu formulario, Dentro de el coloca dos etiquetas mismas
que en su propiedad Caption les pondras Valor uno y Valor dos. Despus pon
dos Edit ve a su propiedad Text y qutales el texto que tienen por defaul. Deben
de ir un Edit abajo de cada Label. Selecciona el Componente GroupBox y en su
propiedad Caption Coloca el texto Valores. Todo el GroupBox y su componentes
crgalos hacia tu parte superior izquierda.
Ahora en tu parte superior derecha pega un componente Label y en su
propiedad Caption le pondrs Operacin, Despus coloca un componente
ComboBox debajo del Label. Te vas a la propiedad Text del comboBox y
Escribes el texto Suma. despus ve a la propiedad Items y dale Click donde dice
String. te saldra una ventana en la cual escribirs los textos Suma, Resta en
lneas o filas separadas. y das Ok a la ventana.
Despus coloca debajo del ComboBox un componente Button y en su propiedad
Caption pon Calcular. Ahora coloca un componente Panel debajo del
Componente Button. dentro del panel pon un componente Label que por cierto si
has seguido mis instrucciones ser el Label6 y de hecho debe de ser el seis por
que lo utilizaremos para pegar el resultado de una operacin.
Muy bien ahora pon un componente RadioGroup en la parte inferior izquierda,
en su propiedad Caption pon color de ventana. Despus dentro de el coloca dos
RadioButtons al primero en su propiedad Caption Pon el texto Azul, y al segundo
ponle Normal.
Ahora pon un Componente Button al costado derecho del RadioGroup. y pon en
su propiedad Caption Aplicar.
Pon un componente MainMenu, Dale doble Click. te saldra una ventana en la
cual se irn viendo las opciones del men que bayas poniendo en su propiedad
Caption. Ahora vete a la propiedad Caption y escribe &Principal (El Amperson
indica la tecla caliente), da enter y ahora te aparecer principal en la ventana
que estar a tu derecha, en esa ventana debajo de la leyenda Principal habr un
campo en blanco selecciona con el ratn, despus vete a la propiedad Caption y
escribe &Salir. Ahora da click sobre el formulario para regresar a el.
Ahora el diseo quedara como sigue

Pgina 25

www.casadelphi.com

Pablo Bustos Fernndez.

Ahora vamos con el cdigo. Vete al evento Onclick del Button1 que dice
Calcular. dentro de el pondremos el siguiente cdigo:

if ComboBox1.Text = 'Suma' Then


Begin
Label6.Caption := FloatToStr(StrToFloat(Edit1.Text) + StrToFloat(Edit2.Text));
End;
if ComboBox1.Text = 'Resta' Then
Begin
Label6.Caption := FloatToStr(StrToFloat(Edit1.Text) - StrToFloat(Edit2.Text));
End;
Si te das cuenta en el Edit1 y Edit2 Guardamos los valores con los que aremos
una suma o resta segn elija el usuario. El resultado lo pegaremos en el Label6
en su propiedad Caption. Tanto el Edit como el Label son de tipo String por lo
que para hacer la operacin es necesario convertirlo por lo tanto los Edit los
convierto a flotantes mediante FloatToStr(). Ahora el resultado ser un tipo de
dato flotante para asignrselo al Label que es de tipo String tengo que
convertirlo mediante la instruccin FloatToStr();
En lo que respecta al uso del ComboBox me sirve para que el usuario elija el
tipo de operacin a realizar (Suma o Resta) yo previamente defin Suma y Resta

Pgina 26

www.casadelphi.com

Pablo Bustos Fernndez.

en el ComboBox. Cuidado si te fijas la primera letra de Suma y Resta esta en


maysculas si tu la escribes diferente tendrs que modificar las comparaciones
en el If.
Muy bien Ahora en el Evento Onclick del Button2 que dice Aplicar pon este
cdigo.
if RaDioButton1.Checked = True then
Form1.Color := ClBlue
else
Form1.Color := clBtnFace;
Como puedes ver la propiedad Checked me indica si un RadioButton esta o no
Activado. Y dependiendo de eso modifico el color del Form.
Ahora vete al men desplegable y dale Click en la opcin Salir de esta forma
Delphi te creara el procedimiento Tform1.Salir1Click en el cual pondrs este
cdigo.
Application.Terminate;
Esta instruccin permite terminar correctamente la aplicacin y devolver la
memoria a Windows.
Ahora solo corre el programa con F9 y listo. Experimenta con el.

Ficha Additional
Contiene componentes que amplan los componentes de la estndar y que
igualmente se utilizan frecuentemente. Explicare solo algunos de ellos. De
cualquier forma si sabes un poco de ingles puedes consultar la ayuda de Delphi
seleccionando la ficha y despus presionando F1.

Imagen Componente

Descripcin
Es un Botton que se le puede aadir un
grfico Bitmap. Contiene la propiedad Kind
BitBtn
que trae una lista de botones predefinidos
con sus Bitmap.
Es un botn utilizado en las barras de
SpeedButton herramientas, se le puede agregar un Bitmap
y trae la propiedad Flat que permite dar una
Pgina 27

www.casadelphi.com

Pablo Bustos Fernndez.


apariencia de boton plano.

MaskEdit
Image
Shape

Se utiliza para validar la entrada de datos


mediante el formateo del texto como lo es la
fecha, etc.
Permite mostrar grficos como Bitmaps,
iconos, Windows Metafiles, etc.
Permite dibujar polgonos, crculos y lneas.

Bevel

Es un rectngulo en 3D.
Define un rea contenedora mayor al rea
ScrollBox
visualizada, automticamente al sobrepasar
el rea salen las barras deslizadoras.
Es un ListBox solo que aade un CheckBox
CheckListBox
para cada elemento de la lista.
Sirve para definir reas modificables por
Splitter
parte del usuario.
Es similar a Label, solo que tiene mas
StaticText
propiedades modificables.
Se utiliza para crear barras de Herramientas
ControlBar
acoplables.
Chart

Util para crear diferentes tipos de grficos.

Bueno ahora es el momento de realizar algn ejercicio en donde utilicemos


algunos componentes descritos.
Crea una nueva aplicacin, al Caption del formulario ponle Ficha Addiotional, en
el formulario por un componente StaticText, en la Propiedad Caption pon Fecha,
la propiedad BorderStyle ponla en sbsSunken.
Coloca un componente MaskEdit, Da un Click sobre l con el botn secundario
del ratn, te saldr un men desplegable elige la opcin Input Mask Editor ( Esto
tambin lo puedes realizar en la propiedad EditMask), te saldr una venta con
mascaras predefinidas. Elige la que dice Date, si quieres la fecha en formato
MM/DD/AA, esta un botn que dice Masks, dale click y vete al directorio Bin de
Delphi y elige el archivo Spain. Ahora ya que seleccionaste Date. solo dale Ok. y
listo tienes tu mascara para la fecha.
Ahora Pon este cdigo en el evento OnCreate de tu Form.
MaskEdit1.Text := DateToStr(Date);
La funcin que devuelve la hora del sistema es Date y el valor devuelto es de
tipo fecha as que se tiene que convertir a String para pegarse en el MaskEdit.

Pgina 28

www.casadelphi.com

Pablo Bustos Fernndez.

Muy bien ahora coloca un componente Shape en el Form, ve a la propiedad


Shape y Elige la opcion StCircle. Despues ve a la propiedad Brush, presenta dos
opciones elige la opcin Colors y elige el color ClLime.
Despues de esto coloca un BitBtn a un costado del componente Shape. ve a la
propiedad que dice Glyph y dale Click a su derecha. te presentara una ventana
en la cual te permitir buscar y agregar una imagen al boton asi que dale click a
la opcin Load y ve al directorio images\buttons de Delphi, en este directorio
tendras una serie de grficos que Delphi te instala, bueno elige la imagen Group.
Una vez agregada la imagen ve a la propiedad Caption y Ponle Color.
Coloca un SpeedButton en el formulario, en la propiedad Caption ponle figura,
ve a la propiedad Glyph y ponle la imagen Form. Recuerda para ponerle la
imagen es igual que cuando se la pusiste al BitBtn. Bien ahora ya con la imagen
puesta ve a la propiedad Flat y ponla en True.
Ahora coloca un componente Image, su propiedad Align ponla en AlClient. con
esto la imagen ocupara todo el formulario. Ve a la propiedad Picture y dale click
a su derecha, de igual forma como en los botones agregamos una imagen haz lo
mismo solo que ahora ve al directorio Images\Backgrnd y elige la imagen
Writing.
Ahora te muestro como quedara la parte visual del formulario.

Ahora en el Evento Onclick del BitBtn se pondra:


procedure TForm1.BitBtn1Click(Sender: TObject);
var numero : Word;
begin
Randomize();
numero := Random(3);
if numero = 0 then
Shape1.Brush.Color := ClBlue;
if numero = 1 then
Shape1.Brush.Color := ClBlack;
Pgina 29

www.casadelphi.com

Pablo Bustos Fernndez.

if numero = 2 then
Shape1.Brush.Color := ClYellow;
if numero = 3 then
Shape1.Brush.Color := ClLime;
end;
Con este cdigo generamos un nmero aleatorio de entre cuatro nmeros
incluyendo el cero, y segn el resultado estamos cambiando de color al Shape.
Pon en el SpeedButton este codigo.
procedure TForm1.SpeedButton1Click(Sender: TObject);
var numero : Word;
begin
randomize();
numero := random(5);
if numero = 0 then
Shape1.Shape := StCircle;
if numero = 1 then
Shape1.Shape := StEllipse;
if numero = 2 then
Shape1.Shape := StRectangle;
if numero = 3 then
Shape1.Shape := StRoundRect;
if numero = 4 then
Shape1.Shape := StRoundSquare;
if numero = 5 then
Shape1.Shape := StSquare;
end;
Estamos generando aleatoriamente 6 posibles datos (0-5) mismos que
utilizamos como constantes para cada una de las formas del Shape. Bueno con
esto hemos concluido este pequesimo ejercicio. Por ahora estamos haciendo
cosas muy simples les prometo que posteriormente aremos algo mas
complicado mientras tanto pasaremos a la siguiente ficha.

Pgina 30

www.casadelphi.com

Pablo Bustos Fernndez.

Ficha Win32
Contiene componentes que permiten la creacin de aplicaciones que cumplen
con las especificaciones de Windows 95 o superior. A continuacin se muestra.

Imagen

Componente
TabControl
PageControl

ImageList

RichEdit

TrackBar

ProgresBar
Animate
DateTimePicker
MonthCalendar
StatusBar
ToolBar
CoolBar

Descripcin
Crea solapas para cuadros de dialogo
multipgina.
Crea una rea multipgina, en donde cada
pagina es accesible desde las mismas
solapas del componente.
Define una matriz de imgenes del mismo
tamao mismas que son accesibles a
travs de su ndice.
Es una caja de texto que acepta el formato
de texto enriquecido, por lo tanto a nivel de
palabra se le puede modificar el tamao,
color, etc.
Es una barra de desplazamiento de
Windows, que nos permite desplazar el
control por un conjunto de valores.
Es una barra de progreso estndar que nos
indica el avance de un determinado
proceso.
Muestra secuencias de BitMaps o Archivos
Avi sin sonido.
Despliega fechas y permite seleccionarlas,
tambin permite introducirlas.
Nos presenta el calendario por meses.
Es una barra de estado clsica de
Windows.
Permite crear una barra de Herramientas.
Es un contenedor de Barras de
herramientas mismas que pueden ser
configurables por el usuario

Bueno es tiempo de hacer un ejemplo de su uso as que realiza lo siguiente:


Crea una nueva aplicacin, al caption del form ponle Ficha Win32, coloca un
componente Image list en el form, dale doble Click al componente, te saldr una
ventana en la cual podrs agregar imgenes, dale al botn que dice Add, vete a

Pgina 31

www.casadelphi.com

Pablo Bustos Fernndez.

la carpeta Images/Buttons de Delphi, y agrega el archivo que dice DoorOpen,


despus que lo abres, regresas a la ventana anterior y te mandara un mensaje
en ingles que dice la dimensin de la imagen es demasiado grande y pregunta si
la divide en dos, dale que si, te pondr dos imgenes, hay un botn que dice
Delete, borra la segunda imagen con ese botn. Ok. Ahora as como agregaste
esta imagen quiero que agregues dos mas, bueno la imagen del botn te la dejo
a tu gusto Ok. el caso que te tienen que quedar tres imgenes enumeradas del 0
al 2. Despus de agregar las imgenes solo da click al botn de OK.
Coloca un componente ToolBar, en su propiedad Caption Ponle Herramientas,
Vete a la propiedad ImageList y selecciona el texto ImageList1 (Es el
componente de imgenes que creamos). Ahora dale Click al Componente con el
botn secundario del ratn y te saldr un men emergente, selecciona la opcin
New Button, con esto te crea un botn en en el componente ToolBar. Ok. Ahora
vete a la propiedad Hint del botn que acabas de crear y ponle Salir, ve a la
propiedad ShowHint y ponla en True. Ok. Despus ve a la propiedad
ImageIndex y ponle 0 (A este botn le pondremos la imagen que este en el
ndice 0). Ahora nuevamente con el botn secundario del ratn dale click al
ToolBar y ahora eliges la opcion NewSeparator, con esto te crea un botn
separador, a este botn no le haremos nada Ok. De igual forma como creaste el
primer botn crea dos mas y en su Hint pondrs Animacin, calendario, en la
propiedad ImageIndex pon 1 y 2 respectivamente. Con eso tendremos nuestra
barra de herramientas.
Ahora coloca un componente PageControl, Dale click al componente con el
botn secundario del ratn, en el men emergente selecciona New Page, con
esto te a creado una nueva pagina, ahora vete a la propiedad Caption y ponle
Animacin. Ahora si sobre esa nueva pagina pegaras un componente Animate,
vete a la propiedad CommonAvi y selecciona el valor aviCopyFile. Despus vete
a la ficha Standar y coloca dos Buttons debajo del componente Animate, a uno
le pones Animar y al Otro Detener. Con esto tendremos lista nuestra primer
pagina as es que selecciona el componente PageControl y con el botn
secundario del ratn dale nuevamente Click y elige la opcin de NewPage.
Ahora Vete a la propiedad Caption y ponle Calendarios. Coloca dentro de esta
pagina un componente MonthCalendary un componente DateTimePicker, a
estos componentes no les haremos nada.
Si todo va bien el diseo estara mas o menos as.

Pgina 32

www.casadelphi.com

Pablo Bustos Fernndez.

Muy bien ahora vamos a introducir el cdigo, empezaremos por los botones de
la barra de herramientas.
Dale Doble Click al primer botn que le pusimos Salir, con esto te genera
automticamente el evento Onclick, puedes hacerlo de la otra forma que tu ya
sabes no importa. Bueno pon este cdigo.
Application.Terminate;
Ahora en el Tercer botn que le pusimos Animacin pondrs este otro cdigo.
PageControl1.ActivePageIndex := 0;
Como puedes ver las paginas del PageControl tienen un ndice empezando de
cero as es que solo es cuestin de poner que pagina es la que quieres activar.
En el ultimo Botn (Calendarios) pondrs este cdigo.
PageControl1.ActivePageIndex := 1;
Muy bien ahora selecciona la pagina que dice Animacion del PageControl. en el
evento Onclick del Button Animar pondrs este cdigo.
Animate1.Active := True;
Por ultimo en el evento Onclick del botn Detener pon este cdigo.
Pgina 33

www.casadelphi.com

Pablo Bustos Fernndez.

Animate1.Stop;
Muy bien.... traigan la tequila compadres.. pos ya terminamos. ahora solo crrelo
con F9 y listo.

Ficha System
Contiene componentes que permiten acceder a algunos elementos importantes
del sistema, enseguida muestro la ficha.

Imagen

Componente

Descripcin
Es un temporizador que ejecuta un evento cada
Timer
intervalo de tiempo programado.
PaintBox
Define una rea en la que se puede dibujar.
Es un Panel de control del reproductor de vdeo
MediaPlayer
multimedia y de archivos de sonido.
Es un contenedor que define una rea de cliente
OLEContainer
OLE. Lo utilizaremos en el ejemplo para ver video.
Establece una conexin DDE como cliente a un
DDEClientConv
servidor DDE.
Especifica los datos que sern enviados a un
DDEClientItem
servidor DDE.
DDEServerConv Establece una conexin como servidor DDE.
Especifica los datos que sern enviados a un
DDEServerItem
cliente DDE.

Muy bien ahora como se supone que ya sabemos utilizar alguna variedad de
componentes pues lo que haremos es un reproductor de vdeo casi casi
profesional....... Bueno ustedes son los que retocaran algunos detalles.

Pgina 34

www.casadelphi.com

Pablo Bustos Fernndez.

Reproductor de Vdeo
Primeramente disearemos el aspecto visual despus nos iremos con el cdigo
Ok.
Crea una nueva Aplicacin. Al Caption del Form ponle Mi Reproductor de Vdeo.
Ve a la ficha System y coloca un componente OleContainer que abarque una
parte considerable del formulario.
Ve a la ficha Estndar y coloca un componente ScrollBar. Ponlo debajo del
componente OleContainer.
Ve a la ficha System y coloca un componente MediaPlayer, ahora vete a la
propiedad VisibleButtons, te desglosara todos los botones del Media Player,
Estarn en True por Defaul, quiero que dejes solamente los botones btPlay,
btPause, btStop en True los dems ponlos en False. Ahora ve a la Propiedad
Display, te desplegara una lista de componentes elige el componente
OleContainer1.
A un costado del componente mediaPlayer pon un componente BitBtn (Esta en
la ficha Additional), agrgale una imagen (ya sabes como) y en la propiedad
caption ponle Abrir.
Ve a la ficha estndar y pon un componente Label, en su caption ponle
Duracion, pon otro componente Label abajo de ese, y en su caption ponle T.
Transcurrido. Ok. ahora pon dos componentes Label nuevamente y su
propiedad Visible pnselas en False. el tercer Label tiene que quedar a un
costado del Label 1 y el cuarto del 2. De cualquier forma abajo presento el
diseo.
Ve a la ficha System y pon un componente Timer.
Mira compadre no explique todas las fichas que trae Delphi. Ok. pero con lo que
hemos visto hasta ahora ya sabes navegar entre las fichas y sus componentes
as es que vamos a utilizar un componente que esta en otra ficha diferente a las
vistas.
Vete a la ficha Dialogs, Pon el componente OpenDialog, es un componente no
visual y mediante la instruccion Execute nos mostrara la tpica ventana de Abrir
un Archivo.
Bien una vez puesto este componente vete a la propiedad Filter da doble Click a
su derecha y te saldr una venta dividida en dos partes la de la izquierda dice
Filter Name y la de la derecha dice Filter. Ahora en filter name Escribirs

Pgina 35

www.casadelphi.com

Pablo Bustos Fernndez.

Archivos Avi, en Filter escribiras *.Avi, nuevamente en una nueva fila escribe en
Filter Name Todos los Archivos y en Filter *.*. Esa ventana quedara de la
siguiente forma.

Muy bien Ahora ve a la ficha Win32 y coloca un componente StatusBar.


Automticamente se colocara en la parte inferior del formulario. Vete a la
propiedad SimplePanel y ponla en True, Despus ve a la Propiedad Simpletext y
ponle Inactivo, Tienes que ponerlo como yo te lo estoy Escribiendo ya que esa
etiqueta la utilizo para saber el estado del formulario y las maysculas o
minsculas son sensibles en las comparaciones.
Muy bien si has hecho todo lo que te dije el Formulario tiene que lucir mas o
menos As.

Pgina 36

www.casadelphi.com

Pablo Bustos Fernndez.

Ahora viene lo interesante el cdigo. Ojo el cdigo va completo con todo y los
procedimientos que Delphi me genera en cada evento. Esos procedimientos no
se copian por que Delphi te los crea. Ok. Ahora pon este cdigo en el BitBtn1 al
que le pusimos Abrir.
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
if Opendialog1.Execute = True then
begin
MediaPlayer1.FileName := OpenDialog1.FileName;
MediaPlayer1.Open;
Mediaplayer1.DisplayRect :=
rect(0,0,OleContainer1.Width,OleContainer1.Height);
MEdiaPlayer1.Play;
StatusBar1.SimpleText := 'Repoduciendo Archivo: ' +
OpenDialog1.FileName;
Label3.Visible := True;
Label4.Visible := True;
end;
end;
Observa que el OpenDialog1.Execute devuelve un valor True cuando el usuario
abre un archivo, la propiedad FileName contiene el nombre el archivo que abri.
El MediaPlayer mediante su propiedad FileName le indicamos el archivo que
reproducir, despus simplemente lo abrimos.
Si te fijas la propiedad DisplayRect permite indicar el tamao en que queremos
visualizar el Vdeo que por cierto es el tamao del componente OleContainer.
Despus ponemos visibles los Labels 3 y 4, en estos se muestra el tiempo total
del vdeo y en el otro se mostrara el tiempo en el que va la reproduccin.
Ahora pondrs este cdigo en el evento OnTimer del componente Timer.
Puedes irte al inspector de Objetos o simplemente dale Doble Click con el ratn
al componente.
procedure TForm1.Timer1Timer(Sender: TObject);
var posicion, duracion : LongInt;
begin
if StatusBar1.SimpleText <> 'Inactivo' then
begin
with MediaPlayer1 do
begin
MediaPlayer1.TimeFormat := tfMilliseconds;
duracion := Round(Length div 1000);
scrollBar1.Max := length;

Pgina 37

www.casadelphi.com

Pablo Bustos Fernndez.

Label3.Caption := Format('%d:%d',[duracion div 60, duracion Mod 60]);


posicion := round(Position div 1000);
Label4.Caption := Format('%d:%d',[posicion div 60, posicion Mod 60]);
ScrollBar1.Position := position; //minuto * 60 + segundo;
end;
end;
end;
El componente Timer va a estar ejecutando este cdigo cada segundo.
Primeramente verifica el StatusBar, si la propiedad simpletext es diferente a
Inactivo ejecutara el cdigo que le sigue, observa que utilizamos un With
MediaPlayer do con el cual nos permite acceder a todos las propiedades de ese
componente. Indicamos al MediaPlayer que el formato del tiempo ser en
Milisegundos, posteriormente calculamos la duracin del archivo, calculamos su
posicin y las pegamos en los Labels. Ha y desde luego vamos recorriendo el
ScroolBar.
Hasta ahora con el cdigo que hemos puesto, nuestra aplicacin es capaz de
reproducir vdeo y esta bien pero que tal si le damos un toque mas especialon
como que al presionar las teclas Alt + Enter, el vdeo se vea a pantalla completa
y de igual forma al volverlas a presionar regrese a pantalla normal. Bueno para
lograr eso pon este cdigo en el evento OnKeyDown del Formulario.
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (HiWord(GetKeyState(VK_MENU)) <> 0) and (Key = 13) then
begin
if Form1.WindowState = WsNormal then
begin
Ancho := Form1.Width;
Alto := Form1.Height;
Label1.Visible := False;
Label2.Visible := False;
Label3.Visible := False;
Label4.Visible := False;
MediaPlayer1.Visible := False;
BitBtn1.Visible := False;
StatusBar1.Visible := False;
ScrollBar1.Visible := False;
OleContainer1.Visible := False;
Form1.BorderStyle := BsNone;
Form1.WindowState := WsMaximized;
MediaPlayer1.Display := Form1;
MediaPlayer1.DisplayRect :=

Pgina 38

www.casadelphi.com

Pablo Bustos Fernndez.

rect(0,0,Form1.Clientwidth,Form1.ClientHeight);
end
else
begin
Form1.WindowState := WsNormal;
Form1.Width := Ancho;
Form1.Height := Alto;
Form1.Position := PoScreenCenter;
Label1.Visible := True;
Label2.Visible := True;
Label3.Visible := True;
Label4.Visible := True;
MediaPlayer1.Visible := True;
BitBtn1.Visible := True;
StatusBar1.Visible := True;
ScrollBar1.Visible := True;
OleContainer1.Visible := True;
Form1.BorderStyle := BsSingle;
MediaPlayer1.Display := OleContainer1;
MediaPlayer1.DisplayRect :=
rect(0,0,Form1.Clientwidth,Form1.ClientHeight);
end;
end;
end;
Como puedes ver es mas cdigo verdad, pues si pero es que para reproducir el
vdeo a pantalla completa tenemos que poner en False la propiedad Visible de
todos los componentes Visuales y de igual forma ponerla en True cuando
regrese a pantalla normal. Antes de seguir con el cdigo debes saber que he
declarado dos variables de tipo global para este formulario, las variables son
Ancho y Alto, las utilizo para almacenar el tamao del Form al momento de
maximizarlo a pantalla completa y de esta forma cuando el usuario regrese a
pantalla normal utilizo el valor de esas variables para volver el Form a su tamao
original.
Las variables Globales del Form las declaras en la clusula Var del Unit del
Form. esta justo arriba de la clusula Implementation. mira para que te ubiques
te muestro la parte en donde tienes que declararlas. Ok.
var
Form1: TForm1;
Ancho : Integer;
Alto : Integer;

//Aqui estan declaradas

implementation

Pgina 39

www.casadelphi.com

Pablo Bustos Fernndez.

{$R *.dfm}
Como ves estn casi al inicio del Unit. S puedes encontrarlo y declararlas
verdad. yo se que si.
Muy bien prosiguiendo con la explicacin, estoy utilizando una llamada a
GetKeySatate y Key para saber cuando se presionan las teclas Alt y
Enter(Checa su uso en la pagina de trucos). Ahora cuando se presionan estas
teclas resta saber en que estado se encuentra mi formulario, en caso de que
este normal lo maximizo en caso contrario lo pongo en estado normal, Ahora
esto se realiza checando la propiedad WindowsState.
Cuando maximizo la ventana en las variables globales Ancho y Alto guardo el
valor de las propiedades Width y Height del Form mismas que tienen las
dimensiones del formulario respectivamente. Despus Pongo la propiedad
Visible en False de todos los componentes visuales. Enseguida entenders por
que. Hay te va una nota acerca del MediaPlayer, no nada mas puedes
reproducir vdeo en un OleContainer si no en cualquier superficie plana, como un
Panel o el mismo Form, y es eso lo que hacemos, ponemos la propiedad
BorderStyle del form en BsNone y lo maximizamos, de esta forma el Form
abarca toda la pantalla incluyendo la barra de inicio de windows, bueno despues
unicamente resta indicarle al MediaPlayer que se va a reproducir en el form, y
eso lo hacemos mediante la propiedad Display. Ojo aparte de indicarle que se
reproducir en el form hay que indicarle las nuevas dimensiones del vdeo
mediante la propiedad DisplayRect. Esto es en si lo que sucede cuando se
maximiza.
rale pues..... cuando se minimiza pues simplemente pones visibles todos los
componentes visuales, volvemos a poner el BorderStyle del Form en BsSingle,
la propiedad WindowsState del form la ponemos en WsNormal, mediante las
variables Globales Ancho y Alto ponemos las dimensiones del Form, le
indicamos al mediaPlayer que se reproducir en el OleContainer y listo. Hay
otras cosillas pero es bsicamente esto.
Baya hasta que termine el ejemplo verdad compadres.... Bueno pero el manual
aun sigue le cuelga siempre muchita informacin todava.

Pgina 40

www.casadelphi.com

Pablo Bustos Fernndez.

Bases de Datos
Baya por fin hemos llegado a una parte que tal vez estabas esperando. Antes de
empezar quiero adelantarles que durante los captulos siguientes aremos
algunas bases de datos.
Delphi posee su propio motor de base de datos el BDE o Borland Databae
Engine el cual nos permite desarrollar nuestras aplicaciones independizndolas
del gestor de bases de datos. El BDE sirve como traductor entre nuestra
aplicacin y las bases de datos que utilizamos funcionando tambin como
interfaz entre los componentes especializados para bases de datos que posee
Delphi. El BDE cuenta con una biblioteca de funciones conocida como IDAPI
(Integrated Database Applications Program Interface) que es el traductor ante
los distintos gestores de bases de datos para que entiendan lo que nuestra
aplicacin realiza.
Delphi posee una herramienta que nos permite disear nuestras bases de datos,
es un programa llamado Database DeskTop.
Primeramente mostrare las fichas de componentes mas comunes relacionados
con el manejo de bases de datos.

Ficha Data Access


Contiene componentes para realizar conexiones con las bases de datos y
obtener la informacin que en ella se almacena. A continuacin se muestra.

Ficha Data Acces


Imagen

Componente

Descripcin

Realiza las conexiones a las bases


de datos.
Permite el acceso a datos tanto en
una aplicacin estndar como el
ClientDataSet
acceso desde clientes en sistemas
distribuidos.
DataSource

Pgina 41

www.casadelphi.com

Pablo Bustos Fernndez.

Ficha Data Controls


En esta ficha se encuentran componentes similares a los de la ficha standard y
Additional pero que estarn ligados a bases de datos permitiendo con esto
trabajar con la informacin almacenada en ellas.

Imagen

Componente

Descripcin

Presenta los datos en una rejilla


de filas y columnas.
Posibilita la navegacin por los
registros de una tabla
DbNavigator
permitiendo su navegacin,
modificacin, eliminacin.
Label vinculado a bases de
DbText
datos.
Cuadro de texto vinculado a
DbEdit
bases de datos.
Memo vinculado a bases de
DbMemo
datos.
Image vinculado a bases de
DbImage
datos.
ListBox Vinculado a bases de
DbListBox
datos.
ComboBox vinculado a bases
DbComboBox
de datos.
CheckBox vinculado a bases de
DbCheckBox
datos.
RadioGroup vinculado a bases
DbRadioGroup
de datos.
ListBox que presenta datos de
DbLookupListBox
una tabla y modifica los de otra.
ComboBox que presenta datos
DbLookupComboBoxde una tabla y modifica los de
otra.
RichEdit vinculado a bases de
DbRichEdit
datos.
DbGrid

Pgina 42

www.casadelphi.com

Pablo Bustos Fernndez.


Permite personalizar un area de
presentacin de datos y permite
que el rea acte como un
Dbgrid.
Chart vinculado a bases de
datos.

DbCtrlGrid

DbChart

Ficha BDE
Esta ficha contiene componentes que habilitan la conexin a bases de datos
utilizando el BDE engine de Delphi.

Imagen

Componente

Descripcin

Permite la conexin a una tabla de


una base de datos.
Permite crear y ejecutar consultas
Query
SQL a una base de datos.
Permite
ejecutar
procedimientos
almacenados en un servidor de bases
StoredProc
de datos.
Realiza conexiones a servidores
DataBase
remotos.
Gestiona y controla las conexiones
Session
activas a las bases de datos.
Permite realizar acciones sobre los
datos localmente que luego sern
BatchMove
enviados al servidor.
Permite realizar actualizaciones en
UpdateSQL
una base de datos SQL.
Encapsula una tabla que esta
NestedTable
anidada dentro del campo de otra
tabla.
Permite el acceso a datos por parte
BDEClientDataSetde aplicaciones cliente, etc. a travs
del BDE.
Table

Pgina 43

www.casadelphi.com

Pablo Bustos Fernndez.

Database DeskTop
Delphi nos permite crear bases de datos en tiempo de ejecucin mediante
cdigo, pero tambin nos brinda la posibilidad de crearlas en tiempo de diseo
mediante el Database Desktop. Esta herramientas nos permite en realidad hacer
otras cosillas, pero no quiero adentrarme mucho en, solo quiero ensearles lo
bsico para continuar con este manual o curso.
Database DeskTop me permite crear tablas de diferente tipo como tablas
Paradox, Dbase, MsAcces, Foxpro, Informix, etc. en este caso nos enfocaremos
a crear tablas de tipo Paradox aunque en su momento are una aclaracin
cuando es necesario utilizar algn otro tipo de tabla. OK.
Muy bien para entrar al DataBase DeskTop lo podemos hacer de dos formas, la
primera es accesando desde el men inicio/programas/Delphi/Database
DeskTop. La otra es Dentro de Delphi te vas al Men Tools y encontraras la
opcin Database Desktop. Muy al accesar al el te aparecer de la siguiente
forma.

Pgina 44

www.casadelphi.com

Pablo Bustos Fernndez.

Muy bien, antes de seguir quiero explicar que en Delphi se manejan mucho los
alias, los cuales son un identificador para un directorio o carpeta en los cuales
se tienen guardadas las bases de datos. Estos alias son muy tiles ya que
usualmente tienes que indicar la ruta en dnde est tu tabla como por ejemplo
c:\programa\Tablas, ahora el detalle est que cuando pasas tu aplicacin a otra
unidad debes cambiar la ruta a cada tabla y recompilar. todo eso se soluciona
pues utilizando alias, de hecho en los programas instaladores como el Install
Shield te permite crear el alias que en tu aplicacin ayas puesto, es til de
verdad. Solo que para estos ejercicios lo are de la forma tradicional solo queria
informarles que existe esa posibilidad, por cierto en el alias DbDemos Delphi
guarda algunas tablas de ejemplo por si despus quieres hecharles un ojillo
primo.
Muy bien vete al men que dice File, despus al New y por ultimo Table, de
esta forma creamos nosotros una tabla, pero antes nos presenta una pequea
ventana en la cual nos pide que elijamos que tipo de dato crearemos, si va hacer
paradox, foxpro, etc. te presento esa venta.

Elige Paradox 7, de hecho esta activada por defaul. despus de eso te saldr la
siguiente ventana:

Pgina 45

www.casadelphi.com

Pablo Bustos Fernndez.

En esta ventana es en donde crearemos la estructura de nuestra base de datos


el campo Field Name contendr los nombres de los campos de nuestra base de
datos que en este ejemplo sern: Clave, producto, proveedor, precio y mnimo.
Despus est otra leyenda que dice Type, contendr el tipo de dato que ser
nuestro campo, para seleccionar el tipo de dato basta con situarnos en Type y
presionar la barra espaciadora y nos desplegara todos los tipos de datos, de
cualquier forma si sabemos su tecla abreviada se la podemos escribir
directamente.
Est la leyenda que dice Size la cual indica el tamao del campo, eso se lo
indicamos teclendolos directamente.
Por ultimo est la leyenda Key, sirve para indicar cuales campos sern nuestras
claves primarias. para elegir un campo como clave primaria posicionate en Key y
presiona la barra espaciadora, se pondr un asterisco en seal de que es clave
primaria.
Ahora quiero que hagas la siguiente estructura:
Field Name
Clave
Producto
Cantidad

Type
I (Long Integer)
A (Alpha)
N (Numeric)

Size

Key
* (Clave Primaria)

40

Pgina 46

www.casadelphi.com
Precio
Minimo

Pablo Bustos Fernndez.


$ (Money)
I (Integer)

Muy bien ya que tecleaste esta estructura quiero que te ubiques en la parte
izquierda de tu ventana, encontraras una leyenda que dice Table Properties y
debajo de ella un especie de Combobox. Ese combobox contiene las
propiedades de la tabla que tu puedes configurar. No entrare en mas detalles,
solo te digo que experimentes un poco con ellas.
No vamos a crear algn ndice secundario en esta tabla por que usaremos
algunas sentencias Sql en bsquedas por producto con propsito de
aprendizaje, por lo tanto no es necesario crearlo.
Muy bien ahora solo quiero que des Click en el botn que dice Save As, y
guardes la tabla en el directorio c:\Ejemplo con el nombre de Inventario. Para
crear el directorio vete al explorador Mi PC y simplemente vete a la unidad C y
crala.
De igual forma como creaste esta tabla quiero que hagas las siguientes tablas y
las guardes en el mismo directorio OK.
Tabla Ventas (que sea paradox 7).
Field Names
Fecha
Ingreso

Type
D
$

Size

Key
*

Size

Key

Guardala con el nombre de ventas OK.


Tabla Auxiliar (que sea paradox 7).
Field Names
Clave
Cantidad
Producto
Precio
Subtotal

Type
I
N
A
$
$

40

Guardala con el nombre de Auxiliar OK.


El ejercicio que realizaremos se trata de un sistema que controla un inventario
de productos, ventas de productos y generacin de reportes de las utilidades, en
este momento hemos creado las bases de datos, pero falta explicar muchas
cosas que son necesarias por lo tanto conforme se expliquen se le ira
avanzando al sistema Ok.

Pgina 47

www.casadelphi.com

Pablo Bustos Fernndez.

Componente TTable
Es un componente no visual y se encuentra en la ficha BDE.
Cuando se trabaja con una base de datos, el principal responsable de
prcticamente todo es el componente Table. Este componente es el encargado
de leer, escribir, actualizar, etc la base de datos a la cual esta conectado, y
forma una pareja muy til con el componente Datasource, el cual es el
encargado de conectar el componente table con los controles usados para
visualizar los datos.
La primera propiedad que se debe modificar en el componente es la que hace
referencia a que base de datos queremos conectar el componente y se trata de
la propiedad DatabaseName. Existen dos formas de indicarle la base de datos
que usaremos, una es dndole toda la ruta que en nuestro caso seria
C:\EJEMPLO o indicando el alias que se haya definido en el sistema que es lo
mas recomendable utilizar los alias pero bueno esa es otra historia digiera
chonita.
Bueno despus de esto es necesario indicarle la tabla que se va a utilizar y esto
se hace en la propiedad TableName, esta propiedad me listara todas las tablas
existentes en la ruta o alias que pusimos en el DatabaseName, posteriormente
la propiedad Active se tendr que poner en True para poder manipular la tabla.
Existen otras propiedades interesantes como IndexFieldNames que es para
indicarle el ndice que usaremos en la tabla. Desde luego mostrara las claves
primarias que se hayan puesto cuando se diseo la B.D. Existe otra propiedad
para los ndices secundarios que funciona exactamente igual y es la propiedad
IndexName.
El componente Table tiene una larga lista de eventos, que se pueden dividir en
tres grupos, los eventos que se producen antes de un operacin como una
apertura, cierre, lectura, etc., los cuales empiezan por la palabra Before, luego
estn los eventos que se producen en el momento y cuyo nombre empieza por
On y por ultimo los eventos que se producen despus, cuyo nombre empieza
por After . A continuacin te listo los principales eventos del componente Table.
AfterDelete
AfterEdit
AfterInsert
After Post
BeforeCancel
BeforeClose
BeforeDelete
BeforeEdit

Se genera despus del borrado de un registro


Se genera despus de editar un registro
Despus de Insertar
Despus de grabar los datos
Antes de cancelar la operacin
Antes de que se cierre la tabla
Antes de borrar un registro
Antes de editar el registro actual
Pgina 48

www.casadelphi.com

Pablo Bustos Fernndez.

BeforeInsert
BeforeOpen
BeforePost

Antes de insertar un registro


Antes de abrir la tabla
Antes de guardar los datos
Se genera cuando se va a calcular el valor de
OnCalcFields
un campo
Cuando se produce un error al borrar un
OnDeleteError
registro
OnEditError
Cuando hay un error al editar un registro
OnFilterRecord Cuando se activa el filtrado
OnNewRecord Cuando se aade un registro
Cuando hay un error durante el grabado de
OnPostError
datos
Ahora te listare las operaciones mas comunes que se realizan en un
componente Ttable.
Open
Close
Edit
Insert
Post
Cancel
Delete
First
Last
Next
Prior

Se abre la tabla
Se cierra la tabla
Para editar el campo actual
Aade datos a la tabla
Graba los datos
Cancela la operacin actual
Borra el registro actual de la tabla
Se va al primer registro de la tabla.
Se va al ultimo registro de la tabla.
Avanza al siguiente registro.
Retrocede un registro.

Cuando se manejan bases de datos es comn que necesitemos acceder a los


sus campos mediante cdigo y precisamente un mtodo de acerlo es utilizando
FieldByName.

Accesos fisicos a la tabla utilizando FieldByName . . .


FieldByName permite el acceso al objeto Tfield asociado a un determinado
campo a partir del nombre del campo en la tabla su sintaxis es de la siguiente
forma:
Function FieldByName(Const NombreCampo: String): TField;
No te espantes es fcil utilizarlo por ejemplo en nuestra base de datos Inventario
que acabamos de crear si queremos acceder al campo Producto y asignarle un
nombre seria de la siguiente forma:

Pgina 49

www.casadelphi.com

Pablo Bustos Fernndez.

Table1.FieldByName('Producto').AsString := 'Sabritas';
Como ves primeramente va el nombre del componente Table que estar ligada a
nuestra base de datos fsica, posteriormente escribimos FieldByName en el cual
dentro de parntesis y entre comillas simples indicaremos el nombre del campo
al cual aremos referencia, por ultimo bastara con indicarle el tipo de dato que es
el campo al cual hacemos referencia, que por cierto eso lo indicamos con el .As.
En caso de que quieras leer el valor de un campo y asignarlo a una variable
pues simplemente cambia la posicin de la lnea de cdigo anteriormente escrita
solo recuerda que los tipos de datos sean iguales.

Inicio y fin de la Tabla . . .


Cuando en un desplazamiento sobre la tabla se llega a su inicio o a su final se
modifican las propiedades Bof y Eof. La propiedad Bof toma el valor True
cuando se esta en el primer registro de la tabla y la propiedad Eof toma el valor
True cuando se esta en el ultimo registro de la tabla o cuando la tabla esta
vaca. Por ejemplo para saber si se ha llegado al final de la tabla seria:
If Table1.Eof = True then
ShowMessage('SE ESTA EN EL FINAL DE LA TABLA');

Ordenacin de Registros . . .
Una vez que se ha definido un DataSet los registros que contiene se encuentran
ordenados por su ndice activo y este ndice queda determinado por el valor de
la propiedad IndexName del componente TTable si no se especifica u ndice
secundario se tomara el ndice primario. Otra forma de ordenar la tabla es
utilizando la propiedad IndexFieldNames en la cual se pondr el ndice primario
por el cual se quiere ordenar. Los ndices previamente se tuvieron que haber
declarado en la tabla. En tiempo de ejecucin tambin se puede cambiar el
ndice de ordenacin, por ejemplo el cdigo para ordenar la tabla Inventario a
travs de su Clave primaria seria as.
Table1.IndexFieldNames := 'Clave';
Como puedes ver simplemente se le asigna el nombre del ndice a la propiedad
IndexFieldNames. Es de igual forma para la propiedad IndexName.

Bsquedas de Registros . . .
El componente Table proporciona una serie de herramientas para realizar
bsquedas de registros con la limitacin de que solo se realizaran con campos

Pgina 50

www.casadelphi.com

Pablo Bustos Fernndez.

indexados, yo utilizare el mtodo mas comn y menos problemtico que es el


mtodo directo.
Mediante el mtodo FindKey se busca en la tabla para encontrar un registro en
el que sus campos ndices coincidan con los que se han pasado como
argumentos en un array de valores separados por comas, regresa un valor Falso
O Verdadero dependiendo si tuvo xito o no en la bsqueda. Por ejemplo en la
tabla Inventarios para buscar un producto se escribira el siguiente cdigo.
If Table1.FindKey([Edit1.Text]) = True Then
ShowMessage('Producto Localizado')
Else
ShowMessage('Producto no encontrado');
Como puedes ver simplemente va el nombre del componente Table que
previamente nosotros lo ligaremos a la B.D., posteriormente va FindKey en el
cual entre parntesis y corchetes ponemos la variable o el dato a buscar que en
este caso estoy suponiendo que en un Edit el usuario escribi el producto que
desea buscar. Ahora como el mtodo devuelve un valor True cuando se tiene
xito pues solo lo comparo con un if igualado a True.
Ahora si deseas que el sistema en caso de que no encuentre el registro se
posicione en el registro mas cercano al buscado se pondra la siguiente
Instruccin.
If Table1.FindKey([Edit1.Text]) = True Then
ShowMessage('Producto Localizado')
Else
Table1.FindNearest([Edit1.Text]);
Como puedes ver esto lo hice utilizando la instruccin FindNearest.
Aunque Ami en lo particular me gusta utilizar este mtodo y cuando necesito
realizar una bsqueda por un campo que no es ndice utilizo el SQL pues... no le
aunque les explicare el otro mtodo existente para busquedas.
El otro mtodo de bsquedas es Locate, el cual nos permite buscar por una
condicin en un columna o por varias columnas. Locate es una funcin que
devuelve True o False segn ha tenido xito o no, y si su busqueda fue exitosa

Pgina 51

www.casadelphi.com

Pablo Bustos Fernndez.

la tabla muestra la fila que cumpli la condicin. Para usar este mtodo se han
de pasar una serie de parmetros y a continuacin te muestro su sintaxis:
Locate(const KeyFields : string; const KeyValues : Variant; Options :
TLocateOptions)
El primer parmetro es el campo o campos por los cuales queremos hacer la
bsqueda, por ejemplo en nuestra tabla Inventario hay un campo en el cual
guardamos el nombre de los productos y siqueremos realizar una bsqueda por
este campo es en este primer parmetro donde debemos poner el nombre del
campo.
El segundo contiene la condicin, por ejemplo si estamos buscando productos
segn su proveedor es aqu en donde lo pondramos. El ejemplo quedara as:
Table1.Locate ('Producto','CocaCola',[]);
Por ltimo esta Options, el cual indica como se ha de realizar la bsqueda, si se
ignoran las maysculas, si se hacen bsquedas parciales en los campos
Alfanumricos, etc, esto quiere decir que se mostraran las filas que contengan
CocaCola en sus respectivos campos adems que otros datos, o sea que la
busqueda no es exacta. Por ejemplo:
Table1.Locate ('Producto','CocaCola',[ loCaseInsensitive]);
Recuerda que te dije que el componente Table va ntimamente relacionado con
el DataSource, pos es cierto as es que te te explicare su funcionamiento.

DataSource
El componente table pertenece a un grupo de componentes que son derivan del
componente TDataset, estos componentes acceden por diferentes caminos a los
datos, por lo que la interfaz obtenida difiere segn el componente empleado.
Para que los diferentes controles que muestran los datos sean capaces de
acceder a esta variedad de interfaces pues se utiliza el DataSource el cual es un
componente intermedio el cual tiene la tarea de mostrar una interfaz comn a
todos los controles.
La propiedad mas importante del DataSource es DataSet en la cual se pondr la
tabla que queremos ligar a el.

Pgina 52

www.casadelphi.com

Pablo Bustos Fernndez.

Controles Data-Aware
Son los que se encuentran en la ficha DataAcces y Excepto por el componente
DbNavigator el resto de los componentes son utilizados para presentar los datos
de las tablas. Uno de los componentes mas comunes sin duda es el Dbgrid el
cual esta constituido por un conjunto de rejillas a travs de las cuales nos
presenta la informacin de las tablas. A continuacin te lo explicare.

Componente DBGrid . . .
Nos sirve para visualizar informacin almacenada en una tabla, pero aparte de
eso podemos tambin realizar inserciones, ediciones, modificaciones, etc. y
cuenta con varias propiedades y mtodos que nos ofrecen una amplia gama de
configuraciones tanto para el aspecto como para el funcionamiento del control.
La propiedad principal es DataSource, es aqu en donde indicamos el
datasource al cual queremos vincularlo. En caso de que el DataSource se
encuentre en otro formulario pues simplemente se le escribe el nombre del
formulario en el que se encuentra y su dataSource, por ejemplo supongamos
que tengo 2 formularios en el primero tengo mi tabla y mi DataSource1 y en el
segundo formulario tengo un DbGrid1 pues simplemente para ligarlo en su
propiedad DataSource pondra Form1.DataSource1 y presto es todo. Despus
existen otras propiedades interesantes como Options que a continuacin
describo.
El usuario puede editar los datos sobre la
rejilla
La rejilla esta en modo edicin, no hace
dgAlwaysShowEditor
falta pulsar F2
dgTitles
Muestra los ttulos de las columnas
Se muestra un indicador para conocer el
dgIndicator
registro activo
Permite cambiar el ancho de las
dgColumnResize
columnas
Dibuja lneas de separacin entre las
dgColLins
columnas
Dibuja lneas de separacin entre las
dgRowLines
filas
Se puede navegar por el componente
dgTabs
usado la tecla Tab
Selecciona filas completas en lugar de
dgRowSelect
filas
dgConfirmDelete
Permite borrar registros, mostrando un

dsEditing

Pgina 53

www.casadelphi.com

dgCancelOnExit
dgMultiSelect

Pablo Bustos Fernndez.


mensaje
Cancelas las inserciones vacas al salir
del control
Permite seleccionar mltiples filas a la
vez

Hasta ahora esta bien con el DBGrid pero su verdadera potencialidad se


encuentra en la propiedad Columns, que encapsula tanto el aspecto de las
columnas como los campos de las tablas o consultas SQL que estn ligadas al
la columna. Cuando no se definen columnas en un DBGrid automticamente el
control creara una columna para cada campo de nuestra base de datos.
Para accesar al editor de columnas basta con dar doble click sobre el
componente o dar un click con el botn secundario y elegir la opcin Columns
Editor del men emergente, saldr la siguiente ventana.
Para
este
pequeo
ejemplo es necesario que
hagas lo siguiente:
1. Pon un componente
Table, en su propiedad
DataBasename
elige
DBDemos,
en
su
propiedad
TableName
elige la tabla Animals,
pon la propiedad Active
en True.
2. Coloca un componente
DataSource y en su
propiedad DataSet pon
Table1.
3. Coloca un componente DbGrid y en su propiedad DataSource pon
DataSource1.

Ahora viene algo importante, hasta ahora nos mostrara todos los campos de la
tabla en nuestro DBGrid por lo tanto quiero que des doble Click sobre el DBGrid
y aparecer el editor de columnas, pero sorpresa verdad esta vaco y eso es por
que no se han definido y para definirlos basta con dar un click en el tercer icono
que dice Add All Fields y nos agregara una columna para cada campo de
nuestra base de datos empezando por un ndice cero, bien ahora ya tengo todos
los campos de mi base de datos por lo tanto si quiero borrar algunos bastara con

Pgina 54

www.casadelphi.com

Pablo Bustos Fernndez.

seleccionarlos y dar un click en el segundo icono que dice Delete Selected (Del),
cabe mencionar que no solo puedo borrar algunos campos que no quiera si no
que tambin puedo cambiar el orden de las columnas arrastrando con el puntero
del ratn a la posicin que deseo un campo en particular.
Cuando estoy en el editor de columnas y selecciono una de ellas cambiaran las
propiedades en el inspector de objetos brindndonos con esto ciertas opciones
que podremos modificar, a continuacin te las describo.
Alignment
Button style
Color
DropDown
Rows
FieldName
Font
PickList
ReadOnly
Width
Title

Alineacin de la columna
Permite desplegar un lista con valores, o un
botn
Color de fondo de la columna
Nmero de filas desplegables
Nombre del campo que se visualiza
Fuente con la que se muestra la informacin
de la columna
Lista de valores que aparecern al desplegar
la columna
Esta columna solo es de lectura
Ancho de la columna en Pixels
Ttulo de la columna

Ahora la opcin Title tiene ciertas propiedades que son interesantes es por eso
pariente que las describo.
Alignment Alineacin de la cabecera de columna
Caption Texto que muestra la cabecera de la columna
Color
Color fondo de la cabecera
Font
Fuente con la que mostrara la cabecera
La propiedad PickList es una propiedad que apunta a una lista de String y el
efecto que produce es que en la columna donde se ponga se muestra un men
desplegable que se activara con el ratn y contendr todo lo que hayamos
puesto en la propiedad PickList, solo ten cuidado ya que la propiedad
ButtonStyle debe ser cbsAuto.
Se puede manipular informacin y realizar operaciones con los campos del
DBGrid
los
mtodos
mas
comunes
son
el
DbGrid1.Columns[nmero_columna].Propiedad
y
DbGrid1.Fields[nmero_columna].propiedad. Todo depender de que tipo de
operacin deseo realizar.

Pgina 55

www.casadelphi.com

Pablo Bustos Fernndez.

DBNAvigator . . .
Este control tiene incorporada las funcionalidades mas comunes que se realizan
sobre una base de datos ya que con el podemos navegar entre los registros,
eliminar un registro, ponerlo en modo de edicin, insertar registros, etc. su
propiedad mas importante es la DataSource en la cual se tiene que indicar el
DataSource sobre el cual trabajara. Describo los botones del navegador.
Botn

Mtodo

nbFirst

First

nbPrior

Prior

nbNext

Next

nbLast

Last

nbInsert

Insert

nbDelete

Delete

nbEdit

Edit

nbPost

Post

nbCancel

Cancel

nbRefresh

Refresh

Descripcin
Salta al primer registro de
la tabla. Desactiva los
botones First y prior y
activa Next y Last si no lo
estaban.
Retrocede al registro
anterior del actual, activa
Next y Last.
Avanza
al
registro
posterior al actual, activa
First y Prior.
Salta al ultimo registro de
la tabla, desabilita Next y
Last y activa First y Prior.
Inserta un nuevo registro
en la posicion anterior al
registro actual, modifica el
estado de la tabla a modo
de Edicion.
Borra el registro actual y
se posiciona en el registro
siguiente
Pone la tabla en modo de
edicin, con lo cual se
pueden modificar los
datos del registro.
Escribe en la base de
datos
los
cambios
realizados
sobre
el
registro activo.
Cancela la edicin del
registro activo y recupero
los datos anteriores.
Refresca la tabla o la
actualiza.

Pgina 56

www.casadelphi.com

Pablo Bustos Fernndez.

Una propiedad interesante es la propiedad VisibleButtons que contiene todos los


botones que nos presenta el DBNavigator, basta con poner en false los que no
queramos que se muestren.
La propiedad Hints permite colocar una leyenda para cada botn, si desactivaste
algn botn su leyenda solo djala en blanco. sale primo.
La propiedad ConfirmDelete recibe un valor Booleano y esta en True por defaul
y lo que realiza es mandarnos un mensaje de advertencia cuando se trata de
borrar un registro.
Ahora a nuestro formulario por favor colcale un DbNavigator y listo podrs
recorrer los campos de la tabla Animals que pusimos anteriormente, solo
recuerda poner en la Propiedad DataSource del DBNavigator DataSource1.

DBEdit, DBText (Ficha DataAcces). . .


El componente DBEdit esta diseado tanto para presentar datos como para
introducir datos en una tabla y su propiedad mas importante es DataSource, la
cual har referencia a la tabla con la que se trabajara.
La propiedad DataField Indica el campo de la base de datos con el cual se
trabajara. Esta propiedad mostrara todos los campos de la tabla solo tienes que
elegir cual quieres.
Otra propiedad interesante podra ser ReadOnly la cual recibe un valor Boolano
y sirve para poner el campo en solo lectura desabilitando de esta forma que se
capture informacin sobre el. Las dems propiedades son iguales a las del Edit.
El componente DBText esta diseado solo para presentar informacin. Tiene el
aspecto de un Label solo que a diferencia de este ultimo, mostrara la
informacin contenida en un registro de la base de datos, no se puede introducir
informacin en un DBText.
Sus propiedades mas interesantes son el DataSource y DataField, las cuales
funcionan igual que las del DBEdit.
NOTA: Todos estos componentes funcionan a travs de las propiedades
DataSource y DataField, solo es cuestin que indagues sobre ellos un poco y
tu mismo descubrirs su funcionalidad.

Pgina 57

www.casadelphi.com

Pablo Bustos Fernndez.

BUSQUEDAS SQL. . .
Para poder ejecutar una consulta SQL es necesario aadir un componente
TQuery. Con el componente TQuery podemos acceder a varias tablas a la vez o
filtrar dinmicamente cualquier tipo de registros.
La ejecucin de una consulta SQL entrega como resultado una nueva tabla, las
caractersticas de esta tabla son en principio independientes de la base de
datos. A continuacin te listo algunas sentencias SQL.
Propiedades de TQuery.
Propiedad
DataBaseName
SQL
Active
Params
RequestLive

Descripcin
Nombre de la base de datos a la que se accede.
Array de string que contiene la consulta que dar
lugar a la nueva tabla.
Provoca la presentacin inmediata de los datos
ejecutando la consulta.
Array que incluye los parmetros de una consulta.
Permite modificar los registros que fueron resultado
de una consulta.

Metodos de TQuery.
Mtodo
ExecSQL
Open
Close
First
Last

Descripcin
Ejecuta la sentencia SQL sea o no de seleccin de
registros.
Ejecuta una consulta SQL de seleccin de
registros.
Cierra el componente.

Navegacin por los registros de la tabla.

Next
Prior
MoveBy
Append
Insert
Mtodos para Insertar Registros.
AppendRecord
InsertRecord
Pgina 58

www.casadelphi.com
Delete
Edit

Pablo Bustos Fernndez.


Borrar el registro actual.
Permite modificar el registro actual.

La mayora de las operaciones son similares a las que se realizan en un


componente TTable. Las consultas que se definen en la propiedad SQL. se
ejecutaran en tiempo de ejecucin mediante los mtodos Open y ExecSQL, en
donde Open se utiliza en consultas que devuelven una nueva tabla (Sentencias
Select) y ExecSql en aquellas que no devuelven ningn registro como una
eliminacin o insercin.
Un componente TQuery difiere de un componente TTable en que puede acceder
directamente a mas de una tabla y sobre todo que permite seleccionar que
registros y que columnas se desean presentar. haremos un ejemplo para que
quede mas claro el asunto.
Crea una nueva aplicacin Delphi. Sobre el formulario pon un componente
TQuery que esta en la ficha BDE.
En su propiedad DataBaseName pon C:\EJEMPLO que es el directorio en el
cual guardamos la tabla inventario.
Coloca un componente DataSource, en su propiedad DataSet pon Query1.
Coloca un componente Label, en su propiedad Caption pon Producto.
Coloca en frente del Label un componente Edit.
Coloca un componente DbGrid, en su propiedad DataSource pon DataSource1.
Coloca un componente BitBtn.
Ahora el diseo quedara mas o menos as.

Pgina 59

www.casadelphi.com

Pablo Bustos Fernndez.

Muy bien ahora viene lo interesante tienes que recordar que en la propiedad
SQL del Query es donde
introduciremos el cdigo SQL
para realizar la bsqueda,
ahora debemos tomar en
cuenta que es un array y que
nosotros estamos manejando
una variable que es el nombre
del producto a buscar mismo
que se guarda en el Edit1. Por
lo tanto para generar la
consulta es necesario realizar
una serie de concatenaciones
que para no hacrtela pesada
pariente de muestro el codigo
que pondras en el evento
Onclick del BitBtn.

procedure TForm1.BitBtn1Click(Sender: TObject);


var consulta : String;
begin
consulta := 'SELECT PRODUCTO, PRECIO FROM INVENTARIO.DB WHERE
PRODUCTO LIKE ''';
consulta := consulta + '%';
consulta := consulta + EDIT1.Text;
consulta := consulta + '%';
consulta:=consulta + '''';
consulta:=consulta + ' ORDER BY PRODUCTO';
QUERY1.SQL.Clear;
QUERY1.SQL.ADD(consulta);
QUERY1.Active := TRUE;
QUERY1.Open;
end;
Para generar la consulta estoy utilizando la instruccin SELECT la cual tiene la
siguiente sintaxis:
SELECT Col1 [, Col2]
FROM

Tabla

[WHERE

Predicado]

[ORDER BY

Columna]

Pgina 60

www.casadelphi.com

Pablo Bustos Fernndez.

En donde Col1 y Col2 son los nombres de las columnas de las tablas, en caso
de que se quieran mostrar todas las columnas utiliza el asterisco ( * ).
El predicado es una condicin. La columna especificada en la clusula ORDER
BY tiene que ser una de las columnas seleccionadas en la sentencia SELECT.
Yo en el ejemplo utilizo SELECT PRODUCTO, PRECIO FROM
INVENTARIO.DB WHERE PRODUCTO LIKE '''; muy bien explicare por pasos
hasta where no creo que haya problemas por que despus del SELECT van las
columnas que mostrare en mi DBGrid despues mediante el form indico la tabla a
la cual accedere y mediante el WHERE condiciono la bsqueda, solo que les
explicare que chingaos es lo que me realiza LIKE.
LIKE lo que me permite es realizar bsquedas parciales o de semejanza, es
decir supongamos que yo no se el nombre completo de un producto, entonces
que hago bueno pues introduzco hasta donde se del nombre del producto y el
sistema buscara registro por registro donde haya semejanza con la cadena
introducida. Es como cuando buscamos archivos o carpetas en windows si
ponemos imgenes me mostrara todas las carpetas o archivos que se llamen
imgenes o que en alguna parte de su nombre diga imgenes. Creo que con
esto quedo explicado LIKE.
Ahora bien para utilizar el LIKE es necesario echar mano de un comodn que es
el % el cual deber ir entre comillas simples. Por lo tanto entonces LIKE debera
estar por ejemplo LIKE '%COCA%'. Es por eso que al inicio y al final del
SELECT le pongo un % y entre los % coloco el contenido del Edit1.
Ahora comprendes por que utilizo una variable y realizo varias concatenaciones.
Bueno parientes despus de que pongo toda la consulta que quiero realizar en
la variable consulta simplemente se la agrego a la propiedad SQL del Query
mediante QUERY1.SQL.ADD(consulta) y posteriormente Activo la consulta con
QUERY1.Active := TRUE Y QUERY1.Open para ejecutar la consulta.
Las consultas SQL tienen mucha mas potencialidad que lo que aqu te estoy
explicando te recomiendo que bajes algun manual sobre SQL y lo estudies de
cualquier forma el Query soporta la mayora de las instrucciones SQL utilizadas.
Pariente solo te queda correr el programa y experimentar con el. Solo agrgale
algunos productos a la base de datos por que seguramente estar en blanco.
Puedes utilizar el DBGrid y DBNavigator que por cierto ya te los explique verdad.
Vamos amigo no te desanimes que todava faltan los reportes y claro el ejercicio
final con nuestras bases de datos.

Pgina 61

www.casadelphi.com

Pablo Bustos Fernndez.

Reportes con QuickReport


Una cosa es utilizar el objeto Tprinter para mandar a impresin los archivos,
grficos, etc., y otra muy distinta utilizar el QuikReport para la impresin de
informacin contenida en bases de datos.
Delphi dedica una ficha exclusiva para el manejo de impresiones, la cual es
Qreport de entre los cuales el componente mas importante es precisamente el
QuickReport. Esta ficha contiene a su vez un conjunto de componentes que se
direccionan directamente a los campos de las bases de datos permitiendo con
esto que la generacin de informes sea verdaderamente sencilla. Bueno para
que veas que no soy gacho te explico algunos componentes de esa ficha.

Ficha QReport
Contiene 23 componentes que facilitan la creacin de informes. Te describo solo
algunos de ellos.
Ficha QReport.

Componente

Tipo

Descripcin

QuickReport

Control que agrupa el documento


QuickReport para aadir facilidades de
impresin de informes.

QRSubDetail

Vincula DataSets adicionales al informe.

QRStringsBand Es un contenedor de objetos visuales.


QRBand
QRChildBand
QRGroup

Presenta datos de fuentes que no son


bases de datos.
Expanden a un componente QRBand
con el que se vinculan.
Crea grupos de datos.

Pgina 62

www.casadelphi.com

Pablo Bustos Fernndez.

QRLabel

Escribe Texto en un informe.

QRDBtext

Escribe texto vinculado a un campo de


una B.D. en un informe.

QRMemo

Escribe texto multilnea en un informe.

Escribe texto con formato RTF en un


informe.
Escribe un campo de la base de datos
QRDBRichText
que contiene texto en formato RTF.
Dibuja Lneas, Polgonos y Crculos en
QRShape
un informe.
QRRichText

QRImage

Dibuja imgenes en un informe.

QRDBImage

Dibuja un campo de la B.D. que contiene


una imagen.

QRChart

Dibuja Grficos en un informe.

Hay que mencionar que Delphi posee un asistente que te ayuda a generar
automticamente el reporte, durante el proceso tu le indicas la tabla, los
registros que quieres imprimir, el tipo de reporte, etc. pero bueno eso lo puedes
experimentar por ti mismo esta en File/News/Others te saldr una ventana elige
la pestaa de Business y el icono que dice QuickReport Wizad.
Para generar un informe es necesario crear un nuevo formulario y sobre el
insertar el componente QuickReport que ser el contenedor de todos los dems
componentes que utilizaremos para nuestro informe. Al momento de colocar el
QuickReport saldrn las barras de desplazamiento del formulario eso por que el
rea del QuickReport es mayor a la del formulario.
Tabla con las propiedades mas interesantes:
Propiedad

DataSet

ShowProgress
PrintEmpty

Descripcin
La propiedad DataSet del QuickReport nos
sirve para indicarle sobre que tabla se estar
trabajando, en caso de que la tabla se tuviera
en otro formulario pues simplemente se le pone
el nombre del formulario en el que esta, seguido
del nombre de la tabla.
Indica si se visualiza una ventana mientras se
generan datos a incluir en el informe, indicando
el estado de preparacin del informe.
Controla si se debe imprimir el informe en el
caso de que no tenga ningn dato.
Pgina 63

www.casadelphi.com

PrinterSetting
Bands
Options

Pablo Bustos Fernndez.


Contiene un subconjunto de propiedades
relacionadas con la configuracin de la
impresora, copias a imprimir, impresin
multipgina, etc.
Contiene los distintos tipos de bandas para
nuestro informe.
Permite la impresin del encabezado en la
primera pagina y el pie en la ultima.

Componente QRBand . . .
Un informe compadres esta dividido en varias secciones como lo son la
cabecera de pagina, el titulo, la cabecera de columnas, el pie de pagina, etc., y
este componente nos permite definir todas estas secciones comportndose
como un contenedor para cada una de esas secciones. Una de sus principales
propiedades es BandType en la cual indicamos el tipo de banda que utilizaremos
pero bueno no te aguites compita a continuacin te listo los posibles valores
para esta propiedad.
Tipos de Bandas . . .
Constante

Descripcin
Banda con el titulo del informe y se imprime
rbTitle
solo en la primera pagina.
Cabecera de todas las paginas del informe,
esta se va a imprimir en la primera pagina
rbPageHeader
dependiendo del valor de la propiedad
TQuickRep.Options.FirstPageHeader.
Es el pie de pagina y se va a imprimir en la
rbPageFooter ultima pagina dependiendo del valor de la
propiedad TQuickRep.Options.LastPageFooter.
Es un sumario que se imprime solo en la ultima
rbSummary
pagina al final de todos los datos.
Es el titulo de cada columna de datos y se
rbColumnHeader
imprime en cada pagina.
Registros del informe, se imprime una fila por
rbDetail
cada registro del DataSet del informe.
Es una banda especial que permite extender la
rbChild
presentacin de los registros de un informe.
Es una banda especial que permite la
rbSubDetail
agrupacin de los registros en grupos de
detalle.
rbGroupHeader Es la cabecera de los grupos de detalle.
rbGroupFotter Es el pie de los grupos de detalle.

Pgina 64

www.casadelphi.com

Pablo Bustos Fernndez.

Los componentes especiales para bases de datos como el QRDBText funcionan


exactamente igual que los componentes contenidos en la ficha DataControls,
contienen una propiedad que dice DataSet en la cual indicaremos la tabla de la
cual jalara la informacin, despus esta la propiedad DataField en la cual
indicaremos el campo de la base de datos que queremos imprimir.
Si utilizamos un QuickReport pues es por que necesitamos imprimir informacin
contenida en una tabla por lo tanto haremos un sencillo ejercicio en el cual
utilizaremos dos formularios en el primero mostraremos los registros de la tabla
animals que trae Delphi de ejemplo y en el segundo mostraremos una
previsualizacin de un QuicReport. Ahora por favor crea una nueva aplicacin
coloca un componente Table sobre el formulario, en su propiedad
DataBaseName pon DBDemos, en su propiedad TableName pon Animals,
despues solo vete a la propiedad Active y ponla en True. Despus de esto
coloca un componente DataSource y lgalo al componente Table.
Coloca un componente DBgrid y lgalo al DataSource. Ahora dale doble Click
sobre el componente y te sacara el Editor de Columnas dale sobre el tercer
icono que dice Add All Field, con esto te agregara todos los campos de la base
de datos, selecciona el campo que dice BMP que por cierto es el ultimo y tiene el
ndice 4. Muy bien ya que lo seleccionaste presiona la tecla Suprimir para que lo
elimines. Despus de esto cierra el editor de columnas.
Despus coloca un DBNavigator y lgalo tambin al DataSource.
Coloca un componente DBImage que por cierto tambin esta en la ficha
DataControls, liga este componente al DataSource y en su propiedad DataField
busca el campo que dice BMP y seleccinalo. Ojo mediante la propiedad
DataSource del DBImage lo ligaras al componente DataSource.
Pon un Componente Button en el cual diga Imprimir. ahora el diseo del primer
formulario quedara as.
Ahora solo pon Dos Labels en el primero pon Lista de animales y colcalo arriba
del DBGrid y al segundo ponle Imagen y ponlo arriba del componente DBIMage.
Muy bien el diseo quedara de la siguiente forma:

Pgina 65

www.casadelphi.com

Pablo Bustos Fernndez.

Muy bien ya tenemos el primer formulario, ahora aade o crea otro formulario en
tu aplicacin.
Sobre este segundo formulario coloca un componente QuikRep. ya que lo
colocaste vete a la propiedad Bands y la opcin HasDetail ponla en True (con
esto automticamente te genera una banda de tipo Detail sobre el QuickRep).
Despus vete a la propiedad DataSet y ponle Form1.Table1.
Ahora coloca un componente QRBand sobre el QuikRep. te pondr otra banda
por defaul de tipo Title. Vete a su propiedad Fames la cual contendr varias
opciones, la opcin DrawBootom ponla en True, esto nos pone una lnea
horizontal al final de la banda.
Ahora coloca un componente QRLabel sobre el componente QRBand que dice
title en su parte inferior izquierda. Vete a la propiedad Caption del QRLabel y
ponle Impresin de Animales. Despus ve a la propiedad AlignToBand y ponla
en True, ahora ve a la propiedad AlignMent y elige la opcin taCenter. Con esto
logramos que se centre la etiqueta sobre la banda.
Pon otros dos QRLabel sobre el QRBand a uno ponle en su propiedad caption
Animal y al otro ponle Imagen. y colcalos uno despus del otro en forma
horizontal dejando una distancia entre ellos.
Ahora pon un componente QRDBText en la otra Banda que dice Detail, vete a la
propiedad DataSet y ponle Form1. Table1 Despus ve a la propiedad DataField
y elige el campo NAME. alinea este componente en direccin al QRLabel que
dice Animal.

Pgina 66

www.casadelphi.com

Pablo Bustos Fernndez.

Coloca un componente QRDBImage sobre la banda Detail, ve a la propiedad


DataSet y tambin ponle Form1.Table1 Despus ve a la propiedad DataField y
elige el campo que dice BMP.
Ahora solo ajusta la anchura de la banda Detail para que se vea todo el
componente QRDBImage. de cualquier forma te muestro el diseo.

Con esto hemos terminado nuestro reporte ahora solo necesitamos mandarlo
llamar desde el botn imprimir del formulario uno, as que vete al formulario uno
y en el evento onclick del Botn pon este cdigo.
Form2.QuickRep1.Preview;
Despus de escribir esto corre tu programa, rale primo verdad al correrlo te
mandara el siguiente mensaje.

Este mensaje te lo manda por que en el formulario uno estamos haciendo


referencia al formulario dos y es necesario declararlo en el implementation, pero
Pgina 67

www.casadelphi.com

Pablo Bustos Fernndez.

no te preocupes Delphi lo hace por ti, solo dale Click en el botn de Yes y listo
vuelve a correr tu programa y experimenta con el.
Te voy a dar unas notillas sobre los mtodos de mandar a impresin.
Mtodo
Print

Preview

PrintBackGround

Descripcin
Imprime el informe directamente
sobre la impresora predeterminada de
windows.
Despliega la misma ventana de
previsualizacin que puede verse en
diseo. Es una ventana estndar de
QuickReport pero se puede utilizar
cualquier otra utilizando el mtodo
TQuickRep.OnPreview.
Crea un proceso en segundo plano
para imprimir el informe y devuelve
instantneamente la ejecucin a la
aplicacin.

Muy bien ahora para terminar este curso o manual como quiera que le llames
falta realizar una pequea aplicacin en la cual utilizaremos las bases de datos
creadas anteriormente en el Database DeskTop. La aplicacin va a ser muy
sencilla, ser un modulo de Inventario con todas su operaciones sobre los
productos, un modulo de ventas y otro de consultas de utilidades pero bueno
mejor dale continuar pariente.

Creacin de la Aplicacin
Bueno ha llegado el momento de que pongamos en practica lo que aprendimos,
as que crea una nueva aplicacin en Delphi.
Al Caption del Formulario ponle Sistema de Ventas, biMaximize de la propiedad
BorderIcons ponla en False, la propiedad Position ponla en poScreenCenter.
Coloca un Panel, su propiedad AlignMent ponla en Top, deja su Caption en
blanco brrale lo que tiene.
Sobre el panel coloca cuatro SpeedButtons en orden de izquierda a derecha
ponles el siguiente texto en su Caption.
1)Salir
2)Almacn

Pgina 68

www.casadelphi.com

Pablo Bustos Fernndez.

3)Ventas
4)Reportes
Ahora ponles una imagen a los botones en su propiedad Glyph. Despus pon su
propiedad Flat en True.
En el centro del formulario coloca un componente Bevel que se encuentra en la
ficha Additional. dentro de ese componente coloca un componente Label y en su
Caption ponle Programa de Enseanza.
Coloca un componente StatusBar, este componente esta en la ficha Win32.
automticamente te lo alineara en la parte inferior del formulario.
Dale dobleClick sobre el componente y con esto te abrir una ventana la cual es
el editor de paneles del StatusBar, es decir un StatusBar lo puedes dividir en
varias partes llamadas Panels. Bueno ya que estamos en el editor de paneles
trae cuatro iconos, el primero de izquierda a derecha me inserta un panel as es
que quiero que le des un click a ese icono, bien ya que te cre un panel vete a
sus propiedades en el inspector de objetos, ve a la propiedad Text y ponle hora.
Despus vea la propiedad Width y ponle 100. Ve a la propiedad AlingMent y
ponla en Center.
Bien ahora vuelve a insertar un nuevo Panel, en su propiedad Text ponle fecha,
la propiedad AlignMent ponla en Center y por ultimo la propiedad Width ponla en
100.
Ahora crea un nuevo panel, a este ultimo no le modifiques absolutamente nada,
despus de crearlo simplemente cierra la ventana de edicin de paneles.
El editor de paneles quedara de la siguiente forma:
Muy bien, ahora coloca un componente Timer que
esta en la ficha System. en su evento Ontimer pon el
siguiente cdigo.
StatusBar1.Panels[0].Text := TimeToStr(Time);
Ahora en el evento Oncreate del Formulario pon
este cdigo.
StatusBar1.Panels[1].Text := DateToStr(Date);
De esta forma ya tenemos el diseo completo del primer formulario y parte de su
cdigo. A continuacin te muestro el diseo del formulario.

Pgina 69

www.casadelphi.com

Pablo Bustos Fernndez.

Formulario del Almacn (Form2) . . .


Ahora crea un nuevo formulario, en su Caption ponle Almacn, biMaximize de la
propiedad BorderIcons ponla en False, la propiedad Position ponla en
poScreenCenter.
Coloca un componente Table. en su DataBaseName pon C:\EJEMPLO que es
la ruta en donde guardamos la tabla. En su propiedad TableName elige la tabla
Inventario.db, Despus ve a la propiedad IndexFieldNames y elige Clave. Ahora
ve a la propiedad Active y ponla en True.
Muy bien ahora coloca un componente DataSource y en su propiedad DataSet
pon Table1.
Coloca un GorupBox, en su propiedad Caption ponle Datos del Producto.
agrndalo un poco.
Sobre el GroupBox pondras cinco Labels a continuacin te digo los textos que
pondrs en sus captions.
1) Clave
2) Producto
3) Precio

Pgina 70

www.casadelphi.com

Pablo Bustos Fernndez.

4) Cantidad
5) E. Mnima
Enfrente de cada Label pon un DBEdit. En su propiedad DataSource ponles
DataSource1.
Lo que cambiara para cada DBEdit ser la propiedad Datafield, a continuacin te
doy lo que ir en la propiedad DataField para cada DBEDit.
1) Clave
2) Producto
3) Precio
4) Cantidad
5) Mnimo
Ahora en la propiedad CharCase de cada DBEdit ponla en ecUpperCase.
con esto ya tenemos ligados los DBEdits con los campos de la base de datos
ahora lo que falta es crear una serie de botones que me permitan realizar las
operaciones ms comunes sobre la tabla. en este caso no utilizaremos el
DBNavigator en su lugar utilizaremos cdigo directamente. as es que coloca
cuatro BitBtn justo abajo del GroupBox y otros tres a su costado. En total serian
siete botones, enseguida te muestro el texto que ira en sus Captions.
1) Guardar
2) Nuevo
3) Eliminar
4) Buscar
5) Anterior
6) Siguiente
7) Cerrar
Ahora ponles una imagen alusiva a la accin que se ejecutar.
En el evento Onclick del Botn Guardar pon este cdigo.

Pgina 71

www.casadelphi.com

Pablo Bustos Fernndez.

Table1.Post;
Table1.Edit;
En el evento Onclick del botn Nuevo pon este cdigo.
Table1.Insert;
En el evento Onclick del Botn Eliminar pon este cdigo.
If Application.MessageBox('SEGURO DE
ELIMINARLO?','PIENSA',MB_OKCANCEL+
MB_ICONQUESTION)=IDOK then
Table1.Delete;
Table1.Edit;
En el evento Onclick del botn Buscar pon este cdigo.
Form6.ShowModal; //Este formulario no lo hemos creado todava pero no hay
problema. Ok.
En el evento Onclick del botn Anterior pon este cdigo.
Table1.Prior;
Table1.Edit;
En el evento Onclick del botn Siguiente pon este cdigo.
Table1.Next;
Table1.Edit;
En el evento Onclick del botn Cerrar pon este cdigo.
Close;
A continuacin te muestro el diseo del formulario.

Pgina 72

www.casadelphi.com

Pablo Bustos Fernndez.

Formulario de Ventas (Form3) . . .


Crea un nuevo formulario, en su caption ponle Registro de Ventas, biMaximize
de la propiedad BorderIcons ponla en False, la propiedad Position ponla en
poScreenCenter.
Coloca un componente Table. en su DataBaseName pon C:\EJEMPLO , En su
propiedad TableName elige latabla Auxiliar.db Ahora ve a la propiedad Active y
ponla en True.
Coloca otro componente Table. en su DataBaseName pon C:\EJEMPLO , En su
propiedad TableName elige latabla Ventas.db Ahora ve a la propiedad Active y
ponla en True, en su propiedad IndexFieldNames elige el ndice Fecha.
Muy bien ahora coloca un componente DataSource y en su propiedad DataSet
pon Table1. Que corresponde a la tabla Auxiliar.
Pon un componente Label y en su Caption ponle Ventas de Productos, centra el
label en la parte supeior del Form.
Coloca un componente DBGrid justo debajo del Label, en su propiedad
DataSource ponle DataSource1, con esto te mostrara todos los campos de la
tabla Auxiliar los cuales estarn en este orden Clave, Cantidad, Producto,
Precio, Subtotal. En caso de que no este en este orden ponlos manualmente
mediante el Editor de Columnas del DBGrid.

Pgina 73

www.casadelphi.com

Pablo Bustos Fernndez.

Ahora pon un componente Panel Debajo del DBGrid. Borra el contenido de su


propiedad Caption, el largo del componente djalo igual que el DBGrid y ponle
una anchura considerable ya que dentro de el irn algunos componentes mas.
Coloca dos componentes Labels, a el primero ponle en su caption Total: $, al
segundo ponle un cero, el segundo colcalo justo delante del primer Label.
Ahora coloca un componente Label y un componente Edit. En el caption del
Label ponle Pago: $, y en la propiedad Text del Edit ponle un Cero. El Edit
colcalo Delante del Label.
Coloca dos componentes BitBtn uno delante del otro, al primero ponle en cu
Caption Registrar y al segundo ponle Limpiar, colcales una imagen alusiva al
texto a cada botn.
Muy bien no creo que hayas tenido problemas con esto, de cualquier forma te
presento el diseo final de este formulario.

Mira, en esta ventana es donde se realizan los procesos principales ya que en


ella se buscan productos en el Inventario, se descuentan los productos vendidos
sobre el inventario y se registran las ventas para generar el reporte de utilidades
posteriormente. Por lo tanto te mostrar el cdigo tal y como yo lo hice de hecho
con todo y los nombres de los procedimientos que por cierto tu no necesitas
escribirlos por que tu Delphi te los generara Ok.

Pgina 74

www.casadelphi.com

Pablo Bustos Fernndez.

Trabajaremos primeramente sobre el componente DBGrid. EL sistema ser


capaz de que cuando el usuario teclee la Clave del producto y d enter busque a
ese producto en el Inventario o Almacn y coloque sus datos sobre el DBGrid en
los campos correspondientes. En el mismo DBGrid deber presentar un subtotal
por cada producto independiente de su precio de venta. De igual forma en el
DBgrid debe calcularse el total de toda la venta realizada y pegarla en el Label3.
Bien si pusiste atencin a lo que te dije veraz que estaremos trabajando con el
evento OnKeyPress. por lo tanto aqu te listo el cdigo correspondiente al
evento OnKeyPress del DBGrid.
procedure TForm3.DBGrid1KeyPress(Sender: TObject; var Key: Char);
var cantidad : Real;
begin
If Key = #13 then //Correspondiente a la tecla Enter.
begin
Table1.Edit;
if Dbgrid1.Fields[0].Value<>Null then //Compruebo que haya escrito una clave de
un producto.
begin
Form2.Table1.IndexFieldNames:='Clave';
if Form2.Table1.FindKey([Dbgrid1.Fields[0]])=True then //busco el producto en la
tabla y si lo
begin
//encuentra ejecuto las
siguientes instrucciones
if Dbgrid1.Fields[1].Value=Null then //Si en Cantidad no se ha escrito nada
pongo un 1.
Dbgrid1.Fields[1].AsInteger:=1;
cantidad := Form2.Table1.FieldByName('Cantidad').AsFloat DbGrid1.Fields[1].AsFloat;
if cantidad >= 0 then
//Resto la cantidaddel almacen con la que se vende
para
begin
//checar si se abastece.
if Cantidad <= Form2.Table1.FieldByName('Minimo').AsFloat then
ShowMessage('ESTE PRODUCTO SE ESTA AGOTANDO EN ALMACEN');
//En las lneas siguientes pego el producto y su precio en el DBGrid y calculo el Subtotal
Dbgrid1.Fields[2].AsString:=Form2.Table1.FieldbyName('Producto').AsString;
Dbgrid1.Fields[3].AsFloat:=Form2.Table1.FieldbyName('Precio').AsFloat;
Dbgrid1.Fields[4].AsFloat:=Form2.Table1.FieldbyName('Precio').AsFloat *
Dbgrid1.Fields[1].AsFloat;
Dbgrid1.Fields[1].FocusControl;
Table1.First;
Label3.Caption := '0';
Table1.First; //Este ciclo sobre la tabla y dems se puede hacer de otras formas, solo lo

Pgina 75

www.casadelphi.com

Pablo Bustos Fernndez.

aclaro.
while Table1.Eof = false do
Begin
//Caculo el total de la venta sumando todos los subtotales.
Label3.Caption := FloatToStr(Table1.FieldByName('Subtotal').AsFloat +
StrToFloat(Label3.Caption));
Table1.Next;
end;
end
else
ShowMessage('LA CANTIDAD DE ESTE PRODUCTO QUE ESTAS VENDIENDO
NO LA ABASTECE EL ALMACN');
end
else
begin
ShowMessage('Producto no encontrado');
Dbgrid1.Fields[0].FocusControl;
end;
end;
end;
end;
Como puedes ver en los comentarios que realice sobre el cdigo, todo es
realmente sencillo cabe mencionar que esta es solo una forma de hacerlo. En
este cdigo Accesamos a el campo seleccionado del DBGrid mediante la
instruccin DBGRid1.Fields[Nmero_Campo].As y el tipo de dato del campo.
Bien ahora hasta este momento el sistema me arrojar los productos que se
venden, sus precios, sus subtotales y el total general de la venta, pero que pasa
si quiero borrar un producto del DBGrid ? ha pues tengo que recalcular el total
general y borrarlo del DBGrid, esto se realiza mediante el siguiente cdigo.
Este cdigo corresponde al evento OnKeyDown del DBGrid.
procedure TForm3.DBGrid1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (Key = 46) then //Correspondiente a la tecla Suprimir.
begin
if Application.MessageBox('ESTAS SEGURO DE BORRARLO
?','BORRAR',MB_OKCANCEL+MB_ICONQUESTION)=IDOK then
begin
//Si el usuario Acepta borrar el programa ejecuto lo siguiente
Table1.Delete; //Borra el registro actual.
Table1.First;
Label3.Caption := '0';

Pgina 76

www.casadelphi.com

Pablo Bustos Fernndez.

Table1.First;
//Nuevamente navego por todos los registros de la
tabla
while Table1.Eof = false do // y sumo los subtotales para sacar el nuevo Total.
Begin
Label3.Caption := FloatToStr(Table1.FieldByName('Subtotal').AsFloat +
StrToFloat(Label3.Caption));
Table1.Next;
end;
end;
end;
end;
Bsicamente lo que hago es detectar cuando el usuario presiona Suprimir, y
mandar un mensaje en l cuando pida confirmacin de eliminacin, si es
afirmativa borro el registro y calculo el nuevo total simplemente sumando los
subtotales de los registros que tenga la tabla.
Ahora si tenemos completo todo el cdigo que va dentro del DBGrid. pero an
nos falta el cdigo de los dos botones que pusimos por lo tanto vamos a
continuar.
El siguiente cdigo va en el evento Onclick del BitBtn1 (Registrar).
procedure TForm3.BitBtn1Click(Sender: TObject);
var Cambio : Real;
Cadena : String;
begin
Cambio := StrToFloat(Edit1.Text) - StrToFloat(Label3.Caption);
//Verifico que el pago sea correcto
if Cambio >= 0 then
begin
//Mando un mensaje dando gracias y el cambio si es que hay.
if Cambio = 0 then
ShowMessage('GRACIAS POR SU COMPRA')
Else
begin
Cadena := 'CAMBIO $';
Cadena := Cadena + FloatToStr(round((cambio*100))/100);
Cadena := Cadena + ' GRACIAS POR SU COMPRA';
ShowMessage(Cadena);
end;
//Descuento los productos vendidos en el almacn.
Table1.First;
While Table1.Eof = False do
begin
Form2.Table1.FindKey([Table1.FieldByName('Clave').AsInteger]);

Pgina 77

www.casadelphi.com

Pablo Bustos Fernndez.

Form2.Table1.Edit;
Form2.Table1.FieldByName('Cantidad').AsInteger :=
Form2.Table1.FieldByName('Cantidad').AsInteger - 1;
Form2.Table1.Post;
Table1.Next;
end;
//Registro la venta en la tabla Ventas.
Table2.Edit;
Table2.FieldByName('Ingreso').AsFloat :=
Table2.FieldByName('Ingreso').AsFloat + StrToFloat(Label3.Caption);
Table2.Post;
BitBtn2.Click; //Mando llamar a que se ejecute el evento Onclick del BitBtn2
(Limpiar)
Dbgrid1.Fields[0].FocusControl;
end
else
begin
ShowMessage('El Pago es menor al total a pagar');
Edit1.SetFocus;
end;
end;
Existe una funcin que utilizo para dar el cambio la cual es Round, esta funcin
redondea un numero, pero en este caso utilizo un truquillo para que lo haga en
base al tercer digito. Revisa la seccin de trucos encontraras ms informacin al
respecto.
El siguiente cdigo corresponde al evento Onclick del BitBtn2 (Limpiar)
procedure TForm3.BitBtn2Click(Sender: TObject);
begin
Table1.First;
while Table1.Eof = False do
Table1.Delete;
//Borro los registros de la tabla
Edit1.Text := '0';
Label3.Caption := '0';
DbGrid1.Fields[0].FocusControl; //Posiciono el cursor en la columna Clave del
DBGrid
end;

Pgina 78

www.casadelphi.com

Pablo Bustos Fernndez.

Este cdigo es verdaderamente sencillo, mediante un ciclo borro los registros de


la tabla, despus pongo ceros en el Edit1 y en el Label 3 y posteriormente
posiciono el cursor en la columna Clave del DBGrid.
Cabe mencionar que existen otras formas de vaciar la tabla pero es necesario
ponerla en modo exclusivo y si estamos dentro de Delphi posiblemente no se
pueda. Es por eso que trato de poner un cdigo sencillo para que sea entendible
tanto para los que ya programan visualmente como para los que apenas andan
dando sus primeros pasos.
Ahora mira como se est utilizando una tabla para realizar las ventas, pues es
necesario estar eliminando los productos cada que se entra al modulo de ventas
o que se registra una de ellas. Es por eso que debes poner el siguiente cdigo
en el evento OnShow del Formulario.
Cdigo del evento Onshow del Form3.
procedure TForm3.FormShow(Sender: TObject);
begin
BitBtn2.Click;
end;
Mira eso de la tabla auxiliar para ventas se pudo haber evitado utilizando otro
componente de rejillas pero bueno sirve de practica o no?.
Hemos finalizado con el modulo de ventas..... Baya ... ahora vienen los dems.

Formulario de Reporte de Utilidades (Form4) . . .


Crea un nuevo formulario.
Coloca un componente QuickRep, Ve a la propiedad DataSet y ponle
Form3.Table2 Despues ve a la propiedad Bands y la opcin HasDetail ponla en
True.
Coloca un componente QRBand sobre el QuickRep. ve a la propiedad Frame y
la opcion DrawBootom ponla en True.
Coloca un componente QRLabel sobre el QRBand, en su caption ponle reporte
de utilidades. La propiedad AlignToBand ponla en True. La propiedad AlignMent
ponla en taCenter.

Pgina 79

www.casadelphi.com

Pablo Bustos Fernndez.

Coloca Cuatro QRLabel sobre el QRBand uno delante del otro. A continuacin
te listo lo que pondrs en sus Captions.
1)Del
2)FechInicial
3)Al
4)FechFinal
De lo que se trata es de que en esos QrLabel salga la fecha inicial y final del
reporte por ejemplo Del 01/01/02 Al 31/05/02. rale pues verdad. bueno
proseguimos.
Coloca dos QRDBText sobre la banda HasDetail, a los dos en su propiedad
DataSet Ponles Form3.Table2. Al primero en su propiedad DataField selecciona
el Campo Fecha, y al segundo seleccinale el campo Ingreso. Listo pariente ya
hemos terminado la generacin del reporte. te muestro como quedara su
diseo.

No fue difcil verdad pues ya habas hecho un ejercicio similar.

Pgina 80

www.casadelphi.com

Pablo Bustos Fernndez.

Formulario de Impresion de Utilidades (Form5)


Crea un nuevo formulario, en su caption ponle Impresin de Utilidades,
biMaximize de la propiedad BorderIcons ponla en False, la propiedad Position
ponla en poScreenCenter.
Coloca un componente GroupBox, en su Caption ponle Fechas, agrandalo un
poco sobre el formulario.
Coloca un componente Label dentro del GroupBox, en su caption ponle Fecha
Inicial.
Coloca un componente MaskEdit justo en frente del Label anterior. Vete a su
Imput Mask Editor y ponle la mascara Date para fechas. Si no recuerdas muy
bienel asunto pues hechale un vistazo a la ficha estndar ah hay un ejercicio
con el.
Ahora coloca otro Label y ponle en su Caption Fecha Final, coloca otro
componente MaskEditor enfrente de el y al igual que al anterior ponle una
mascara de fechas.
Coloca fuera del GroupBox dos BitBtn, al primero ponle en su caption Continuar
y al segundo Cancelar. Colcales una imagen para que no se vean feos.
El diseo de este formulario seria el siguiente:
Bien ahora solo hay que poner el
cdigo correspondiente a cada
botn.
Cdigo correspondiente al evento
Onclick del BitBtn2 (Cancelar).
procedure
TForm5.BitBtn2Click(Sender:
TObject);
begin
Close; end;

Pgina 81

www.casadelphi.com

Pablo Bustos Fernndez.

Cdigo correspondiente al evento Onclick del BitBtn1 (Continuar).


procedure TForm5.BitBtn1Click(Sender: TObject);
begin
Form4.QRLabel3.caption := MaskEdit1.Text;
Form4.QRLabel5.caption := MaskEdit2.Text;
Form3.Table2.IndexFieldNames := 'Fecha';
Form3.Table2.SetRange([StrToDate(MaskEdit1.Text)],
[StrToDate(MaskEdit2.Text)]);
Form4.QuickRep1.Preview;
Form3.Table1.CancelRange;
Close;
end;

Como puedes observar estoy utilizando la funcin SetRange. Esta funcin o


como quieras llamarla lo que realiza es fijar un rango en la tabla mediante un
valor inicial y uno final. Al momento de fijar el rango tu puedes trabajar con esa
tabla como si solo tuviera en realidad solamente los registros incluidos en el
rango, es por eso que yo fijo la tabla con las fechas, para que al momento de
imprimir todos los registros de la tabla en el QuickReport solamente me imprima
las fechas que estn dentro del rango que el usuario esta dando y ninguna otra
que se encuentre almacenada en la tabla.
Para utilizar el SetRange tiene que estar indexado el campo por el cual se hace
la fijacin, en nuestro caso Fecha.

Formulario de Bsqueda de
Productos(Form6)
Crea un nuevo formulario, en su caption ponle Buscar Producto, biMaximize de
la propiedad BorderIcons ponla en False, la propiedad Position ponla en
poScreenCenter.
Coloca un componente GroupBox, Borra el contenido de su Caption. Agrandalo
un poco sobre el formulario.
Coloca un componente Label dentro del GroupBox, en su caption ponle Clave.

Pgina 82

www.casadelphi.com

Pablo Bustos Fernndez.

Coloca un componente Edit justo enfrente del Label. Su Propiedad Text dejala
en Blanco.
Coloca dos BitBtn fuera del GroupBox. al primero en su Caption Ponle Buscar y
al segundo ponle Cancelar. Colcales una imagen a cada uno de ellos.
El diseo quedara as.
Este es el cdigo del evento Onclick del
BitBtn1(Buscar).
procedure TForm6.BitBtn1Click(Sender:
TObject);
begin
Form2.Table1.IndexFieldNames := 'Clave';
if Form2.Table1.FindKey([Edit1.Text]) =
False then
ShowMessage('PRODUCTO NO
REGISTRADO');
Close;
end;

Ahora aqu tienes el cdigo del evento Onclick del BitBtn2 (Cancelar)
procedure TForm6.BitBtn2Click(Sender: TObject);
begin
Close;
end;
Baya.... baya..... baya......baya.... por fin gracias a Dios hemos terminado con
este manual...... el sistema ya esta, es solo cuestin de que lo corras y listo.
Ojal y te haya servido este manual de ser as me sentir a gusto por que
significa que si cumpli con mi objetivo.
Mira puedes bajarte el Sistema de Ventas desde aqu, no incluyo el Exe para
que sea mas chico el tamao del archivo comprimido, de cualquier forma al
correrlo Delphi te genera automticamente el ejecutable

Pgina 83

También podría gustarte