Documentos de Académico
Documentos de Profesional
Documentos de Cultura
ManualDelphi6 CasaDelphi
ManualDelphi6 CasaDelphi
com
Email: Pablo@casadelphi.com
Web: www.casadelphi.com
Pgina 1
www.casadelphi.com
Temas
Pgina
Entorno de desarrollo.
Declaracin de Variables.
13
Sentencias de Control.
17
Mensajes en Delphi
21
24
27
31
34
35
Bases de Datos.
41
41
42
Ficha BDE
43
DataControls (Exclusivos
44
58
62
68
Pgina 2
www.casadelphi.com
Hola,
Delphi
de Desarrollo
Pgina 3
www.casadelphi.com
Men Principal
Barra de Herramientas . . .
Fichas de Componentes . . .
Pgina 4
www.casadelphi.com
BorderStyle: Despliega una lista con los diferentes estilos de bordes para el
formulario.
Pgina 5
www.casadelphi.com
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.
Pgina 6
www.casadelphi.com
Accin
OnKeyPress
OnKeyDown
OnKeyUp
Accin
OnActivate
OnClose
El formulario se cierra.
El formulario se crea.
OnDesactive
OnDestroy
El formulario es destruido, y
Pgina 7
www.casadelphi.com
memoria
OnPaint
El formulario necesita
pintado, porque algo
cambiado en l.
OnResize
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
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
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:
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;
Pgina 9
www.casadelphi.com
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
Operacin
Tipo
Operando
Tipo
Resultado
Not
Negacin a nivel de
Bit.
Integer
Integer
Pgina 10
www.casadelphi.com
And
Producto a nivel de
Bit.
Integer
Integer
Or
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
Negacin.
Boolean
Boolean
And
Producto
lgico.
Boolean
Boolean
Or
Suma
lgica.
Boolean
Boolean
Xor
Or
Exclusiva
lgica.
Boolean
Boolean
Operacin
Tipo Resultado
Igualdad.
Boolean
Desigualdad.
Boolean
Pgina 11
www.casadelphi.com
Menor que.
Boolean
>
Mayor que.
Boolean
<=
Menor o Igual
que.
Boolean
>=
Mayor o Igual
que.
Boolean
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
Tercera
Categora
Operadores
Unarios
Operadores de
Multiplicacin
Operadores de
Adicin
Operadores
Relacionales
Pgina 12
www.casadelphi.com
Variables . . .
Pgina 13
www.casadelphi.com
Tipos Enteros . . .
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.
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
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
Tipos Booleanos . . .
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
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 . . .
Carcter que
contiene
Memoria
requerida en
Bytes
Un Caracter
Ansi
Un Caracter
Unicode
Un Caracter
Ansi
1
2
1
www.casadelphi.com
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.
Pgina 17
www.casadelphi.com
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 :
www.casadelphi.com
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 :
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
ShowMessage(IntToStr(suma));
end;
While ... Do :
For ... Do :
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
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 . . .
MessageDlg . . .
mtIformation
Pgina 21
www.casadelphi.com
mtWarning
mtError
mtConfirmation
mtCustom
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
mrNone
mrAbort
mrYes
mrOk
mrRetry
Pgina 22
www.casadelphi.com
mrNo
mrCancel
mrIgnore
mrAll
MessageDlgPos . . .
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
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.
Descripcin
Pgina 24
www.casadelphi.com
RadioGroup
Panel
Pgina 25
www.casadelphi.com
Ahora vamos con el cdigo. Vete al evento Onclick del Button1 que dice
Calcular. dentro de el pondremos el siguiente cdigo:
Pgina 26
www.casadelphi.com
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
MaskEdit
Image
Shape
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
Pgina 28
www.casadelphi.com
www.casadelphi.com
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
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
Pgina 31
www.casadelphi.com
Pgina 32
www.casadelphi.com
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
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
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
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.
Pgina 36
www.casadelphi.com
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
Pgina 38
www.casadelphi.com
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;
implementation
Pgina 39
www.casadelphi.com
{$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
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.
Componente
Descripcin
Pgina 41
www.casadelphi.com
Imagen
Componente
Descripcin
Pgina 42
www.casadelphi.com
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
Pgina 43
www.casadelphi.com
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
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
Type
I (Long Integer)
A (Alpha)
N (Numeric)
Size
Key
* (Clave Primaria)
40
Pgina 46
www.casadelphi.com
Precio
Minimo
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
Type
I
N
A
$
$
40
Pgina 47
www.casadelphi.com
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
www.casadelphi.com
BeforeInsert
BeforeOpen
BeforePost
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.
Pgina 49
www.casadelphi.com
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.
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
Pgina 51
www.casadelphi.com
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
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
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
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
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
Pgina 57
www.casadelphi.com
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.
Next
Prior
MoveBy
Append
Insert
Mtodos para Insertar Registros.
AppendRecord
InsertRecord
Pgina 58
www.casadelphi.com
Delete
Edit
Pgina 59
www.casadelphi.com
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.
Tabla
[WHERE
Predicado]
[ORDER BY
Columna]
Pgina 60
www.casadelphi.com
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
Ficha QReport
Contiene 23 componentes que facilitan la creacin de informes. Te describo solo
algunos de ellos.
Ficha QReport.
Componente
Tipo
Descripcin
QuickReport
QRSubDetail
Pgina 62
www.casadelphi.com
QRLabel
QRDBtext
QRMemo
QRImage
QRDBImage
QRChart
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
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
Pgina 65
www.casadelphi.com
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
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.
www.casadelphi.com
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
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
Pgina 70
www.casadelphi.com
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
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
Pgina 73
www.casadelphi.com
Pgina 74
www.casadelphi.com
Pgina 75
www.casadelphi.com
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
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
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
Pgina 79
www.casadelphi.com
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.
Pgina 80
www.casadelphi.com
Pgina 81
www.casadelphi.com
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
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