Sunteți pe pagina 1din 61

Manejo de la paleta de Componentes

1. INTRODUCCION
DELPHI tiene una serie de componentes que nos ayudan a realizar nuestro
trabajo, como todos los elementos de DELPHI estos son tratados como
objetos a esto se le suma un interfaz grafica muy amigable, la cual nos ayuda
a crear interfaces de usuario mas elegantes y amigables para el usuario.
Para usar cualquiera de los componentes solo basta con hacer clic sobre l
en la barra de componentes y luego dibujarlo sobre el formulario.
1) COMPONENTE

Edit

Este componente nos permite ingresar texto, aunque tambin podemos


mostrar un texto mediante la propiedad Text, existen otros controles que
son ms adecuados para este trabajo.
PROGRAMA 1.- El siguiente programa muestra dos componente Edit: Edit1
y Edit2
Edit1 ha sido configurado en el evento KeyPress para aceptar solo los
nmeros del 0 al 9 y adems la tecla de retroceso (mediante #8) en caso
contrario se emitir un sonido de advertencia
Edit2 hace uso de su evento Change, de tal manera que si ingresamos la
palabra adecuada cambiar el color de fondo de Edit1
unit Edit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
procedure Edit2Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
1

{$R *.dfm}
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not (key in [0..9,#8]) then
begin
key:=#0;
beep;
end;
end;
procedure TForm1.Edit2Change(Sender: TObject);
begin
if (Edit2.Text=hola) then
begin
Edit1.Color:=clLime;
edit1.Text:=clLime;
end
else
begin
edit1.Color:=clGray;
edit1.Text:=clGray;
end;
end;
end.

Observar que en la declaracin de CLASE se estn declarando los objetos


TEdit, estas lneas de cdigo no las escribimos nosotros, estas se generan
por si solas al momento de dibujar el componente en el formulario.
Para ingresar el cdigo en los eventos siga los siguientes pasos:
Para el evento KeyPress del componente Edit1:
a) Selecciones el componente haciendo u clic sobre l
b) En el Object Inspector seleccione la pestaa Events
c) Busque el evento OnKeyPress
d) Haga doble clic en el cuadro vacio de la derecha
e) Aparecer el siguiente cdigo:
Pocedure TForm1.Edit1KeyPress(Sender:TObject; var Key: Char);
begin
end;

f) Luego escriba el cdigo restante entre begin y end.


Nota.- El funcionamiento de ambos componentes es independiente aunque
se intercambie informacin entre ellos.
FORMULARIO EN PLENA EJECUCION:

2) COMPONENTE

Label

Este componente ha sido diseado para mostrar informacin al usuario, a


diferencia del control Edit que no solo puede ser usado para mostrar
informacin sino adems ingresar informacin.
Los seis componentes Label tienen las siguientes propiedades, definidas en
el Object Inspector:
Label1:

Caption: Escriba lo siguiente:

Este es un ejemplo del uso de la etiqueta

label

En la propiedad Font tenemos las siguientes propiedades


Size:
Name:

12
MS Sans Serif

Label2:

Caption: Como se puede ver esta etiqueta es personalizable


En la propiedad Font tenemos la siguiente propiedad
Size:

14

Label3:

Caption: Se le puede asignar multiples caractersticas como:

En la propiedad Font tenemos la siguiente caracterstica


Size: 12

Label4:

Caption: Color de fondo

Color

clYellow

En la propiedad Font tenemos las siguientes propiedades:


Size: 12

Label5:
3

Caption:

En la propiedad Font tenemos las siguientes propiedades

Que el curso cambie al pasar sobre la etiqueta

Size:

Label6:

Caption:

En la propiedad Font tenemos las siguientes propiedades

El tipo de letra, el color de la letra y su tamao

Size: 16
Style:
fsUndeline: True
Como podemos ver las caractersticas de cada componente Label, las
estamos manipulando desde las propiedades del Object Inspector, esto
quiere decir que las caractersticas impuestas nunca podrn variar
PROGRAMA 2.- Este ejemplo contiene seis componentes Label de tipo
TLabel con las diferentes propiedades descritas previamente, que puede
observarse al ejecutar el programa:
unit Etiquetas;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Label1:
Label2:
Label3:
Label4:
Label5:
Label6:

TLabel;
TLabel;
TLabel;
TLabel;
TLabel;
TLabel;

private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
end.

FORMULARIO EN PLENA EJECUCION:

3) COMPONENTE Button
Este es un componente muy importante y muy usado, mediante l podemos
configurar diversas acciones a realizar y manipular, incluso, otros
componentes.
PROGRAMA 3.- Este programa verifica si un nmero ingresado o generado
es primo, para esto se necesitan los siguientes componentes:
a) Un componente Edit con name Dato
b) Tres componentes Button: El primero deber tener tanto en la
propiedad Name como en Caption la palabra Primo. El segundo se
llamar Generar y el tercero Borrar
c) Ahora colocar un control Label, borrar el Caption y como nombre
colocar Res.
unit Ejem5;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
Forms,
Dialogs, StdCtrls,idglobal;
type
TForm1 = class(TForm)
Primo: TButton;
dato: TEdit;
Res: TLabel;
Generar: TButton;
Borrar: TButton;
procedure PrimoClick(Sender: TObject);
procedure GenerarClick(Sender: TObject);
5

procedure BorrarClick(Sender: TObject);


procedure datoChange(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.PrimoClick(Sender: TObject);
var
x,num,code: integer;
i: integer;
begin
val(dato.Text,num,code);
x:=0;
for i:=1 to num do
begin
if (num mod i)=0 then begin
x:=x+1;
end;
end;
if x>2 then begin
res.Caption:='El nmero '+ dato.Text + ' no es primo';
end
else
begin
res.Caption:='El nmero '+ dato.Text + ' es primo';
end;
end;
procedure TForm1.GenerarClick(Sender: TObject);
var
S: string;
begin
6

randomize;
str(random(100),S);
dato.Text:=S;
end;
procedure TForm1.BorrarClick(Sender: TObject);
begin
dato.Text:='';
res.Caption:='';
dato.SetFocus;
end;
procedure TForm1.datoChange(Sender: TObject);
begin
if dato.Text='' then begin
primo.Enabled:=false;
end
else
begin
primo.Enabled:=true;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
primo.Enabled:=false;
end;
end.
FORMULARIO EN PLENA EJECUCION:

Notar que los componentes Button tienen su accin en el evento OnClick,


mientras que el componente Edit (Dato) lo hace en el evento OnChange ,
este procedimiento ha sido hecho para desactivar el componente Primo
cada vez que Dato este vacio.
7

Finalmente, el formulario tambin tiene un cdigo FormCreate, esta referido


al Constructor, aqu se esta desactivando el control Primo cada vez que se
inicie la aplicacin.
4) OTRO EJEMPLO CON Button
Programa donde se usaran los distintos tipos de mensajes vistos
anteriormente, para esto necesitaremos seis componentes Button de
nombre Mensaje1, Mensaje2, Mensaje3, Mensaje4, Mensaje5 y Salir, el
cdigo para esta aplicacin es el siguiente:
PROGRAMA 4.unit Mensaje;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TMensajes = class(TForm)
Mensaje1: TButton;
Mensaje2: TButton;
Mensaje3: TButton;
Mensaje4: TButton;
Salir: TButton;
Mensaje5: TButton;
procedure Mensaje1Click(Sender: TObject);
procedure Mensaje2Click(Sender: TObject);
procedure Mensaje3Click(Sender: TObject);
procedure Mensaje4Click(Sender: TObject);
procedure SalirClick(Sender: TObject);
procedure Mensaje5Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Mensajes: TMensajes;
implementation
{$R *.dfm}
procedure TMensajes.Mensaje1Click(Sender: TObject);
begin
ShowMessage(Este mensaje ha sido mostrado usando ShowMessage);
end;
procedure TMensajes.Mensaje2Click(Sender: TObject);
begin
ShowMessagePos(Este mensaje esta siendo mostrado usando
showMessagePos, en la posicin (150,200),150,100);
end;
8

procedure TMensajes.Mensaje3Click(Sender: TObject);


begin
MessageDlg(Para mostrar este mensaje se ha usado MessageDlg,
mtInformation, [mbOk],0);
end;
procedure TMensajes.Mensaje4Click(Sender: TObject);
begin
MessageDlgPos(Este mensaje esta siendo mostrado por MessageDlgPos en la
posicin (150,200),
mtWarning, [mbOk],0,150,200);
end;
procedure TMensajes.SalirClick(Sender: TObject);
begin
if MessageDlg(Esta seguro que desea salir de la aplicacin,
mtConfirmation, [mbYes, mbNo], 0) = mrYes then
begin
MessageDlg(Terminando la aplicacin, mtInformation,
[mbOk], 0);
Close;
end;
end;
procedure TMensajes.Mensaje5Click(Sender: TObject);
begin
application.MessageBox(Este mensaje se muestra con MessageBox,
Observe el idioma, mb_Ok + mb_IconInformation);
end;
end.
FORMULARIO EN PLENA EJECUCION:

5) COMPONENTE

CheckBox

Un componente CheckBox presenta una opcin para el usuario. El usuario


puede marcar la caja para seleccionar la opcin, o desmarcarla para
deseleccionar opcin.
Dibujar los siguientes componentes en una nueva aplicacin:
9

a) Un componente GroupBox: Este componente ha sido diseado para


albergar a uno o ms componentes en su interior.
b) Dentro del control GroupBox colocar cuatro componentes CheckBox
como se muestra en la siguiente figura, de nombre Parlantes, Monitor,
CDROM y Fundas.
c) Agregar al formulario un componente Button de nombre btnAccion
y en Caption colocar Procesar.
d) Por ultimo insertar un componente Label de nombre Texto con el
Caption Ud. ha elegido:
FORMULARIO EN PLENA EJECUCION:

El cdigo para el componente se muestra en el siguiente listado:

PROGRAMA 5.unit Ejem3;


interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
GroupBox1: TGroupBox;
Parlantes: TCheckBox;
Monitor: TCheckBox;
BtnAccion: TButton;
texto: TLabel;
CDROM: TCheckBox;
Fundas: TCheckBox;
procedure BtnAccionClick(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
private
{ Private declarations }
public
10

x: string;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.BtnAccionClick(Sender: TObject);
begin
x:=Ud ha elegido :;
if parlantes.Checked=true then begin
x:=x+ Parlantes;
end;
if monitor.Checked=true then begin
x:=x+ Monitor;
end;
if cdrom.Checked=true then begin
x:=x+ CD-ROM;
end;
if fundas.Checked=true then begin
x:=x+ Fundas;
end;
texto.Caption:=x;
end;
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose:
Boolean);
begin
if application.MessageBox(Esta seguro que desea salir de la aplicacin,
Saliendo del la aplicacim, mb_YesNo + mb_IconInformation) = IdYes then
begin
MessageDlg(Terminando la aplicacin, mtInformation,
[mbOk], 0);
canClose:=True;
end
else
begin
canClose:=False;
end;
end;
end.

6) COMPONENTE

RadioButton
11

Este componente sirve para crear un juego de opciones mutuamente excluyentes


para el usuario, solo un RadioButton puede seleccionarse de un grupo de estos
componentes. Cuando el usuario selecciona un RadioButton, el RadioButton
previamente seleccionado se deselecciona. Frecuentemente, se agrupan los
RadioButton en una caja de TRadioGroup. Consecuentemente, agregar la caja de
grupo primero al formulario, luego colocar los RadioButton dentro de l.
Para el ejemplo que ha continuacin se presenta, insertar los siguientes
componentes:

a)

Agregar cuatro controles RadioButton


de nombres: RBoton,
REtiqueta, REdit y RCheck
b) Luego agregar un componente Button de nombre Boton,
un
componente Label de nombre Etiqueta, un componente Edit con el
nombre Edit y finalmente un componente CheckBox de nombre
Check.
El cdigo se muestra en el siguiente listado:

PROGRAMA 6.unit ejem4;


interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
RBoton: TRadioButton;
REtiqueta: TRadioButton;
REdit: TRadioButton;
Boton: TButton;
Etiqueta: TLabel;
Edit: TEdit;
Check: TCheckBox;
RCheck: TRadioButton;
procedure RBotonClick(Sender: TObject);
procedure REtiquetaClick(Sender: TObject);
procedure REditClick(Sender: TObject);
procedure RCheckClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
12

Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.RBotonClick(Sender: TObject);
begin
boton.Enabled:=true;
etiqueta.Enabled:=false;
edit.Enabled:=false;
check.Enabled:=false;
end;
procedure TForm1.REtiquetaClick(Sender: TObject);
begin
boton.Enabled:=false;
etiqueta.Enabled:=true;
edit.Enabled:=false;
check.Enabled:=false;
end;
procedure TForm1.REditClick(Sender: TObject);
begin
boton.Enabled:=false;
etiqueta.Enabled:=false;
edit.Enabled:=true;
check.Enabled:=false;
end;
procedure TForm1.RCheckClick(Sender: TObject);
begin
boton.Enabled:=false;
etiqueta.Enabled:=false;
edit.Enabled:=false;
check.Enabled:=true;
end;
end.
FORMULARIO EN PLENA EJECUCION:

7) COMPONENTE

ListBox
13

Usar ListBox para desplegar una lista de artculos que los usuarios pueden
seleccionar, agregar o anular, segn sea la naturaleza de la aplicacin.
Por otro lado en esta aplicacin aprenderemos como usar dos archivos PAS en una
misma aplicacin, para lo cual necesitamos que haga las cosas con mucho cuidado.
Un componente clave para el diseo de esta aplicacin es el componente Frame.
Efectuar los siguientes pasos para agregar un Frame:

a) Abrir un nuevo proyecto, desde el men principal File con


NewAplication
b) Luego escoger la opcin New y luego Frame
c) La accin anterior nos mostrara una pantalla como la mostrada
seguidamente:

Aunque tenga la apariencia de un formulario, no lo es, es un control Frame, en


donde introducimos los siguientes componentes:

i) Un control Edit de nombre EditList


ii) Un control ListBox de nombre ListList
iii) Dos controles Button de nombres btnAdd y btnDelete
PROGRAMA 7.unit Frame;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TFrame1 = class(TFrame)
EditList: TEdit;
ListList: TListBox;
14

btnAdd: TButton;
btnDelete: TButton;
procedure btnAddClick(Sender: TObject);
procedure btnDeleteClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
implementation
{$R *.DFM}
procedure TFrame1.btnAddClick(Sender: TObject);
begin
if EditList.Text <> then
ListList.Items.Add (EditList.Text);
end;
procedure TFrame1.btnDeleteClick(Sender: TObject);
begin
if ListList.ItemIndex >= 0 then
ListList.Items.Delete (ListList.ItemIndex);
end;
end.

Al guardar este archivo llmelo Frame. Lo que sigue ahora es insertar


el Frame dentro del formulario, para esto debemos seguir las siguientes
instrucciones:
a)

Desde la barra de componentes elegir el componente Frame y


dibujarlo dentro del formulario
b) Al terminar de dibujar el Frame nos aparecer el cuadro de dialogo
Select Frame to insert. Aqu se mostrara un listado con los Frame
existentes en el proyecto
c) Seleccione Frame 1 y haga clic en OK.
d) Veremos que todo el contenido del Frame ahora figura en el
formulario.
De esta manera se enlaza un Frame en un formulario. Lo ltimo que queda es
escribir el cdigo :
unit Form;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Frame;
type
TForm1 = class(TForm)
Frame11: TFrame1;
procedure Frame11btnAddClick(Sender: TObject);
procedure Frame11btnDeleteClick(Sender: TObject);
procedure Frame11EditListKeyPress(Sender: TObject; var Key: Char);
procedure FormCreate(Sender: TObject);
15

procedure Frame11EditListChange(Sender: TObject);


private
{ Private declarations }
public
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Frame11btnAddClick(Sender: TObject);
begin
frame11.btnAddClick(Sender);
frame11.EditList.Text:=;
if frame11.ListList.Count>0 then
frame11.btnDelete.Enabled:=true;
end;
procedure TForm1.Frame11btnDeleteClick(Sender: TObject);
begin
Frame11.btnDeleteClick(Sender);

if frame11.ListList.Count<=0 then
frame11.btnDelete.Enabled:=false;
end;
procedure TForm1.Frame11EditListKeyPress(Sender: TObject; var Key:
Char);
begin
if key=#13 then
frame11btnAddClick(frame11.btnAdd);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
frame11.btnDelete.Enabled:=false;
frame11.btnAdd.Enabled:=false;
end;
procedure TForm1.Frame11EditListChange(Sender: TObject);
begin
if not(frame11.EditList.Text=) then
begin
frame11.btnAdd.Enabled:=true;
end
else
begin
frame11.btnAdd.Enabled:=false;
end;
end;
16

end.

8) COMPONENTE

ComboBox

Este control se similar al control ListBox, con la diferencia que este despliega el
listado completo del contenido de este control.
Veamos un ejemplo sencillo para comprender este componente:
Construir un formulario como el siguiente:

Este formulario consta de:

a) Un control ComboBox de nombre ComboBox1


b) Un control ListBox de nombre Lista
c) Dos controles Button llamados Borrar y Borrar2
El cdigo que se va a usar se muestra a continuacin:
PROGRAMA 8.unit Combo;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
ComboBox1: TComboBox;
Lista: TListBox;
Borrar: TButton;
Borra2: TButton;
procedure ComboBox1Select(Sender: TObject);
procedure BorrarClick(Sender: TObject);
procedure Borra2Click(Sender: TObject);

17

private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.ComboBox1Select(Sender: TObject);
begin
lista.Items.Add(combobox1.Text);
end;
procedure TForm1.BorrarClick(Sender: TObject);
begin
lista.Items.Delete(lista.ItemIndex);
end;
procedure TForm1.Borra2Click(Sender: TObject);
var i,x:integer;
begin
x:=lista.Count;
lista.ItemIndex:=1;
for i:=1 to x do
begin
lista.Items.Delete(lista.ItemIndex);
lista.Refresh;
lista.ItemIndex:=lista.ItemIndex+1;
end;
end;
end.
Hay un pequeo detalle que no hemos tomado en cuenta, hasta el momento, el
ComboBox no tiene ningn elemento en su listado, para eso debemos ubicar la
propiedad Items, haga doble clic sobre ella o un solo clic del botn que contiene
tres puntos (), con lo cual se nos mostrara el cuadro de dialogo String List
Editor.
En este cuadro de dialogo debemos escribir los elementos que deber tener el
ComboBox. Al terminar de ingresar todo el listado pulse el botn OK.

18

9) COMPONENTE

Image

Este componente es usado para cargar una imagen grfica en un formulario. Usar
objetos TPicture en la propiedad Picture para especificar el mapa de bit 1, icono,
metafile, u otro objeto de grfico desplegados por TImage. Pueden usarse las
propiedades y mtodo de Picture para cosas como cargar una imagen desde un
archivo, limpiar la imagen en el TImage, y asignar una imagen para otro control.
TImage introduce varias propiedades para determinar cmo la imagen se despliega
dentro de los limites del objeto de TImage.

10)

COMPONENTE

BitBtn

Es un control Button que tiene las caractersticas de poder incluir una imagen o
mapa de bit. Este control tiene la misma conducta como los controles Button.
La propiedad Kind de TBitBtn proporciona botones normalmente usados, como OK,
Cancel (Cancelar), Help (Ayuda) y as sucesivamente. Estos botones predefinidos
tienen sus imgenes graficas correspondientes y conductas de valor
predeterminado, para que usted pueda agregarlos fcilmente a su aplicacin con
pequeo o ningn requisito codificado.

11)

COMPONENTE

Bevel

Use Bevel para crear cajas biseladas, marcos, o lneas. Este control puede verse en
alto o bajo relieve.

12)

COMPONENTE

OpenDialog

OpenDialog muestra una caja del dilogo modal en donde podemos seleccionar y
abrir los archivos. La caja de dilogo no aparece al momento de ejecutar la
aplicacin, hasta que se active por una llamada al mtodo Execute. Cuando los
clics del usuario Abren, el dilogo cierra y se guardan el archivo seleccionado o
archivos en la propiedad de los Archivos.
19

El ejemplo siguiente hace referencia a los controles antes mencionados. Para lo cual
necesitaremos los siguientes componentes:

a) Un control Image con las siguientes propiedades:


Name: Figura
Autosize: true
b) Un control BitBtn, que usaremos para cargar la imagen, con las
siguientes propiedades:
Name: Cargar
King: BtCustom
Caption: &Cargar imagen
Para colocar una imagen en el control haga clic sobre el botn con tres
puntos () de la propiedad Glyph, con lo que se abrir el cuadro de
dialogo Picture Editor, vea la siguiente figura, pulse el botn Load, al
aparecer el cuadro de dialogo Load Picture, subsiguiente figura,
seleccione una imagen con extensin .BMP y pulse el botn Abrir.

20

Luego en el cuadro de dialogo Picture Editor pulse el botn OK. Con esto la
imagen debe cargarse en el control.
Layout: blGlyphTop

c) Agregue un control OpenDialog, yendo a View del men principal, luego a

Component List y buscando en dicha lista dicho control para luego hacer clic
en Add to form, con las siguientes propiedades:
Name: OpenDialog1
DefaultExt: .bmp

d) Para especificar que tipos de archivos deseamos cargar, haga clic en el botn de
la propiedad Filter. Al abrirse el cuadro de dialogo Filter Editor, siguiente
figura, escriba lo siguiente, para indicar que se abrirn archivo de tipo Icono y
BMP y luego pulse el botn OK.

21

e) Agregue un componente Bevel, este control servir de separacin entre los


componentes antes insertados y los componentes que insertaremos a
continuacin, por lo que debe de tener las siguientes propiedades:
Name: Bevel1
Style: bsRaised
Width: 6

f) Inserte un component Shape con el nombre de Shape1.


g) Agregue un con ComboBox, con las siguientes propiedades:
Name: Forma
Items: Con las opciones Circulo, Rectngulo, Elipse, Cuadrado, Rect
redondeado, Cuad
redondeado.
Finalmente inserte el siguiente cdigo en los respectivos eventos:

PROGRAMA 9.unit Image;


interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, Buttons, Mask;
type
TForm1 = class(TForm)
Figura: TImage;
OpenDialog1: TOpenDialog;
Cargar: TBitBtn;
Bevel1: TBevel;
Shape1: TShape;
Forma: TComboBox;
procedure CargarClick(Sender: TObject);
procedure FormaSelect(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
Implementation
{$R *.dfm}
22

procedure TForm1.CargarClick(Sender: TObject);


begin
if OpenDialog1.Execute then
figura.Picture.LoadFromFile(opendialog1.FileName);
end;
procedure TForm1.FormaSelect(Sender: TObject);
begin
//shape1.Shape:=stellipse;
if strcomp(pchar(forma.Text),Elipse)=0 then
shape1.Shape:=stellipse;
if strcomp(pchar(forma.Text),Circulo)=0 then
shape1.Shape:=stcircle;
if strcomp(pchar(forma.Text),Rectangulo)=0 then
shape1.Shape:=strectangle;
if strcomp(pchar(forma.Text),Cuadrado)=0 then
shape1.Shape:=stsquare;
if strcomp(pchar(forma.Text),Rect redondeado)=0 then
shape1.Shape:=stroundrect;
if strcomp(pchar(forma.Text),Cuad redondeado)=0 then
shape1.Shape:=stroundsquare;
end;
end.
El formulario final debe tener la siguiente apariencia:

FORMULARIO EN PLENA EJECUCION:

23

13)

COMPONENTE

ScrollBox

Usar este control para crear una caja con barras de desplazamiento, de esta manera
prevenimos que hayan controles fuera de la vista del usuario.

14)

COMPONENTE

StaticText

Un StaticText tiene las funciones de un Label, solo que desciende de


TWinControl y por consiguiente tiene una asa de ventana. Use StaticText en lugar
de Tlabel cuando la tecla aceleradora del componente debe pertenecer, por
ejemplo a una propiedad de pagina de un ActiveX
Realicemos el siguiente ejemplo, para lo cual necesitaremos de los siguientes
controles:

a) Un control ScrollBox de nombre ScrollBox1


b) Dos controles BitBtn de nombres Accion y Reset
c) Un control StaticText de nombre tiempo
Escribir el siguiente cdigo para completar la aplicacin:

PROGRAMA 10.unit Scroll;


interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons;
type
TForm1 = class(TForm)
ScrollBox1: TScrollBox;
BitBtn1: TBitBtn;
24

Tiempo: TStaticText;
Reset: TBitBtn;
procedure BitBtn1Click(Sender: TObject);
procedure ResetClick(Sender: TObject);
private
{ Private declarations }
public
time: TDateTime;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.BitBtn1Click(Sender: TObject);
var
i: Integer;
begin
time := Now;
for I := 0 to 500 do
begin
with TcheckBox.Create (self) do
begin
SetBounds (Random (ScrollBox1.ClientWidth),
Random (ScrollBox1.ClientHeight),50, 16);
Parent := ScrollBox1;
Caption := CheckBox + IntToStr (I);
end;
with TRadioButton.Create (self) do
begin
SetBounds (Random (ScrollBox1.ClientWidth),
Random (ScrollBox1.ClientHeight),
Width, Height); // default
Parent := ScrollBox1;
Caption := Radio + IntToStr (I);
end;
Application.ProcessMessages;
end;
25

time := Now - time;


Tiempo.Caption := Tiempo : + FormatDateTime (nn:ss.zz, time);
end;
procedure TForm1.ResetClick(Sender: TObject);
begin
Time:=0;
Tiempo.Caption := Tiempo : + FormatDateTime (nn:ss.zz, time);
end;
end.

FORMULARIO EN PLENA EJECUCION:

15)

COMPONENTE

DirectoryListBox

DirectoryListBox representa un control de caja lista que es consciente de la


estructura del directorio del drive actual.
DirectoryListBox lleva acabo la conducta genrica introducida en
TCustomListBox. DirectoryListBox publica muchas propiedades heredadas de
TCustomListBox e introduce la nueva conducta para permitir al usuario cambiar
directorios o Drivers

16)

COMPONENTE

Panel

Usar Panel para poner un tablero vacio en un formulario. Los tableros tienen las
propiedades de proporcionar una frontera biselada alrededor del control, as como
los mtodos para ayudar a manejar la colocacin de controles empotrados en el
tablero.
26

Usted tambin puede usar los paneles para agrupar controles juntos, similar a la
manera en que usted puede usar una caja de grupo (GroupBox), pero con una
frontera biselada ( o ningn fronterizo) en lugar del contorno de la caja de grupo. Se
usan los paneles tpicamente para agrupar los controles dentro de un solo
formulario.

17)

COMPONENTE

FileListBox

Agregue FileListBox a un formulario para permitir a los usuarios seleccionar un


archivo. Use FileListBox junto con TDriveComboBox, TFilterComboBox, y
TDirectoryListBox agregar el total de archivos seleccionados a un formulario.

18)

COMPONENTE

DriveComboBox

Agregar un control DriveComboBox a un formulario para permitir a los usuarios


seleecionar un drive. Usar DriveComboBox junto con TFileListBox,
TFliterComBox, y TDirectoryListBox.
Ahora intentemos construir la siguiente aplicacin, el cual es un visor de archivos
graficos, ver la siguiente figura, para esto necesitamos los siguientes controles:

a) Un Panel de nombre Panel3, sin texto en el Caption, en donde se


insertaran los siguientes componentes:
Un control DriveComboBox de nombre DriveComboBox1
Cuatro ComboBox de nombres Scale, PixelFormat, ColorSpace y
Performance
b) Un Panel de nombre Panel1, sin texto en el Caption, en donde se
insertaran los siguientes componentes:
Un componente DirectoryListBox de nombre DirectoryListBox1
Un control FileListBox de nombre FileListBox1
c) Un control ScrollBox de nombre ScrollBox1 en cuyo interior se
insertara el siguiente componente:
Image de nombre Image1
Ahora debemos aplicar las propiedades a los componentes respectivos segn se
muestra a continuacin:
Panel1:

Align: alLeft
FullRepaint: True
TabOrder: 0
Panel3:

Align: alTop
FullRepaint: True
TabOrder: 1

DriveComboBox
27

AutComplete: true
DirList: DirectoryListBox1
TabOrder: 0
TextCase: tcUpperCase

Scale:

Text: Ningn Texto


Hint: Scale
Items: 1:1, 1:2, 1:4, 1:8
TabOrder: 1

PixelFormat:

Text: Ningn Texto


Hint: PixelFormat
Items: 24 bit, 8 bit
TabOrcer: 2

ColorSpace:

Text: Ningn texto


Hint: ColorSpace
Items: RGB, GrayScale
TabOrder: 3

Performance:

Text: Ningn texto


Hint: Performance
Items: Quality, Speed
TabOrder: 4

DirectoryListBox1:

Align: alTop
FileList: FileListBox1
TabOrder: 0

FileListBox1:

Align: alClient
FileType: [ftNormal]
MultiSelect: False
TabOrder: 1

ScrollBox1:

Align: alClient
28

AutoScroll: True
AutoSize: False
TabOrder: 2

Image1:

AutoSize: True
Picture: None

Hasta el momento hemos estado usando eventos que encontramos en


nuestros controles, pero que sucede cuando queremos usar nuestros propios
procedimientos, para eso, vayamos hasta la clase donde normalmente se
declaran los procedimientos y escribamos la siguiente lnea de cdigo:
Procedure AlSeleccionarConClic(Sender: TObject);

Luego sobre el nombre del procedimiento de un clic derecho y del men


emergente selecciones la opcin complete class at cursor, con lo que se
mostrara la creacin del nuevo procedimiento de la siguiente manera:
Procedure TForm1.AlSeleccionarConClic(Sender: TObject);
Begin
End;

Finalmente dentro de este procedimiento escriba:


AbrirArchivo(FileListBox1:Filename);

De manera similar debe de crear los procedimientos Procedure


SiEsJPEG(Sender: TObject); y en la parte privada (Privated) declare el
procedimiento Procedure AbrirArchivo(const Filename: String); el cdigo de
toda la aplicacin se muestra a continuacin:
PROGRAMA 11.unit jpegdemo;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, jpeg, FileCtrl, ComCtrls;
type
TForm1 = class(TForm)
Panel1: TPanel;
DirectoryListBox1: TDirectoryListBox;
FileListBox1: TFileListBox;
Panel3: TPanel;
DriveComboBox1: TDriveComboBox;
Scale: TComboBox;
PixelFormat: TComboBox;
29

ColorSpace: TComboBox;
Performance: TComboBox;
ScrollBox1: TScrollBox;
Image1: TImage;
procedure AlSeleccionarConClic(Sender: TObject);
procedure FormCreate(Sender: TObject);
Procedure SiEsJPEG(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure AbrirArchivo(const Filename: String);
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
begin
Scale.ItemIndex := 0;
PixelFormat.ItemIndex := 0;
Colorspace.ItemIndex := 0;
Performance.ItemIndex := 0;
FileListbox1.Mask := GraphicFileMask(TGraphic);
end;
procedure TForm1.AlSeleccionarConClic(Sender: TObject);
begin
AbrirArchivo(FileListbox1.Filename);
end;
procedure TForm1.SiEsJPEG(Sender: TObject);
Var
Temp: Boolean;
begin
Temp := Image1.Picture.Graphic is TJPEGImage;
if Temp then
with TJPEGImage(Image1.Picture.Graphic) do
begin
PixelFormat := TJPEGPixelFormat(Self.PixelFormat.ItemIndex);
Scale := TJPEGScale(Self.Scale.ItemIndex);
Grayscale := Boolean(Colorspace.ItemIndex);
Performance := TJPEGPerformance(Self.Performance.ItemIndex);
30

end;
Scale.Enabled := Temp;
PixelFormat.Enabled := Temp;
Colorspace.Enabled := Temp;
Performance.Enabled := Temp;
end;
procedure TForm1.AbrirArchivo(const Filename: String);
begin
try
Image1.Picture.LoadFromFile(Filename);
except
on EInvalidGraphic do
Image1.Picture.Graphic := nil;
end;
SiEsJPEG(Image1);
end;
end.

FORMULARIO EN TIEMPO DE DISEO:

Por ultimo debemos configurar eventos de la siguiente manera:

a)

Los controles Scale, PixelFormat, colorSpace, Performance, en la


propiedad OnClick, de un clic en la flechita que aparece en dicho
evento y del listado seleccionar SiEsJPEG.
b) De manera similar el control FileListBox1 en su propiedad Onclick
seleccione el procedimiento AlSeleccionarConClic
31

En la siguiente figura podemos ver la aplicacin en plena ejecucin

19)

COMPONENTE

ColorBox

ColorBox es una ComboBox que permite a los usuarios seleccionar un color.


Usar ColorBox para proporcionar al usuario una forma fcil y rpida de
seleccionar un color. Cada color se despliega al lado de un cuadrado
pequeo que contiene el color correspondiente.
Usar la propiedad Select para acceder al color que el usuario selecciona. La
Propiedad de Colors proporciona el acceso a la lista entera de colores,
mientras la propiedad de ColorNames lista sus nombres.
20)

COMPONENTE

ColorDialog

ColorDialog muestra un cuadro de dialogo modal para la seleccin de un


color.
El componente ColorDialog despliega una ventana o cuadro de dialogo
mediante el cual podemos seleccionar un color determinado. Este cuadro de
dialogo no aparece hasta que se active por una llamada al mtodo Execute.
Cuando el usuario selecciona un color y pulsa la tecla OK, el cuadro de
dialogo se cierra y el color seleccionado se guarda en la propiedad Color.
El siguiente ejemplo es una variacin de la aplicacin antes relacionada
donde usbamos un control Shape, por que necesitaremos los siguientes
controles:
a) Un control Shape de nombre Shape1.
32

b) Un ComboBox de nombre Forma en cuya propiedad Items debe de


tener las siguientes opciones: Circulo, Rectangulo, Elipse, Cuadrado,
Rect redondeado, Cuad redondeado.
c) Insert un control ColorBox de nombre ColorBox1
d) Agregue un Button de nombre Color
e) Por ultimo, un control ColorDialog de nombre ColorDialog1
Ahora escriba el siguiente cdigo y pruebe su aplicacin:
PROGRAMA 12.unit Image2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, Buttons, Mask;
type
TForm1 = class(TForm)
Shape1: TShape;
Forma: TComboBox;
ColorBox1: TColorBox;
ColorDialog1: TColorDialog;
Color: TButton;
Label1: TLabel;
procedure FormaSelect(Sender: TObject);
procedure ColorBox1Select(Sender: TObject);
procedure ColorClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormaSelect(Sender: TObject);
begin
//shape1.Shape:=stellipse;
if strcomp(pchar(forma.Text),'Elipse')=0 then
shape1.Shape:=stellipse;
if strcomp(pchar(forma.Text),'Circulo')=0 then
shape1.Shape:=stcircle;
if strcomp(pchar(forma.Text),'Rectangulo')=0 then
shape1.Shape:=strectangle;
if strcomp(pchar(forma.Text),'Cuadrado')=0 then
shape1.Shape:=stsquare;
if strcomp(pchar(forma.Text),'Rect redondeado')=0 then
shape1.Shape:=stroundrect;
if strcomp(pchar(forma.Text),'Cuad redondeado')=0 then
shape1.Shape:=stroundsquare;
33

end;
procedure TForm1.ColorBox1Select(Sender: TObject);
begin
shape1.Brush.Color:=ColorBox1.Selected;
shape1.Repaint;
end;
procedure TForm1.ColorClick(Sender: TObject);
begin
if ColorDialog1.Execute then
shape1.Brush.Color:=ColorDialog1.Color;
end;
end.
FORMULARIO EN TIEMPO DE DISEO:

En la siguiente figura podemos ver la aplicacin en plena ejecucin

34

21)

COMPONENTE

MediaPlayer

Usar el componente MediaPlayer para permitir a su aplicacin controlar


medios de reproduccin o dispositivo de grabacin como CD-ROM,
Reproductores/Video grabadoras, o secuencias de MIDI
El siguiente ejemplo reproduce un CD-ROM de audio, para lo cual
necesitamos construir el siguiente formulario:
Este formulario consta de los siguientes controles:

Ocho controles Image de nombres Play, Pausa, Adelantar, Retroceder,


Alto, Expulsar, Minimizar, y Cerrar, deber de cargar una imagen
apropiada para el control, en archivo adjunto se proporcionan algunos
grficos que pueden ser de utilidad, por otro lado todos los controles
tienen en su propiedad AutoSize a True, no se preocupe por la
ubicacin de estos controles dentro del formulario, ya que esas
propiedades lo introduciremos mediante cdigo.
Un control Timer llamado Timer1
Un control Label de nombre Pista.
Un componente MediaPlayer de nombre MediaPlayer1

Ahora inserte el siguiente cdigo en la aplicacin, notara que en lugar de


usar controles Button estamos usando los Image para configurar los
movimientos de nuestro reproductor.
PROGRAMA 13.unit Reproductor;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, MPlayer;
type
TForm1 = class(TForm)
Pausa: TImage;
Alto: TImage;
35

Expulsar: TImage;
Play: TImage;
Minimizar: TImage;
Cerrar: TImage;
MediaPlayer1: TMediaPlayer;
Adelantar: TImage;
Retroceder: TImage;
Pista: TLabel;
Timer1: TTimer;
procedure SalirClick(Sender: TObject);
procedure CerrarClick(Sender: TObject);
procedure PlayClick(Sender: TObject);
procedure AltoClick(Sender: TObject);
procedure ExpulsarClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure PausaClick(Sender: TObject);
procedure AdelantarClick(Sender: TObject);
procedure RetrocederClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Timer1Timer(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure MinimizarClick(Sender: TObject);
private
{ Private declarations }
public
x,y:string;
pos:Integer;
z:word;
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.SalirClick(Sender: TObject);
begin
close;
end;
procedure TForm1.CerrarClick(Sender: TObject);
begin
mediaplayer1.Stop;
close;
end;
procedure TForm1.PlayClick(Sender: TObject);
begin
mediaplayer1.Play;
play.Visible:=False;
pausa.Visible:= True;
36

str(pos,x);
str(mediaplayer1.Tracks,y);
pista.Caption:=X + ' de '+ y;
end;
procedure TForm1.AltoClick(Sender: TObject);
begin
mediaplayer1.Stop;
mediaplayer1.Previous;
mediaplayer1.Refresh;
play.Visible:=True;
pausa.Visible:=false;
end;
procedure TForm1.ExpulsarClick(Sender: TObject);
begin
mediaplayer1.Eject;
pista.Caption:='Inserte un CD de audio';
timer1.Enabled:=true;
expulsar.Enabled:=false;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
mediaplayer1.DeviceType :=dtCdAudio;
mediaplayer1.Open;
pos:=1;
timer1.Enabled:=false;
form1.Left:=595;
form1.Top:=475;
form1.Color:=clBlack;
form1.AutoSize:=False;
BorderStyle:=bsNone;
play.Left:=8;
play.Top:=32;
pausa.Left:=8;
pausa.Top:=32;
adelantar.Left:=48;
adelantar.Top:=32;
retroceder.Left:=88;
retroceder.Top:=32;
alto.Left:=128;
alto.Top:=32;
expulsar.Left:=168;
expulsar.Top:=32;
minimizar.Left:=176;
minimizar.Top:=0;
Cerrar.Left:=192;
Cerrar.Top:=0;
pista.Font.Color:=clLime;
37

Pista.Left:=56;
Pista.Top:=80;
end;
procedure TForm1.PausaClick(Sender: TObject);
begin
mediaplayer1.Pause;
pausa.Visible:=False;
Play.Visible:=True;
end;
procedure TForm1.AdelantarClick(Sender: TObject);
begin
pos:=pos+1;
if pos=mediaplayer1.Tracks+1 then
begin
mediaplayer1.Stop;
mediaplayer1.Rewind;
mediaplayer1.Play;
mediaplayer1.Refresh;
pos:=1;
end
else
begin
mediaplayer1.Next;
end;
str(pos,x);
str(mediaplayer1.Tracks,y);
pista.Caption:=X + ' de '+ y;
end;
procedure TForm1.RetrocederClick(Sender: TObject);
begin
mediaplayer1.Stop;
mediaplayer1.AutoRewind:=True;
mediaplayer1.Rewind;
mediaplayer1.Play;
pos:=1;
mediaplayer1.Refresh;
str(mediaplayer1.Tracks,y);
pista.Caption:='1 de ' + y;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
mediaplayer1.Close;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
mediaplayer1.Refresh;
if (mediaplayer1.Tracks>=30) or (mediaplayer1.Tracks<=0) then
begin
38

play.Visible:=true;
pausa.Visible:=false;
play.Enabled:=false;
adelantar.Enabled:=false;
retroceder.Enabled:=false;
alto.Enabled:=false;
inc(z);
end
else
begin
play.Enabled:=true;
adelantar.Enabled:=true;
retroceder.Enabled:=true;
alto.Enabled:=true;
pos:=1;
expulsar.Enabled:=true;
playClick(play);
timer1.Enabled:=false;
end;
end;
procedure TForm1.FormActivate(Sender: TObject);
begin
mediaplayer1.Refresh;
if mediaplayer1.Tracks >30 then
begin
showmessage('Inserte un CD de audio');
timer1.Enabled:=true;
timer1timer(timer1);
end
else
begin
playclick(play);
minimizarclick(minimizar);
end;
end;
procedure TForm1.MinimizarClick(Sender: TObject);
begin
Application.Minimize;
end;
end.
En la siguiente figura podemos ver la aplicacin en plena ejecucin, claro que
esto puede diferir de su aplicacin, eso depender bastante de que tipo de
imgenes ha utilizado.

39

22)

COMPONENTE

TabControl

TabControl es un juego de etiquetas que tiene la apariencia de divisores de


cuaderno.
Usar TabControl para agregar un control con las escenas de etiquetas
mltiples a un formulario. Al contrario de un mando de la pgina, TabControl
no esta hecho de varias pginas que contienen los mandos diferentes. En
cambio, TabControl es un solo objeto. Cuando la etiqueta actual cambia, el
mando de la etiqueta debe actualizar directamente su contenido para reflejar
el cambio de un evento OnChange.
Desactivando un objeto de TabControl desactiva todas las etiquetas porque
es un solo control. Para desactivar las etiquetas individuales, use
PageControl y desactive los mandos de TagSheet que representan las
paginas individuales.
23)

COMPONENTE

UpDown

Usar UpDown para agregar un control arriba-abajo a un formulario. Un


control Arriba-abajo (Up-Down) consiste en un par de botones de flecha,
como las flechas que aparecen en un spin box. Un control Up-Down permite a
los usuarios cambiar el tamao de un valor numrico haciendo clic en los
botones de la flecha.
En base a estos dos controles, construyamos la siguiente aplicacin, la cual
permite realizar conversiones de varios tipos de unidades de medicin. Para
esto necesitamos los siguientes controles. Ver la figura siguiente:

40

a) Un control TabControl de nombre ConvFamilies, en cuyo interior se


deber insertar los siguientes controles:
Un ListBox con las siguientes propiedades:
Color: clWindow
Height: 391
Left: 16
Name: ConvTypes
ParentColor: False
Sorted: True
TabOrder: 0
TabStop: True
Top: 32
Width: 177
Otro ListBox con las siguientes propiedades:
Color: clBtnFace
Height: 367
Left: 200
Name: ConvResults
ParentColor: True
Sorted: True
TabOrder: 3
TabStop: False
Top: 56
Width: 196
Inserte un control Edit con las propiedades que mencionamos a
continuacin:
Height: 21
Left: 200
Name: ConvValue
TabOrder: 1
41

TabStop: true
Text: 1
Top: 32
Width: 177
Por ultimo un control UpDown con las siguientes caractersticas:
Height: 21
Left: 377
Max: 10000
Min: -10000
Name: ConvValueIncDec
Orientation: udVertical
Position: 1
TabOrder: 2
TabStop: False
Top: 32
Width: 16

Esta aplicacin contar con dos unidades (Unit) diferentes, recordemos que
una aplicacin anterior ya hemos realizado una tarea similar, por que no
explicaremos como hacerlo solo les presentaremos ambas unidades con los
cdigos respectivos:
La Unit primaria, la cual debemos de agregar, ser EuroConv y consta del
siguiente cdigo fuente:
unit EuroConv;
{ ***************************************************************************
Monetary conversion units
The constants, names and monetary logic in this unit follow the various EU
standards layed out in documents 397R1103, 398R2866 and 300R1478.
WARNING: In order for the rounding rules to exactly match the EU dictates
this unit will adjust your application's rounding mode to rmUp.
This will affect how rounding happens globally and may cause
unforeseen side effects in your application.
At the time of the writing of this document those documents where at
http://europa.eu.int/eur-lex/en/lif/dat/1997/en_397R1103.html
http://europa.eu.int/eur-lex/en/lif/dat/1998/en_398R2866.html
http://europa.eu.int/eur-lex/en/lif/dat/2000/en_300R1478.html
If not found there you can search for them on http://europa.eu.int/eur-lex
The conversion rates for US dollar, British pound and Japanese yen are
accurate as of 12/12/2000 at 18:35 EST and were as reported by
CNNfn (http://cnnfn.cnn.com/markets/currency)
Great monetary exchange rate sites
http://pacific.commerce.ubc.ca/xr/rates.html
42

http://www.imf.org/external/np/tre/sdr/drates/8101.htm
http://www.belgraver.demon.nl/currconv2/
***************************************************************************
References:
[1]
Article
1
in
http://europa.eu.int/eurlex/en/lif/dat/1998/en_398R2866.html
[2]
Article
1
in
http://europa.eu.int/eurlex/en/lif/dat/2000/en_300R1478.html
[3]
Article
4.4
in
http://europa.eu.int/eurlex/en/lif/dat/1997/en_397R1103.html
}
interface
uses
ConvUtils, Math;
var
// *************************************************************************
// Euro Conversion Units
// basic unit of measurement is euro
cbEuro: TConvFamily;
euEUR: TConvType; { EU euro }
euBEF: TConvType; { Belgian francs }
euDEM: TConvType; { German marks }
euGRD: TConvType; { Greek drachmas }
euESP: TConvType; { Spanish pesetas }
euFFR: TConvType; { French francs }
euIEP: TConvType; { Irish pounds }
euITL: TConvType; { Italian lire }
euLUF: TConvType; { Luxembourg francs }
euNLG: TConvType; { Dutch guilders }
euATS: TConvType; { Austrian schillings }
euPTE: TConvType; { Portuguese escudos }
euFIM: TConvType; { Finnish marks }
euUSD: TConvType; { US dollars }
euGBP: TConvType; { British pounds }
euJPY: TConvType; { Japanese yens }
const
// Fixed conversion Euro rates [1]
EURToEUR = 1.00000;
BEFToEUR = 40.3399;
DEMToEUR = 1.95583;
43

GRDToEUR = 340.750; // [2] effective 1/1/2001


ESPToEUR = 166.386;
FFRToEUR = 6.55957;
IEPToEUR = 0.787564;
ITLToEUR = 1936.27;
LUFToEUR = 40.3399;
NLGToEUR = 2.20371;
ATSToEUR = 13.7603;
PTEToEUR = 200.482;
FIMToEUR = 5.94573;
// Subunit rounding for Euro conversion and expressed as powers of ten [3]
EURSubUnit = -2;
BEFSubUnit = 0;
DEMSubUnit = -2;
GRDSubUnit = 0; // [2] effective 1/1/2001
ESPSubUnit = 0;
FFRSubUnit = -2;
IEPSubUnit = -2;
ITLSubUnit = 0;
LUFSubUnit = -2;
NLGSubUnit = -2;
ATSSubUnit = -2;
PTESubUnit = -2;
FIMSubUnit = 0;
var
// Accurate as of 12/12/2000 at 16:42 PST but almost certainly isn't anymore
// Remember if you are changing these values in realtime you might,
depending
// on your application's structure, have to deal with threading issues.
USDToEUR: Double = 1.1369;
GBPToEUR: Double = 1.6462;
JPYToEUR: Double = 0.0102;
// Subunit rounding for Euro conversion and expressed as powers of ten
USDSubUnit: Integer = -2;
GBPSubUnit: Integer = -2;
JPYSubUnit: Integer = -2;
// Registration methods
function RegisterEuroConversionType(const AFamily: TConvFamily;
const ADescription: string; const AFactor: Double;
const ARound: TRoundToRange): TConvType; overload;
function RegisterEuroConversionType(const AFamily: TConvFamily;
const ADescription: string; const AToCommonProc,
44

AFromCommonProc: TConversionProc): TConvType; overload;


// Types used during the conversion of Euro to and from other currencies
type
TConvTypeEuroFactor = class(TConvTypeFactor)
private
FRound: TRoundToRange;
public
constructor Create(const AConvFamily: TConvFamily;
const ADescription: string; const AFactor: Double;
const ARound: TRoundToRange);
function ToCommon(const AValue: Double): Double; override;
function FromCommon(const AValue: Double): Double; override;
end;
// various strings used in this unit
resourcestring
SEuroDescription = 'Euro';
SEURDescription = 'EUEuro';
SBEFDescription = 'BelgianFrancs';
SDEMDescription = 'GermanMarks';
SGRDDescription = 'GreekDrachmas';
SESPDescription = 'SpanishPesetas';
SFFRDescription = 'FrenchFrancs';
SIEPDescription = 'IrishPounds';
SITLDescription = 'ItalianLire';
SLUFDescription = 'LuxembourgFrancs';
SNLGDescription = 'DutchGuilders';
SATSDescription = 'AustrianSchillings';
SPTEDescription = 'PortugueseEscudos';
SFIMDescription = 'FinnishMarks';
SUSDDescription = 'USDollars';
SGBPDescription = 'BritishPounds';
SJPYDescription = 'JapaneseYens';
implementation
{ TConvTypeEuroFactor }
constructor TConvTypeEuroFactor.Create(const AConvFamily: TConvFamily;
const ADescription: string; const AFactor: Double;
const ARound: TRoundToRange);
begin
inherited Create(AConvFamily, ADescription, AFactor);
FRound := ARound;
end;

45

function TConvTypeEuroFactor.FromCommon(const AValue: Double): Double;


begin
Result := SimpleRoundTo(AValue * Factor, FRound);
end;
function TConvTypeEuroFactor.ToCommon(const AValue: Double): Double;
begin
Result := AValue / Factor;
end;
function RegisterEuroConversionType(const AFamily: TConvFamily;
const ADescription: string; const AFactor: Double;
const ARound: TRoundToRange): TConvType;
var
LInfo: TConvTypeInfo;
begin
LInfo := TConvTypeEuroFactor.Create(AFamily, ADescription, AFactor,
ARound);
if not RegisterConversionType(LInfo, Result) then
begin
LInfo.Free;
RaiseConversionRegError(AFamily, ADescription);
end;
end;
function RegisterEuroConversionType(const AFamily: TConvFamily;
const ADescription: string; const AToCommonProc,
AFromCommonProc: TConversionProc): TConvType;
begin
Result := RegisterConversionType(AFamily, ADescription,
AToCommonProc, AFromCommonProc);
end;
function ConvertUSDToEUR(const AValue: Double): Double;
begin
Result := AValue * USDToEUR;
end;
function ConvertEURToUSD(const AValue: Double): Double;
begin
Result := SimpleRoundTo(AValue / USDToEUR, USDSubUnit);
end;
function ConvertGBPToEUR(const AValue: Double): Double;
begin
Result := AValue * GBPToEUR;
end;

46

function ConvertEURToGBP(const AValue: Double): Double;


begin
Result := SimpleRoundTo(AValue / GBPToEUR, GBPSubUnit);
end;
function ConvertJPYToEUR(const AValue: Double): Double;
begin
Result := AValue * JPYToEUR;
end;
function ConvertEURToJPY(const AValue: Double): Double;
begin
Result := SimpleRoundTo(AValue / JPYToEUR, JPYSubUnit);
end;
initialization
// Euro's family type
cbEuro := RegisterConversionFamily(SEuroDescription);
// Euro's various conversion types
euEUR := RegisterEuroConversionType(cbEuro, SEURDescription, EURToEUR,
EURSubUnit);
euBEF := RegisterEuroConversionType(cbEuro, SBEFDescription, BEFToEUR,
BEFSubUnit);
euDEM := RegisterEuroConversionType(cbEuro, SDEMDescription,
DEMToEUR, DEMSubUnit);
euGRD := RegisterEuroConversionType(cbEuro, SGRDDescription,
GRDToEUR, GRDSubUnit);
euESP := RegisterEuroConversionType(cbEuro, SESPDescription, ESPToEUR,
ESPSubUnit);
euFFR := RegisterEuroConversionType(cbEuro, SFFRDescription, FFRToEUR,
FFRSubUnit);
euIEP := RegisterEuroConversionType(cbEuro, SIEPDescription, IEPToEUR,
IEPSubUnit);
euITL := RegisterEuroConversionType(cbEuro, SITLDescription, ITLToEUR,
ITLSubUnit);
euLUF := RegisterEuroConversionType(cbEuro, SLUFDescription, LUFToEUR,
LUFSubUnit);
euNLG := RegisterEuroConversionType(cbEuro, SNLGDescription, NLGToEUR,
NLGSubUnit);
euATS := RegisterEuroConversionType(cbEuro, SATSDescription, ATSToEUR,
ATSSubUnit);
euPTE := RegisterEuroConversionType(cbEuro, SPTEDescription, PTEToEUR,
PTESubUnit);
euFIM := RegisterEuroConversionType(cbEuro, SFIMDescription, FIMToEUR,
FIMSubUnit);
euUSD := RegisterEuroConversionType(cbEuro, SUSDDescription,
47

ConvertUSDToEUR, ConvertEURToUSD);
euGBP := RegisterEuroConversionType(cbEuro, SGBPDescription,
ConvertGBPToEUR, ConvertEURToGBP);
euJPY := RegisterEuroConversionType(cbEuro, SJPYDescription,
ConvertJPYToEUR, ConvertEURToJPY);
finalization
// Unregister all the conversion types we are responsible for
UnregisterConversionFamily(cbEuro);
end.
Ahora debemos escribir el cdigo de la segunda Unit la cual es donde se
encuentran los controles ya insertados, escriba lo siguiente:
PROGRAMA 14.unit ConvertItUnit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls;
type
TForm1 = class(TForm)
ConvTypes: TListBox;
ConvValue: TEdit;
ConvResults: TListBox;
ConvValueIncDec: TUpDown;
ConvFamilies: TTabControl;
procedure FormShow(Sender: TObject);
procedure ConvTypesClick(Sender: TObject);
procedure ConvValueChange(Sender: TObject);
procedure ConvFamiliesChange(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
uses
ConvUtils, StdConvs, EuroConv, StrUtils;
48

procedure TForm1.FormShow(Sender: TObject);


var
LFamilies: TConvFamilyArray;
I: Integer;
LStrings: TStringList;
begin
ConvFamilies.Tabs.Clear;
LStrings := TStringList.Create;
try
GetConvFamilies(LFamilies);
for I := 0 to Length(LFamilies) - 1 do
LStrings.AddObject(ConvFamilyToDescription(LFamilies[I]),
TObject(LFamilies[I]));
LStrings.Sort;
ConvFamilies.Tabs.Assign(LStrings);
ConvFamiliesChange(Sender);
finally
LStrings.Free;
end;
end;
procedure TForm1.ConvFamiliesChange(Sender: TObject);
var
LFamily: TConvFamily;
LTypes: TConvTypeArray;
I: Integer;
begin
LFamily := TConvFamily(ConvFamilies.Tabs.Objects[ConvFamilies.TabIndex]);
with ConvTypes, Items do
begin
BeginUpdate;
Clear;
GetConvTypes(LFamily, LTypes);
for I := 0 to Length(LTypes) - 1 do
AddObject(ConvTypeToDescription(LTypes[I]), TObject(LTypes[I]));
ItemIndex := 0;
EndUpdate;
end;
ConvTypesClick(Sender);
end;
procedure TForm1.ConvTypesClick(Sender: TObject);
begin
ConvValueChange(Sender);
end;
procedure TForm1.ConvValueChange(Sender: TObject);
49

var
LValue: Double;
LBaseType, LTestType: TConvType;
I: Integer;
begin
with ConvResults, Items do
try
BeginUpdate;
Clear;
try
LValue := StrToFloatDef(ConvValue.Text, 0);
if ConvTypes.ItemIndex <> -1 then
begin
LBaseType
TConvType(ConvTypes.Items.Objects[ConvTypes.ItemIndex]);
for I := 0 to ConvTypes.Items.Count - 1 do
begin
LTestType := TConvType(ConvTypes.Items.Objects[I]);
Add(Format('%n %s', [Convert(LValue, LBaseType, LTestType),
ConvTypeToDescription(LTestType)]));
end;
end
else
Add('No base type');
except
Add('Cannot parse value');
end;
finally
EndUpdate;
end;
end;
end.

50

:=

24)

COMPONENTE

Timer

Usar el componente Timer para activar un evento, en un determinado


momento o repetidamente, despus de un intervalo moderado. Escriba el
cdigo que usted requiere dentro del evento OnTimer.
25)

COMPONENTE

MainMenu

MainMenu encapsula una barra de men y sus respectivos mens


desplegables en un formulario.
Use MainMenu para mantener el men principal en un formulario. Para
empezar diseando un men, agregue un men principal a un formulario y
pulse doble clic sobre el componente.
MainMenu introduce propiedades u mtodos por unir el drop-down
(despliegue de opciones) mens del men principal con el men principal de
otro formulario.
MainMenu introduce propiedades y mtodos por ayudar en el proceso de
negociacin de men de un objeto OLE.
26)

COMPONENTE

PopupMenu

PopupMenu encapsula las propiedades, mtodos y eventos de un men


automtico o men flotante.
Use PopupMenu para definir el men flotante que aparece cuando el
usuario hace clic en un mando con el botn derecho del ratn. Para hacer un
51

men automtico disponible, asigne el objeto PopupMenu a la propiedad de


PopupMenu del mando.
El ejemplo que mostramos a continuacin es un pequeo y simple juego,
pero que resulta til para explicar la utilizacin de los controles mencionados,
el juego se llama MATASAPO y su construccin consta de los siguientes
elementos:
Form1
El primer formulario,
componentes:

ver siguiente figura, contiene los

siguientes

Cuatro controles Label de nombres Label1, Label2, Label3, Label4.


Un control MainMenu de nombre MainMenu1, en este control
debemos ingresar las opciones de cada men principal, esto se logra a
travs de la propiedad Items en el componente de la figura que sigue:

Y se obtiene el siguiente men principal:

Luego insertar un Panel con las siguientes propiedades:


Alignment: taCenter
52

Caption: No escriba nada


Color: clHightlight
Left: 0
Name: Panel1
Top: 40
Width: 529
Height: 283
En este panel inserte tres controles Image: Image1, el cual actuara como
enemigo, Image3 ser la bala y por ultimo Image2 el cual ser el medio que
el jugador va a dirigir, trate de insertar figuras adecuadas para es te juego.

Inserte dos controles Timer: Timer1 y Timer2.

El cdigo a usar para este primer formulario es el siguiente:


PROGRAMA 15.unit Matasapo;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ComCtrls, ExtCtrls, Menus, Ayuda;
type
TForm1 = class(TForm)
Label1: TLabel;
Panel1: TPanel;
53

Timer1: TTimer;
Image1: TImage;
Image2: TImage;
Image3: TImage;
Timer2: TTimer;
Label2: TLabel;
MainMenu1: TMainMenu;
File1: TMenuItem;
Jugar1: TMenuItem;
Reiniciar: TMenuItem;
N1: TMenuItem;
Salir1: TMenuItem;
Acercade1: TMenuItem;
Label3: TLabel;
Label4: TLabel;
Delautor1: TMenuItem;
PopupMenu1: TPopupMenu;
Jugar2: TMenuItem;
Reiniciar1: TMenuItem;
N2: TMenuItem;
Salir2: TMenuItem;
procedure FormKeyPress(Sender: TObject; var Key: Char);
procedure Timer2Timer(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure Timer1Timer(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Jugar1Click(Sender: TObject);
procedure Salir1Click(Sender: TObject);
procedure ReiniciarClick(Sender: TObject);
Procedure Desactivar();
procedure Delautor1Click(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure Panel1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
{ Private declarations }
public
Nivel: Integer;
end;
var
Form1: TForm1;
salt : boolean;
implementation
{$R *.DFM}

54

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);


begin
if not (image2.Enabled=False) then
begin
if key = #13 then // Si pulsamos enter osea disparo tonces...
timer2.enabled := true; // hacemos que la bala comienze a moverse...
if salt = true then // si la bala ha alcanzado el tope de alto permitio..
begin
image3.left := image2.left; // la posicion horizontal de la bala es igual a
la de la nave de disparo
image3.top := image2.top - 10; // y lo mismo para la propiedad de la
altura.
image3.visible := true; // La hacemos visible
salt := false; // Convertimos la propiedad en que no ha llegao
end;
end;
end;
procedure TForm1.Timer2Timer(Sender: TObject);
var
l: integer; // Definimos contador
begin
if image3.Top < 18 then // si la variable ha pasado el tope tonces...
begin
image3.visible := false; // la bala se hace invisible
salt := true; // convertimos el booleano en verdadero (ya ha sobrepasado el
limite)
timer2.enabled := false; // Y paramos el conometro que se encarga de
regular el avance de la bala
if (image3.left > image1.left - 10) and (image3.left < (image1.left + 35))
then // Damos un margen de error a la bala para que toque con la nave
enemiga.
begin
beep;
image1.top := 8; // Devolvemos la nave enemiga a la posicion inicial
label1.caption := inttostr(strtoint(label1.caption) + 1); // Aadimos un
punto
If strtoint(Label1.Caption)=0 then
Label1.Visible:=True;
l := strtoint(label1.caption); // Incrementamos contador
if l = 10 then
begin
Nivel:=Nivel+1;
Timer1.Enabled:=False;
Timer2.Enabled:=False;
Label1.Visible:=False;
Timer1.Interval:=Timer1.Interval-500;
IF Nivel<=6 then
55

begin
Application.MessageBox ('Preprese a pasar al siguiente nivel',
'Siguiente nivel', mb_ok + mb_IconExclamation); // Cuando tengamos 10
puntos entonces ganas.
Timer1.Enabled:=True;
Timer2.Enabled:=True;
Label1.Caption:='-1';
label4.Caption:=inttostr(nivel);
end
else
begin
if Application.MessageBox ('Ud. es un genio jugando, intente otra
vez', 'Felicitaciones', mb_okCancel + mb_IconExclamation)=idOK then
Begin
jugar1click(jugar1);
Label1.Caption:='-1';
end
else
desactivar;
end;
end;
end;
end
else
image3.top := image3.top - 10; // Si no ha alcanzado el tope entonces qeu
suba de 10 en 10
end;
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if not image2.Enabled=False then
begin
if image2.left < 440 then // Si no ha sobrepasado el limite derecho
begin
if key = vk_right then // y pulsamos el cursor derecho
begin
image2.left := image2.left + 51; // que la nave nuestra se mueva a la
derecha
end;
end
else
if key = vk_left then // si por el contrario pulsamos la tecla izquierda...
begin
image2.left := image2.left - 51;// que se mueva hacia a la izquierda.
end;
56

if image2.left > 50 then // si no hemos sobrepasado el limite izquierdo...


begin
if key = vk_left then // y presionamos el cursor izquierdo..
begin
image2.left := image2.left -51; // que la imagen se mueva hacia la
izquierda
end;
end
else
if key = vk_right then
begin
image2.left := image2.left + 51; // si en cambio pulsamos el cursor
derecho la imagen se mueva hacia la derecha
end;
end;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if image1.top > 250 then begin // si la nave enemiga ha llegado hasta
nuestra posicion...
label1.caption := '-1'; // la puntuacion pasa a 0
image1.top := 8; // Devolvemos la imagen a la posicion inicial
showmessage('Perdiste'); // PErdiste
desactivar;
timer1.Interval:=3000;
end else
image1.left := random (440); // sino que se mueva aleatoriamente por
pantalla
image1.top := image1.top + 5; // sino que se mueva aleatoriamente por
pantalla
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Desactivar;
end;
procedure TForm1.Jugar1Click(Sender: TObject);
begin
Timer1.Enabled:=True;
Timer2.Enabled:=True;
Image2.Enabled:=True;
Image1.Enabled:=False;
57

Image3.Enabled:=False;
Reiniciar.Enabled:=True;
reiniciar1.Enabled:=True;
Nivel:=1;
Timer1.Interval:=3000;
Jugar1.Enabled:=False;
jugar2.Enabled:=False;
label4.Visible:=True;
label4.Caption:='1';
label1.Caption:='-1';
end;
procedure TForm1.Salir1Click(Sender: TObject);
begin
Close;
end;
procedure TForm1.ReiniciarClick(Sender: TObject);
begin
Nivel:=1;
Timer1.Interval:=2000;
Timer1.Enabled:=False;
Timer2.Enabled:=False;
Timer1.Interval:=3000;
Timer1.Enabled:=True;
Timer2.Enabled:=True;
Label1.Caption:='0';
image1.top := 8;
Nivel:=1;
end;
procedure TForm1.Desactivar;
begin
timer1.Interval:=3000;
timer1.Enabled:=False;
Timer2.Enabled:=False;
Image2.Enabled:=False;
Image1.Enabled:=False;
Image3.Enabled:=False;
label1.Visible:=False;
reiniciar.Enabled:=False;
jugar1.Enabled:=True;
reiniciar1.Enabled:=False;
jugar2.Enabled:=True;
end;
58

procedure TForm1.Delautor1Click(Sender: TObject);


var
Ayuda: TForm2;
begin
Ayuda := TForm2.Create(Self);
try
Ayuda.ShowModal;
finally
Ayuda.Free;
end;
end;
procedure TForm1.FormCloseQuery(Sender:
TObject;
var CanClose:
Boolean);
begin
if application.MessageBox('Desea salir del Juego', 'Adios',mb_Okcancel +
mb_IconInformation)=idOk then
Begin
CanClose:=True;
end else
CanClose:=False;
end;
procedure
TForm1.Panel1MouseDown(Sender:
TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Panel1.PopupMenu:=PopuPmenu1;
end;

TObject;

Button:

end.

Notar que tendremos que crear el procedimiento llamado Desactivar, de


manera similar a como ya lo hemos hecho antes: Si Observamos la parte de
los Unit hacemos referencia a Ayuda, este es le segundo formulario que
crearemos, el cual es algo sencillo, en el solo daremos informacin acerca
del autor de la aplicacin u otro data que Ud. Crea conveniente anunciar.
Desde el men principal File de DELPHI selecciones la opcin New/Form con
la cual se insertar un nuevo formulario, llame a este formulario Ayuda al
momento de grabarlo
Segn se muestra en la figura siguiente este formulario consta de los
siguientes componentes:

59

Un control Memo en cuya propiedad Lines, escribiremos el contenido


que se quiere mostrar al usuario
Un control Button de nombre Aceptar.

Finalmente, escriba el siguiente cdigo:


unit Ayuda;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm2 = class(TForm)
Memo1: TMemo;
Aceptar: TButton;
procedure AceptarClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
procedure TForm2.AceptarClick(Sender: TObject);
begin
Close;
end;
60

end.

61

S-ar putea să vă placă și