You are on page 1of 83

Delphi 7

Fermí Vilà

79

III . - Programación Visual

a) El “IDE” del Delphi - Menú File – New - Application - Observa la pantalla inicial:

Todo este conjunto de elementos determina lo que se llama un “Entorno integrado de desarrollo” o IDE (Integrated Development Environment), en nuestro caso se trata del IDE del Delphi. Delphi combina la facilidad en el uso de su IDE con la velocidad y potencia de un compilador optimizado de 32 bits y las posibilidades de la manipulación de datos proporcionadas por su potente motor de bases de datos.

b) Programar en Delphi - Menú File – New - Application - Clic en el icono Edit (Solapa: Standard) de la paleta de componentes:

Delphi 7

Fermí Vilà

80

- “Marca” un pequeño recuadro en el formulario. - Clic en el icono “Button” (Solapa: Standard) de la paleta de componentes. - Clic en el punto del formulario donde quieres insertar el botón. - Inserta otro botón, es decir: • Clic en el icono “Button” (Standard). • Clic en un punto del formulario - Mueve y cambia el tamaño de los controles de forma que te quede aproximadamente de la siguiente manera:

Vamos a establecer las propiedades … - Selecciona el formulario, es decir haz clic en cualquier punto del interior del “Form1”. Observa que en la ventana Object Inspector aparecen las propiedades del formulario. - Cambia las siguientes propiedades: • Caption: Saludo • Color: clWhite - Selecciona el “Button1” (automáticamente en el “Object Inspector” aparecen las propiedades del “button1”) y cambia las propiedades: • Caption: Saludo • Name: butSaludo • Clic en el “+” de Font • Clic en el “+” de Style • fsBold: True - Cambia las siguientes propiedades del “button2”: • Caption: Borrar • Name: butBorrar • Font(+): Style(+): fsBold: True - Cambia las siguientes propiedades del “Edit1”: • Font(+): Style(+): fsItalic: True • Text: (borra el texto ‘Edit1’, que aparece por defecto) Vamos a escribir el código: - Selecciona el botón [Saludo]. En el “Object Inspector” haz clic en la pestaña “Events”. Sitúate en el campo OnClick y haz un doble clic en su interior.

Delphi 7

Fermí Vilà

81

Acabamos de acceder al procedimiento de evento: OnClick (al hacer clic) del botón [Saludo], en efecto, observa su nombre: procedure TForm1.butSaludoClick(Sender: TObjet); Escribe entre las líneas “begin” y “end”: Edit1.Text:= ‘Hola Mundo’; - Sal del “Editor de Código”, es decir vuelve al formulario. Basta que hagas clic en el borde superior: clic

- Accede al procedimiento “OnClick” del botón [Borrar] y escribe: procedure TForm1.butBorrarClick(Sender: TObject); begin Edit1.Text:=''; end; - Graba el módulo como Unit068.pas y el proyecto como Project068.dpr, en TuCarpeta - Ejecuta el programa, es decir: • Clic en el icono “Run”: • Clic en [Saludo] Si todo funciona correctamente aparecerá en el cuadro de texto (Edit1), las palabras “Hola Mundo”; ya que en el procedimiento correspondiente hemos escrito:: Edit1.Text := ‘Hola Mundo’; Es decir: “Al hacer clic en el botón [Saludo] (butSaludoClick), el valor de la propiedad Text del Edit1 es ‘Hola Mundo’ (Edit1.Text : = ‘Hola Mundo’;)” Clic en [Borrar] Si todo funciona correctamente, el contenido del cuadro de texto desaparece; ya que en el procedimiento de evento correspondiente hemos escrito: Edit1.Text := ‘’; Es decir: el contenido (propiedad “Text”) del cuadro de texto es igual a “nada”.

- Para salir del programa “Saludo”, haz clic en la “X” del extremo superior derecho de la ventana “Saludo”. En definitiva, programar en Delphi significa: 1º.- Insertar en el formulario (o formularios) controles de la paleta de componentes (de sus diversas pestañas).

Delphi 7

Fermí Vilà

82

2º.- Establecer o cambiar las propiedades de los diversos componentes insertados utilizando el “Inspector de Objetos”. 3º.- Escribimos el código en el módulo o “unit” del formulario, utilizando el lenguaje de programación ObjectPascal. Uno de los aspectos más importantes en el código, será el acceso a las propiedades de un control: NombreComponente.Propiedad := nuevo valor; En nuestro ejemplo: Edit1.Text := ‘Hola Mundo’; Observa el uso del llamado “operador punto”.

c) Ficheros que genera un programa Localiza los ficheros generados en la aplicación anterior: - Cierra el “Delphi” - Ejecuta el “Explorador de Windows” y sitúate en TuCarpeta - Observa: Project068.cfg Projecto68.dof Project068.dpr Project068.exe Project068.res Unit068.dcu Unit068.dfm Unit068.pas

- El programa ejecutable: Project068.exe Desde el explorador de windows, ejecuta el Project068.exe (clic-clic). Si todo funciona correctamente se ejecutará nuestro programa. De hecho es el único fichero que necesitamos, si borráramos los otros ficheros, funcionaria exactamente igual, y si instalamos el fichero Project068.exe en un ordenador sin “Delphi”, por supuesto funcionaria igual. - El archivo de proyecto: Project068.dpr Ejecuta el “Delphi” y abre el Project068.dpr Delphi relaciona todos los elementos de un proyecto generando un módulo de código, que se almacena en un archivo con extensión DPR. Es a éste al que se llama archivo de proyecto. Para visualizarlo basta que hagas: Menú Project - View Source program Project068; uses Forms, Unit068 in 'Unit068.pas' {Form1}; {$R *.res} begin Application.Initialize; Application.CreateForm(TForm1, Form1);

Unit068. Los tres ficheros: Project068.pas Son también ficheros de texto. podríamos editarlo desde fuera del Delphi. Como ya hemos visto la finalidad de este fichero es contener el código correspondiente al “form”. valores de sus propiedades y los enlaces de los eventos con el código.Archivo de formulario: Unit068.dpr. se almacenan en un fichero de nombre el mismo que el módulo de código del “form” y extensión DFM. Como es un fichero de texto. se añade automáticamente un nuevo módulo de código.butSaludoClick() y TForm1.Módulos de código: Unit068.exe es el único imprescindible. No hay ningún problema para visualizar este fichero. Unit068. por ejemplo. La ejecución del programa se lleva a cabo en el momento en que se llama al método Run() • • . Cada formulario tiene asociado un módulo de código o unidad (“unit” en inglés).butBorrarClick() Cada vez que se añade un nuevo formulario.pas. observaremos que se generan otros ficheros: si corregimos algún procedimiento y/o si cambiamos algo del formulario. end. Una referencia a cada uno de los archivos que almacenan los módulos de código.dfm son los ficheros que necesitamos para posibles modificaciones futuras. El resto de ficheros se generan al ejecutar el programa desde el Delphi y en definitiva el ejecutable Project068. sino disponemos del entorno Delphi En nuestro trabajo “normal” con el Delphi. . en nuestro ejemplo: procedure TForm1.dfm Para cada formulario. los controles (componentes).Delphi 7 Fermí Vilà 83 Application.Run. Los ficheros “antiguos” se guardan con la extensión ~pas (si hemos cambiado alguna cosa del código) y/o ~dfm (si hemos cambiado alguna cosa del formulario). • • Su estructura básicamente es: program NombreDelPrograma. con el Bloc de Notas del Windows. tras la cláusula “Uses” Una llamada al método CreateForm() por cada formulario (form) a crear. ya que también (igual que los anteriores) es de texto. .

Segundo: Establecer las propiedades • Form1 Caption: Saludo Personalizado • Label1 Caption: Escribe tu nombre: • Edit1 Text: (borra el texto “Edit1”) • Edit2 Text: (borra el texto “Edit2”) • Button1 Caption: Saludo • Button2 Caption: Borrar • Button3 Caption: Salir .Text:=''. . begin Edit2.Text:='Hola '+Edit1.Button1Click(Sender: TObject).Primero: Insertar controles (Observa que utilizo indistintamente la palabra control y componente). Edit2.Tercero: Escribir el código • Evento: OnClick del Button1 procedure TForm1.Button2Click(Sender: TObject).Menú File – New .Application . Inserta: Para la etiqueta “Label1” debes utilizar el icono “Label” (Standard): .Text:=''. end. • Evento: OnClick del Button2 procedure TForm1.Delphi 7 Fermí Vilà 84 d) Propiedades y Métodos . begin Edit1.Text.

• Evento: OnClick del Button3 procedure TForm1. Métodos (o funciones): que determinan acciones del usuario o del sistema. al igual que las propiedades y los métodos.Delphi 7 Fermí Vilà 85 Edit1. no son más que funciones del objeto. La forma de acceder a una propiedad o a un método es la misma: NombreObjeto. end. eventos y métodos. end. como primer parámetro. Por ejemplo “SetFocus” es un método del componente “Edit” (y de otros componentes).SetFocus.Graba el programa como Unit069. cuya “acción” consiste en colocar el cursor (el foco del programa) en el componente. o desde “tiempo de ejecución” (cuando escribimos una sentencia que modifica la propiedad en un procedimiento determinado).Button3Click(Sender: TObject). variable que podemos usar para acceder a sus propiedades. La diferencia entre una propiedad y un evento es que. . Esta variable es una referencia al objeto que ha generado el evento.dpr y ejecútalo. begin Close.Propiedades y Métodos • • Un control. son miembros de un componente. . . un evento contiene referencias a procedimientos. Todos los procedimientos asociados a eventos reciben. etc. un objeto Tobject llamado Sender. nombre.Estudio del Project069: • Close: es la sentencia equivalente a cerrar el formulario • Edit1SetFocus: el cursor se colocará (el foco) en el componente “Edit1” .NombrePropiedadOMétodo Otra diferencia fundamental entre “propiedad” y “método” es que podemos acceder a una propiedad desde “tiempo de diseño” (cuando establecemos valores en el “Object Inspector”). componente o objeto (llámale como quieras) consta de: Propiedades (o atributos): que determinan las características del objeto: color.pas – Project069. e) Eventos Los eventos. En cambio sólo podemos acceder a un método en tiempo de ejecución.

Selecciona el “Button1” • “Inspector de Objetos”.FormClick() .Caption:='Acabas de Redimensionar el formulario'. .Selecciona el “Form1” • Accede al “Inspector de Objetos”. accedemos automáticamente al procedimiento de evento: TForm1. . procedimiento de evento: TForm1.Application . end.Selecciona el “Form1” • “Inspector de Objetos”. . pero no cambies de momento su propiedad “Caption”.Delphi 7 Fermí Vilà 86 Hasta ahora hemos utilizado un único evento y del componente Button.Escribe el siguiente procedimiento de evento: procedure TForm1. begin Button1. Shift: TShiftState.Caption:='Acabas de clicar el formulario'. pestaña Events • Haz un doble clic en el campo correspondiente a OnClick • Si todo funciona correctamente nos hemos colocado en el módulo del formulario. begin . X. pestaña “Events” • Clic-clic en el evento OnResize • Escribe: procedure TForm1.Escribe: procedure TForm1.Button1 Click (Sender:Tobject). que se encuentra en el área implementation de la ventana de código correspondiente al formulario. concretamente el evento OnClick (al hacer clic). end. hazlo relativamente grande para que quepa la frase: “Acabas de clicar el formulario”.Menú File – New . pestaña “Events” • Clic-clic en el evento OnMouseMove • Escribe: procedure TForm1. Al hacer un doble clic en su evento onClick (Object Inspector – pestaña Events).Button1MouseMove(Sender: TObject.Inserta un control Button en el formulario.FormDblClick(Sender: TObject). Y: Integer). begin Button1. begin ShowMessage('Acabas de pasar el ratón por encima del botón').FormResize(Sender: TObject). Vamos a trabajar con otros eventos … . .FormClick(Sender: TObject). end.

.FormClick) • Al mover el ratón por el botón (TForm1.pas – Project070.z) con x. g) Teclas de acceso rápido . Para ello basta que escribas el siguiente procedimiento de evento: procedure TForm1. . . Edit1.z números entre 0 y 255. verde y azul del color correspondiente. . “y” el componente verde (green) y “z” el componente azul (blue). podemos acceder al color de un objeto. '+ 'Azul= '+IntToStr(z).y. Form1.y.Graba el programa como Unit071.Inserta un “Edit” en el formulario Queremos conseguir lo siguiente: al hacer clic en el formulario.Button1MouseMove) • Al cambiar el tamaño del formulario (TForm1. utilizando la función RGB( .pas – Project071.FormDblClick) f) La función RGB( .dpr y pruébalo.Graba el programa como Unit070.Color:=RGB(x. siendo “x” el componente rojo (red).Menú File – New . ) y en el “Edit” aparece el grado de rojo.FormClick(Sender: TObject).dpr y ejecútalo.Delphi 7 Fermí Vilà 87 Form1. x:=Random(255).z:=Random(255).FormResize) • Al hacer doble clic en el formulario (TForm1. var x.z:integer. begin Randomize.z). ) Utilizando la función incorporada RGB(x. '+ 'Verde= '+IntToStr(y)+' . end.Caption:='Doble clic en el formulario'. éste cambia de color aleatoriamente.y. end.Application .y:=Random(255). es decir prueba los eventos: • Al hacer clic en el formulario (TForm1.Text:='Rojo= '+IntToStr(x)+' . Es decir. . deberás acceder al evento OnDblClick del formulario.y.

Y si en tiempo de ejecución pulsamos: [Alt][t].Text<>'PEPITO' then begin ShowMessage('No es correcto').Escribe los siguientes procedimientos de evento: procedure TForm1. end else ShowMessage('Lo has acertado').Delphi 7 Fermí Vilà 88 Si escribimos el ampersand (&) en la propiedad “Caption” de un “Button”.Button1Click(Sender: TObject).Application .Menú File – New . es equivalente a hacer clic en el botón.Close. Form1. . por ejemplo: &Tecla. . end. begin if Edit1.Inserta: .Propiedades: • Form1 • • Label1 Caption: Contraseña Caption: Introduce la clave secreta Alignment: taCenter Edit1 Text: (borra el texto que aparece por defecto) MaxLength: 6 PasswordChar: * Button1 Caption: &Aceptar Button2 Caption: &Salir • • . en el botón correspondiente aparecerá la “T” subrayada.

FormShow(Sender: TObject). en “tiempo de diseño”. • PasswordChar: * De esta forma conseguimos que el control “Edit” vaya representando cada uno de los caracteres que escribimos como un “*” • Las teclas de acceso rápido.Application .Graba el programa como Unit072. • MaxLength: 6 Podemos escribir un máximo de 6 caracteres en el control “Edit” correspondiente.Delphi 7 Fermí Vilà 89 procedure TForm1. Por defecto.Caption:='Cambia Color'. indicando de esta forma que no hay límite establecido. es decir: En tiempo de diseño: &letra = letra subrayada En tiempo de ejecución: [Alt][letra] No son exclusivas del “button” como iremos viendo. Button1.Menú File – New . begin Form1.dpr y ejecútalo. utilizando el evento OnShow (al mostrar) del formulario. respetando el ancho que asignemos a la etiqueta.pas – Project072.Inserta un “label” y un “button” .Estudio del Project072: • Supongo que está claro que la contraseña es “PEPITO” (en mayúsculas) • Alignment = taCenter Centra el texto en el recuadro de la etiqueta. Prueba el funcionamiento de los botones: utilizando el ratón y también por pulsación de las teclas: [Alt][A] y [Alt][S] . La propiedad “MaxLength” contiene por defecto el número 0.Caption:='El Evento OnShow'. Si queremos que el texto se divida automáticamente en varias líneas. podemos establecerlas en “tiempo de ejecución”. . el control “Edit” no pone ningún límite a la cantidad de texto.Con el formulario seleccionado • Inspector de Objetos – pestaña “Events” • Clic-clic en OnShow .Close. . end.Button2Click(Sender: TObject). deberemos cambiar el valor de la propiedad wordWrap a true. las otras posibilidades son: taLeftJustify (justificado a la izquierda) y taRightJustify (justificado a la derecha). begin Form1.Escribe: procedure TForm1. . h) Evento: OnShow En lugar de establecer las propiedades iniciales de los controles.

.Color:=clRed.Color:=x.Inserta dos “Edits” y un “Button” .Graba el programa como Unit073.Application . begin x:=Label1.Corrige la propiedad Caption del “Button”.Edit1KeyPress(Sender: TObject. begin Randomize. Evento: OnClick del “Button1” procedure TForm1.Font. por &Button .Código del “OnClick” del “Button1”: procedure TForm1. end. • .Button1Click(Sender: TObject).Color. var x:integer. Label1. end.Menú File – New . .'9'.Color:=RGB(Random(255). end. Label1.Random(255)).Size:=25.Delphi 7 Fermí Vilà 90 With Label1 do begin Caption:='Intercambiar colores'. begin if not (Key In ['0'.pas – Project073. end. end.Color:=Label1. Font.Font. Color:=clLime.#8]) then Key:=#0. Form1.Color.Escribe los siguientes procedimientos: • Evento: OnKeyPress del “Edit1” procedure TForm1. .dpr y ejecútalo i) Evento: OnKeyPress Este evento nos permite detectar la tecla que pulsamos.Button1Click(Sender: TObject). Font..Random(255). var Key: Char).

var Key: Char).Graba el programa como Unit074. . end. el primero se llama botón por defecto. entonces anula el carácter (Key:=#0) • Al pulsar [Return] (tecla de código 13) en el “Edit2”. el botón correspondiente será un botón de cancelación . begin if Key=#13 then begin Key:=#0. ya que en el procedimiento correspondiente le estamos diciendo que si la tecla pulsada no es del 0 al 9 ni la tecla de borrado (#8).Application .Vuelve a grabar el programa con el mismo nombre y pruébalo. var Key: Char). end. Si quieres evitar el “Beep” al pulsar [Return]. j) Botón por defecto y de cancelación Hay dos tipos especiales de botones: los botones que se activan al pulsar [Return] y los que se activan al pulsar [Esc]. end.Edit2KeyPress(Sender: TObject.pas – Project074. .Menú File – New . begin if Key=#13 then Button1Click(Sender).Inserta en el formulario un “Edit” y tres “Buttons”.Edit2KeyPress(Sender: TObject.Estudio del Project074 • En el “Edit1” sólo podemos escribir un número entero.dpr y ejecútalo.Propiedades: • Button1 • Button2 Caption: &Normal . Si la propiedad Default = True. . el segundo botón de cancelación. Button1Click(Sender). se ejecuta el procedure “Button1Click(Sender)”. el botón correspondiente será un botón por defecto Si la propiedad Cancel = True.Delphi 7 Fermí Vilà 91 • Evento: OnKeyPress del “Edit2” procedure TForm1. deberías modificar el procedimiento Edit2KeyPress de la siguiente forma: procedure TForm1. .

end.dpr y ejecútalo: • Haciendo clic en los botones • Pulsando [Alt] con [N].Font.Button2Click(Sender: TObject). end. end.Menú File – New . begin Label1.Name:='Arial'.Escribe los procedimientos: procedure TForm1.pas – Project075.Application .Inserta: .Caption). [D] o [C] • Pulsando [Esc] o [Return] k) Tipos y Estilos de letra .Button1Click(Sender: TObject).Button1Click(Sender: TObject).Código: procedure TForm1. procedure TForm1.Graba el programa como Unit075. begin ShowMessage(Button2.Delphi 7 Fermí Vilà 92 Caption: &Defecto Default: True • Button3 Caption: &Cancelación Cancel: True . begin ShowMessage(Button3.Button3Click(Sender: TObject).Caption). . . procedure TForm1. begin ShowMessage(Button1.Caption).

end.Size+4.Graba el programa como Unit076. procedure TForm1.Button2Click(Sender: TObject). procedure TForm1.Font. procedure TForm1.Style:=[fsStrikeOut].dpr y ejecútalo. procedure TForm1.Font.Button8Click(Sender: TObject). end. begin Label1. begin Label1. .Button4Click(Sender: TObject).Font.Font.Button6Click(Sender: TObject). begin Label1.Font.Style:=[fsItalic].Size-4.Font.Font.Style:=[fsBold]. end.Button5Click(Sender: TObject).Size:=Label1.Button3Click(Sender: TObject). end. procedure TForm1. end.Name:='Courier'. procedure TForm1. procedure TForm1. end.Button7Click(Sender: TObject).pas – Project076.Font. end. l) Lotería .Style:=[fsUnderline].Size:=Label1. begin Label1.Delphi 7 Fermí Vilà 93 end.Font.Crea un nuevo proyecto con los siguientes objetos y propiedades: • Form1 Caption: LOTERÍA • Label1 Caption: Escribe un número • Edit1 Text: (borra el texto que aparece por defecto) . begin Label1. begin Label1. begin Label1.

Antes de continuar.. En definitiva. loteria[2]. Es decir: • Sitúate en el “Unit” del formulario y en el apartado public. es simplemente para comprobar el funcionamiento del programa.Vamos a declarar en primer lugar. loteria[6].FormShow(Sender: TObject). Trabajar.Accede al evento OnShow de nuestro formulario y escribe el siguiente procedimiento de evento: procedure TForm1. . begin . var i.j:integer. coloca en el formulario seis “Edits”. nuestros números de la suerte quedarán representados por loteria[1]. En definitiva. donde aparecerán los seis números del sorteo. escribe: Loteria: array[1.6] of integer. NumeroSorteado:integer. una variable pública donde “guardaremos” los 6 números del sorteo. que funciona de la siguiente forma: el programa sortea 6 números del 1 al 49 y nosotros hemos de adivinar uno de estos números. ….Size: 24 Pretendemos simular un juego de lotería. de momento tenemos: .HaSalido:boolean.Delphi 7 Fermí Vilà 94 • • • • Edit2 Text: (borra el texto) Enabled: False (de esta forma el usuario no podrá escribir en el cuadro de texto) Label2 Caption: Ver el elemento número: Edit3 Text: (borra el texto) Edit4 Text: (borra el texto) Enabled: False Font. al final los borraremos.

• Trabajar: controla el ciclo “while … do” • Si el valor de “NumeroSorteado” es igual a algún valor de lotería (de los que hemos “tirado” hasta el momento). nos interesa que aparezca en el Edit4 el número correspondiente de la lotería … Accede al evento OnChange del Edit3 y escribe el siguiente procedimiento: . entonces “HaSalido:= True” y “NumeroSorteado” vuelve a tomar un valor aleatorio entre 1 y 49 • Si el valor de “NumeroSorteado” no ha salido. Edit9. Edit7. aparecen los 6 valores de la lotería • Ejecuta varias veces el programa para comprobar que los seis valores de la lotería son distintos. Edit6.Text:=IntToStr(loteria[4]).Text:=IntToStr(loteria[2]). representa el número aleatorio de 1 hasta 49 • HaSalido: controla si el número sorteado ya ha salido. end. Edit8. end. el valor de lotería es igual a dicho número y salimos del bucle “while … do”. ya que damos a “Trabajar” el valor False.Text:=IntToStr(loteria[6]). end.Text:=IntToStr(loteria[3]). • Por último en los seis últimos cuadros de texto.Delphi 7 Fermí Vilà 95 for i:=1 to 6 do loteria[i]:=0.Al escribir un número del 1 al 6 en el cuadro de texto Edit3. Trabajar:=False.Text:=IntToStr(loteria[5]). Edit5. for i:=1 to 6 do begin Trabajar:=True. HaSalido:=False. Edit10. . for j:=1 to i do if NumeroSorteado=loteria[j] then HaSalido:=True. While Trabajar do begin NumeroSorteado:=Random(49)+1. if not HaSalido then begin loteria[i]:=NumeroSorteado.Observa: • NumeroSorteado. end. Randomize.Text:=IntToStr(loteria[1]). .

for x:=1 to 6 do if loteria[x]=StrToInt(Edit1. por lo tanto a partir de ahora para acceder al “procedure” del evento OnChange de un “Edit”.Edit3Change(Sender: TObject).Text:=IntToStr(elemento).Text) else exit. bastará hacer clic-clic en dicho “Edit”. adivinado:boolean. La importancia del “evento por defecto”.Supongo que está claro el evento OnChange del Edit3: “al cambiar el contenido del Edit3” se ejecutará el programa procedure TForm1.Accede al evento OnKeyDown del Edit1 y escribe: procedure TForm1. end.Prueba lo que hemos hecho hasta ahora. Edit4.Edit1KeyDown(Sender: TObject. var x. var Key: Word.Button1Click(). en el cuadro de texto Edit1 y pulsar [Return]. if (0<x) and (x<7) then begin elemento:=loteria[x].Text) then adivinado:=True. begin if Edit3. podríamos pensar que es el evento más usual del control. aparezca en el cuadro de texto Edit2 un mensaje indicando si lo hemos adivinado o no … .elemento:integer. y en el caso de un “Edit” es OnChange. if adivinado then . Recuerda que al principio accedíamos al procedure TForm1. Por ejemplo: en un “Button” su evento por defecto es OnClick. es decir: ejecuta el programa y escribe un número entre 1 y 6 en el Edit3 . está en que accedemos directamente a su “procedure” sin más que hacer un doble clic en el control. Shift: TShiftState). Para acabar nuestro programa de lotería: nos interesa que al escribir un número del 1 al 49.Delphi 7 Fermí Vilà 96 procedure TForm1.Text<>'' then x:=StrToInt(Edit3. begin if Key=13 then begin adivinado:=False. end.Edit3Change() Cada control tiene un “evento por defecto”. . haciendo un doble clic en el “Button1”. var x:integer.

acertaste' else Edit2.Tres etiquetas de propiedades: • Caption: BASE.Accede a las propiedades del “Form1” y cambia las siguientes propiedades: • Caption: Triángulo • Name: AREA1 Queremos conseguir: El proceso a seguir es el siguiente: .Graba el programa como Unit077.dpr y pruébalo.pas – Project077.Text:='Muy Bien. pruébalo otra vez'. fsItalic = True) . end. fsItalic = True) • Color: clYellow .Application . ALTURA. ÁREA • Font Size: 12 Style: (fsBold.Delphi 7 Fermí Vilà 97 Edit2. .Text:='Lo siento. m) Proyecto con dos formularios .Propiedades del Label1 (título): • Caption: Área de un Triángulo • Font Color: clRed Size: 18 Style: (fsBold.Menú File – New . end.

begin b:=StrToFloat(InputBox('Triángulo'.Text:=FloatToStr(h). Edit2. Edit3.FormShow(Sender: TObject).Text:=''. end.SetFocus. Círculo • Font. Edit3. Para imponer las mismas propiedades a varios controles a la vez.'')). Edit1.Text:=FloatToStr(b).s:real.Tres botones de propiedades: • Caption: Calcular. Edit2. Edit2.Text:=''.'BASE'. .pas • El proyecto como Project078.h. Borrar.Button2Click(Sender: TObject).Style: (fsBold = True) . begin Edit1.Tres cuadros de texto de propiedades: • Font Color: clRed Size: 10 Style: (fsBold = True) • ReadOnly: True de esta forma impedimos la edición del “edit”.Button1Click(Sender: TObject). Evento OnShow del Form1: procedure TAREA1. var b. • . • Botón [Borrar]: procedure TAREA1. Button1.Text:=''. basta que los selecciones (manteniendo la tecla de mayúsculas pulsada o marcando un recuadro con el ratón que los contenga) y cambies las propiedades. s:=b*h/2. h:=StrToFloat(InputBox('Triángulo'.'ALTURA'.Text:=FloatToStr(s).dpr .'')).Escribe los siguientes procedimientos de evento: • Botón [Calcular]: procedure TAREA1.Graba el programa: • El “Unit” del formulario AREA1: Unit078a. end.Delphi 7 Fermí Vilà 98 .Text:=''.Text:=''. begin Edit1.

var r. .Edit1Change(Sender: TObject).Delphi 7 Fermí Vilà 99 Edit3.SetFocus.l:real. • Menú File Save As … File Name: Unit078b.Vamos a grabar el nuevo formulario: • Con el formulario “Círculo” seleccionado.pas .Escribe el siguiente código (en el “Unit078b”): procedure TAREA2. Button1. basta que lo selecciones y manteniendo pulsada la tecla [Ctrl]. haz lo siguiente: Menú File New Form . . . end.Vamos a insertar un nuevo formulario a nuestro proyecto Project078.Graba de nuevo el programa como Unit078a / Project078 y prueba lo que hemos hecho hasta ahora.Text:=''. aproximadamente lo siguiente: Si quieres mover un control de forma más “fina” que lo hace el ratón.Consigue en el nuevo formulario. muévelo utilizando las teclas del cursor.a. begin .Cambia las siguientes propiedades del nuevo formulario: • Caption: Círculo • Name: AREA2 .

Para ello basta hacer: Menú File Save All . como es el único.Text:=''. end else begin Edit2.Text<>'' then begin r:=StrToFloat(Edit1.Si ejecutas el programa verás que se ejecuta el formulario AREA1: Triángulo. . [Ok] . por lo tanto: • Selecciona el AREA2: Cículo • Menú File Use Unit… Unit078a [Ok] .Text:=FloatToStr(a). El problema que nos queda por resolver es conectar los dos formularios … . Edit2. Edit3.Text:=FloatToStr(l). Edit3.Delphi 7 Fermí Vilà 100 if Edit1.Desde el formulario “AREA2: Círculo” nos interesa ir al formulario “AREA1” (botón [Volver]).Graba todo lo que hemos hecho hasta ahora con el mismo nombre: Unit078a. end. a:=PI*r*r.Text). ya aparece seleccionado.Text:=''.Desde el formulario “AREA1: Triángulo” nos interesa ir al formulario “AREA2: Círculo” (botón [Círculo]). esto es así porque ha sido el primero y el proyecto toma como formulario principal el primero.Vamos por último a programar los botones que nos permitirán pasar de un formulario a otro: . Haz lo siguiente: • Selecciona el AREA1: basta que muevas las diversas ventanas que tienes en la pantalla. Project078. Unit078b. l:=2*PI*r. si no lo consigues haz: Menú View Forms… Clic en AREA1 • Menú File Use Unit … Selecciona el formulario correspondiente (Unit078b). end.

Show. vamos a ver cómo … . esto es.Hide. end. AREA1. • • • . es decir el AREA1: Triángulo.Button1Click(Sender: TObject). AREA2.Inserta en el Form2: . Selecciona el formulario AREA2: Círculo Clic-clic en el botón [Volver] Escribe: procedure TAREA2.Menú File – New .Delphi 7 Fermí Vilà 101 • • • Selecciona el formulario AREA1: Triángulo Clic-clic en el botón [Círculo] Escribe: procedure TAREA1. Ten en cuenta que la forma correcta de salir del programa es “cerrar” el formulario principal. el que se ejecuta al ejecutar el proyecto es el primer formulario.Button3Click(Sender: TObject).Graba de nuevo el programa con el mismo nombre y ejecútalo. A veces nos interesará cambiar el formulario principal. begin AREA1.Menú File – New . que en un proyecto con varios formularios.Inserta: .Form .Application .Show. El formulario principal. n) Formulario Principal Ya hemos visto en el apartado anterior.Hide. end. begin AREA2.

Graba lo que hemos hecho hasta ahora de la siguiente forma: • Selecciona el Form3 y Menú File Save As… File Name: Unit079a.Delphi 7 Fermí Vilà 102 . el formulario principal es el Form1.pas • Selecciona el Form1 y Menú File Save As… File Name: Unit079b.Inserta en el Form3: .Menú File – New . selecciona Form3 [Ok] .En estos momentos. haz lo siguiente: Menú Project Options … Pestaña: Forms En el cuadro combinado MainForm.Form .pas • Selecciona el Form2 y . pero nos interesa que sea el Form3.

Form2. begin Close. end.Button2Click(Sender: TObject). begin Form3. end. begin Form1.Button1Click(Sender: TObject). procedure TForm1.Show. Form3. • Selecciona el Form2 y escribe: procedure TForm2.pas Y por último: Menú File Save Project As … File Name: Project079.Hide. end. • Selecciona el Form1 y escribe: procedure TForm1. procedure TForm3.Button2Click(Sender: TObject). end.Random(255 )).FormActivate(Sender: TObject).Button1Click(Sender: TObject).Color:=RGB(Random(255). Form1. begin Form3. end. procedure TForm3. begin Form1.Hide.Vamos a escribir el código: • Selecciona el Form3 y escribe los procedimientos: procedure TForm3.Show.Button3Click(Sender: TObject).Delphi 7 Fermí Vilà 103 • Menú File Save As… File Name: Unit079c.Random(255).Hide. // Atención!: Evento 'OnActivate' del Form2 .dpr .Show.

random(255).Color:=RGB(random(255). end. es decir componentes con los que es posible interactuar en “tiempo de ejecución”.Delphi 7 Fermí Vilà 104 begin Edit1. .Color:=RGB(random(255).random(255)). Y por último vamos a establecer las “conexiones” estre los formularios: .Form1 [Volver] – Form3 Por lo tanto: • Selecciona el Form1 • Menú File Use Unit… Unit079a .random(255)).Form2 [Volver] – Form3 Por lo tanto: • Selecciona el Form2 • Menú File Use Unit… Unit079a . begin Form2.Show.random(255)). o) El componente “Timer” Todos los componentes que conocemos por ahora son componentes de tipo interactivo.Hide. Edit3.Form3 (formulario Principal) [Color Total] – Form1 [Colorines] – Form2 Por lo tanto: • Selecciona el Form3 • Menú File Use Unit… Unit079b Unit079c .random(255).Button1Click(Sender: TObject). Form3.Graba los ficheros del programa con los mismos nombres y pruébalo.random(255).Color:=RGB(random(255). Edit2. end. procedure TForm2.

Application . accede a sus “Events” (Inspector de Objetos) y clic-clic en el evento OnTimer (el único posible).Estudio del Project080: • Now: Determina la hora del sistema • TimeToStr(): función de conversión de un dato tipo “time” a tipo “string” • El procedimiento TForm1. es decir: • Accede a la paleta de componentes System • Clic en el icono Timer: • Clic en cualquier punto del formulario. Size = 24 . . porque el valor de la propiedad Interval del Timer1 es 1000 milisegundos. por esta razón aparece en el label el cambio de segundos: cada segundo se ejecuta la sentencia: Label1. que por defecto es 1000 milisegundos. . La frecuencia con la que el componente Timer generará el evento OnTimer dependerá del valor de su propiedad Interval. . Al igual que otros componentes.Delphi 7 Fermí Vilà 105 Otro tipo de componente es el Timer (paleta System).Con el “timer” que acabamos de insertar (Timer1) seleccionado.Inserta un “timer”.Menú File – New .Inserta un “label” con la propiedad Font. begin Label1. ya que se trata de un componente no visual. . end.Graba el programa como Unit080. cuya única finalidad es generar un evento a intervalos regulares. no importa el lugar ni el tamaño. p) La propiedad “WindowState” . evitando de esta forma la generación del evento.dpr y ejecútalo.Timer1Timer(Sender: TObject). . éste también cuenta con la propiedad Enabled.Caption := TimeToStr(Now).Timer1Timer() se ejecuta cada segundo. que nos permite desactivar el control. es decir.Escribe: procedure TForm1. no se verá en tiempo de ejcución.pas – Project080.Caption:=TimeToStr(Now).

Delphi 7

Fermí Vilà

106

La propiedad WindowState del formulario, determina el estado de éste. Por defecto: “WindowState = wsNormal”, esto es, se presenta con el tamaño que hemos dado al formulario en tiempo de diseño. Los otros valores que puede tomar la propiedad “WindowState” son: wsMaximized: maximizada y wsMinimized: ventana minimizada. - Para hacer el siguiente ejercicio, necesitamos el fichero gráfico: de nombre Clock.ico - Menú File – New - Application - Inserta 4 etiquetas y un control temporizador (Timer) con las siguientes propiedades: • Form1 Name: frmReloj Caption: Reloj Digital Icon: Clock.ico WindowState: wsMaximized • Label1 Caption: Hora: • • Label2 Caption: Fecha: Label3 Name: lblHora Color: clBlack Font.Size: 14 Font.Style: (fsBold = True) Font.Color: clYellow Label4 Name: lblFecha Color: clBlack Font.Size: 14 Font.Style: (fsBold=True) Font.Color: clGreen

- Accede al procedimiento OnTimer del Timer1, y escribe: procedure TfrmReloj.Timer1Timer(Sender: TObject); begin if frmReloj.WindowState=wsNormal then frmReloj.Caption:='Reloj: ' + DateTimeToStr(Now) else begin frmReloj.Caption:='Reloj'; lblFecha.Caption:=DateToStr(Now); lblHora.Caption:=TimeToStr(Now); end; end;

Delphi 7

Fermí Vilà

107

- Graba el programa como Unit081.pas – Project081.dpr y ejecútalo: “restaura” la ventana y “maximízala”. - Estudio del Project081: • Now: en realidad contiene la hora y también la fecha del sistema. • DateTimeToStr(Now): aparece la fecha y hora del sistema • DateToStr(Now): aparece la fecha del sistema. • TimeToStr(Now): aparece la hora del sistema.

q) El componente “Image” Vamos a incluir dibujitos a nuestros proyectos. Comenzaremos con dibujos nuestros, es decir que hemos de hacer … - Ejecuta el “Paint” del Windows, es decir: Clic en [Inicio] Programas Accesorios Clic en Paint - Menú Imagen Atributos … Píxeles Ancho: 360 Alto: 240 - Haz aproximadamente el siguiente dibujo: Ten en cuenta que el fondo es verde, la palabra “Semáforo” debe estar en rojo. El fondo del semáforo es blanco. La “luz” superior es roja, la media “ámbar” y la inferior “verde”.

- Graba el dibujo en TuCarpeta con el nombre Sematodo.bmp - Selecciona la luz roja. Es decir: • Clic en el icono “Selección” del Paint (2º icono de la 1ª fila: rectángulo punteado). • “Marca” un cuadrado que abarque “la luz roja” del semáforo. - Menú Edición - Copiar

Delphi 7

Fermí Vilà

108

- Menú Archivo - Nuevo - Menú Edición - Pegar - Redimensiona el área de dibujo de forma que abarque sólo un cuadrado que contenga el círculo rojo. - Graba el dibujo que tienes en pantalla (luz roja), en TuCarpeta con el nombre Rojo.bmp - Recupera el fichero Sematodo.bmp - Selecciona la “luz ámbar” y grábala con el nombre Ambar.bmp en TuCarpeta. Es decir: • Con el dibujo Sematodo a la vista • Clic en el icono Selección • “Marca” un cuadrado que abarque la luz ámbar del semáforo. • Menú Edición – Copìar • Menú Archivo – Nuevo • Menú Edición – Pegar • Redimensiona el área de dibujo de forma que abarque sólo un cuadrado blanco que contiene el círculo ámbar. • Graba el dibujo que tienes en pantalla (luz ámbar), en TuCarpeta con el nombre Ambar.bmp • Recupera el dibujo Sematodo. - Repite el proceso anterior para grabar la “luz verde” en TuCarpeta con el nombre Verde.bmp - Por último, necesitamos el semáforo sin luces: • Con el Sematodo.bmp a la vista. • “Selecciona” el color rojo y pulsa la tecla [Supr] • Haz lo mismo para borrar el color ámbar y el verde. • Graba el dibujo resultante con el nombre Semavaci.bmp - Sal del “Paint” y vuelve al “Delphi” Pretendemos en este apartado hacer un programa que simule un semáforo … - Menú File – New - Application - Propiedades del formulario: • Caption: Semáforo • Name: Luces - Inserta un control “Image”: • Clic en el icono Image (paleta de componentes Additional): • Clic en el interior del formulario - Propiedades del “Image1”: • Height: 240 (recuerda que la altura del Sematodo o Semavaci.bmp era 240)

Delphi 7

Fermí Vilà

109


Width: 360 (la anchura del Semavaci.bmp era 360 píxeles) Picture: . Haz clic en el botón de elipsis: […] . Clic en [Load] . Selecciona el fichero Semavaci.bmp de TuCarpeta . [Open] . [Ok]

- Selecciona el formulario y cambia las propiedades: • AutoSize: True • BorderStyle: bsSingle (de esta forma evitamos que el usuario del programa pueda redimensionar el formulario en tiempo de ejecución). Vamos a colocar las luces en el semáforo … - Clic en el icono Image de la paleta de componentes Additional - “Marca” un cuadrado en el lugar del semáforo correspondiente a la luz roja. - Accede a las propiedades del control Image2 y cambia las propiedades: • Picture: localiza y selecciona el fichero Rojo.bmp de TuCarpeta • Visible: False. - Coloca la “luz ámbar” en su sitio: fichero Ambar.bmp en un nuevo control Image (Image3), con la propiedad “Visible = False”. - Coloca la “luz verde” en su sitio: fichero Verde.bmp en un nuevo control Image (Image4), con la propiedad “Visible = False”. - Graba el programa como Unit082.pas – Project082.dpr - Ya tenemos el semáforo con sus tres luces. Si ejecutamos el programa no veremos ninguna “luz”, ya que los tres controles “Image” que simulan las tres luces tienen la propiedad Visible igual a “False”. - Inserta un “temporizador” en unuestro formulario. Es decir: • Clic en el icono Timer (System) • Clic en cualquier punto del formulario. - Con el “Timer1” que acabamos de insertar seleccionado: • Solapa “Events” en el “Inspector de Objetos” • Clic-clic en el evento OnTimer - Escribe: procedure TLuces.Timer1Timer(Sender: TObject); begin Image3.Visible:= Not Image3.Visible; end;

FormShow(Sender: TObject).Cambia la propiedad Interval del Timer1 a 250 y ejecuta el programa. Dicho de otra forma: habremos conseguido la señal de precaución de nuestro semáforo. significa que cada segundo cambiará la “visibilidad” del color ámbar. como el valor de la propiedad Interval del Timer1 es 1000 milisegundos.Visible:=False. begin Timer1. . end. .Selecciona el formulario Luces. Image2. end. begin Timer1.Delphi 7 Fermí Vilà 110 La línea de código “Image3.Visible”. procedure TLuces.Visible:=False. desactivamos el control Timer1 .Inserta dos “Buttons” de propiedades: • Button1 Caption: Precaución Name: Intermitente • Button2 Caption: Ninguno Name: Borra . begin Timer1.IntermitenteClick(Sender: TObject). Por otro lado.Visible := Not Image3. deberás seleccionarlo del cuadro combinado en el Object Inspector: . lo que hace es cambiar la propiedad “Visible” del color Ámbar. Es decir: al visualizar el semáforo. Image3.Enabled:=False.Enabled:=False.BorraClick(Sender: TObject). Vamos a por las demás luces … .Escribe los procedimientos: procedure TLuces.Enabled:=True.Accede al evento OnShow y escribe: procedure TLuces.

Visible:=True.Escribe: procedure TLuces. procedure TLuces.Delphi 7 Fermí Vilà 111 Image4. . r) La propiedad “Canvas” El componente “Image” no sólo nos permite “mostrar” ficheros gráficos sino que nos permite dibujar en tiempo de ejecución … .Menú File – New .Application . procedure TLuces. end. end.Button1Click(Sender: TObject).dpr y pruébalo.Vamos a completar nuestro semáforo … Inserta en el formulario tres nuevos “Buttons” con las siguientes características: • Button1 Caption: Rojo • Button2 Caption: Ámbar • Button3 Caption: Verde .Inserta un componente “Image” (Additional).pas – Project082. un “Edit” y dos “Buttons”: . end.Button2Click(Sender: TObject). end.Button3Click(Sender: TObject). begin Image2.Graba el programa con el mismo nombre Unit082. . begin Image4.Visible:=True.Visible:=True.Visible:=False. begin Image3.

Button1Click(Sender: TObject). X. procedure TForm1.Delphi 7 Fermí Vilà 112 .Canvas.Y). Button: TMouseButton. .Button2Click(Sender: TObject).Escribe los siguientes procedimientos de evento: procedure TForm1. begin Image1.Image1MouseUp(Sender: TObject. X. procedure TForm1. Y: Integer).Propiedades: • Edit1 • • Button1 Text: (borra el texto que aparece) Caption: &Guardar Button2 Caption: &Recuperar .MoveTo(X.Text). begin if Button=mbLeft then begin dibujar:=true.Image1MouseMove(Sender: TObject. Button: TMouseButton. Shift: TShiftState. end. X. . end. end.Image1MouseDown(Sender: TObject. procedure TForm1.Y). end.Vamos a declarar una variable pública: accede al apartado “public” del “unit” y escribe: dibujar: boolean.Picture.SaveToFile(Edit1.Canvas. begin if Button=mbLeft then dibujar:=False.LineTo(X. begin if dibujar then Image1. Shift: TShiftState. Y: Integer). end. procedure TForm1. Shift: TShiftState. Y: Integer). Image1.

en definitiva establecemos el punto de dibujo en (x. ya que: en el procedimiento “Image1MouseUp()”.y) establece el punto de dibujo en la posición indicada por las coordenadas x. escribe en el “Edit1”: prueba1. el dibujo de nombre ‘cadena’ • Canvas representa la superficie de dibujo del “Image”. Vuelve al “Delphi” y ejecuta de nuevo el Project083 • Escribe en el “Edit1”: prueba1.Delphi 7 Fermí Vilà 113 begin Image1.Picture. la variable “dibujar” toma el valor “true”. • Picture representa el dibujo del Image. con el nombre ‘cadena’.y) (observa que x. y y el método LineTo(x. En definitiva podemos dibujar por el Image.y).Picture.y son parámetros del procedimiento.Canvas.y actual. es decir dibujamos desde el punto anterior al actual. sino para grabar o recuperar el dibujo en su conjunto. mientras lo mueves por la superficie del “Image”. LineTo y otros. gracias al procedimiento Image1MouseDown.y) dibuja una línea desde el punto anterior (establecido por “MoveTo” o el mismo “LineTo”) al punto de coordenadas x.bmp y clic en [Recuperar] . por esto sus métodos son de dibujo: MoveTo. end.Graba el programa como Unit083. ya que: Si tenemos el botón izquierdo pulsado entonces dibujar := True y Image1. entonce dibujar := False. entonces la variable “dibujar” toma el valor “False”. Si todo funciona correctamente.Estudio del Project083: • Al hacer clic con el botón izquierdo en el Image1.Picture.bmp y clic en [Guardar] • Cierra el programa Project083 y utilizando el “Paint” abre el fichero que tienes en TUCarpeta de nombre prueba1. si Button = mbLeft (Button es un parámetro del procedimiento que determina el botón pulsado y mbLeft representa el botón izquierdo). si Button = mbLeft.y). Recupera en el Image1.pas – Project083. del componente Image nos permite dibujar en él de la siguiente forma: El método MoveTo(x. podrás dibujar con el ratón • Cuando te hayas cansado de “dibujar”.Text).Canvas.bmp. .dpr y ejecútalo de la siguiente forma: • Mantén pulsado el botón izquierdo del ratón.LineTo(x. • La propiedad Canvas.LoadFromFile(Edit1. que simplemente “guardan” las coordenadas del ratón).MoveTo(x. LoadFromFile no son para dibujar. ya que: en el procedimiento Image1MouseDown(). al mover el ratón (procedimiento Image1MouseMove) y si dibujar := true entonces Image1. entonces dibujar := True • Si “soltamos” el botón izquierdo del ratón en el Image1. si todo funciona correctamente tendrás el dibujito que acabas de hacer con el Project083 • Cierra el “Paint”. • Image1. utilizando el ratón.LoadFromFile(‘cadena’). • Image1. por esto sus métodos: SaveToFile. A partir de este momento.SaveToFile(‘cadena’). s) El componente “OpenDialog” . Graba el dibujo que tenemos en el Image1.

un “Image” en nuestro caso.Inserta un componente “Button” de propiedad “Caption = &Abrir” .Menú File – New . y por eso no es necesario que te preocupes del tamaño ni de su posición. que nos permite especificar el tipo de fichero que visualizará el “OpenDialog”.Propiedades del formulario: • Caption: El componente OpenDialog • WindowState: wsMaximized . . • Si en el OpenDialog.Inserta un componente OpenDialog (Dialogs). seleccionado: • Clic en el botón de elipsis: […].Picture. begin OpenDialog1.Graba el programa como Unit084.bmp . escribe: Filter Name Filter Gráficos BMP *. . hemos seleccionado un fichero: “OpenDialog1.Con el “OpenDialog1” que acabamos de insertar. vamos a ver una forma más elegante … .Application .Picture. Se trata de un componente no visual (igual que el “Timer”). Image1. .Escribe el siguiente procedimiento de evento: procedure TForm1.LoadFromFile(OpenDialog1. end.Estudio del Project084: • OpenDialog1.dpr y ejecútalo.FileName” será el nombre de dicho fichero.Inserta en el formulario un componente Image (Additional) de propiedades: • Align = alClient (de esta forma se reajusta automáticamente el tamaño del objeto. de su propiedad Filter • Se acaba de abrir el llamado Editor de Filtros.LoadFromFile(OpenDialog1.Delphi 7 Fermí Vilà 114 En el ejercicio anterior hemos visto una forma de recuperar un fichero (LoadFromFile). • Image1. es decir: • Activa la paleta de componentes “Dialogs” • Clic en el icono OpenDialog: • Clic en cualquier punto del formulario.Execute: se abre el “cuadro de diálogo para abrir ficheros”.Execute. para que ocupe todo el área del formulario)) • Strech = True (de esta forma la imagen gráfica se extenderá a toda la extensión del “Image1”) . Caption:=OpenDialog1. .pas – Project084.Filename) .FileName.FileName).Button1Click(Sender: TObject).

Caption := OpenDialog1. para que aparezcan si es necesario. . .Filter:=GraphicFilter(TGraphic). Corresponde a la propiedad “Caption” del formulario.Picture.Range:=Image1.Escribe el procedimiento: procedure TForm1. porque no indicamos componente: en definitiva.Range:=Image1.Selecciona el Image1 Propiedad “Strech = False” .Con el programa Project084. begin OpenDialog1.FormResize(Sender: TObject).Vuelve a poner a 0 el subvalor Range de HorzScrollBar y VertScrollBar . En general. begin HorzScrollBar. Para que funcionen hemos de asegurarnos en cad barra de desplazamiento que: • Visible = True • Range > ClientWidt (normalmente un número entre 1000 y 2000) Vamos a “programar” las barras de desplazamiento. end. es decir según el tamaño el fichero … .Width.Picture. podemos utilizar el proceso anterior para añadir barras de desplazamiento a cualquier componente alineado con el área del cliente de la ventana (Align = alClient). . pueda mostrar otros tipos de archivos gráficos: escribe el siguiente procedimiento: procedure TForm1.Height. VertScrollBar. 2) El uso de la propiedad Strech = True no es demasiado adecuada si queremos trabajar con ficheros gráficos de tamaños muy diferentes. como título del formulario aparece el nombre del fichero gráfico.Delphi 7 Fermí Vilà 115 • En el “Image1” se muestra el fichero gráfico seleccionado en el cuadro de diálogo.Selecciona el Form1 (deberás hacerlo en el cuadro combinado del “Object Inspector”) Propiedades: WindowState = wsNormal HorzScrollBar Range = 1000 VertScrollBar Range = 1000 Observa las barras de desplazamiento que aparecen en el formulario.FormActivate(Sender: TObject).Para que el componente “Image”. a la vista … .FileName. t) “Image” con barras de desplazamiento Vamos a hacer un par de mejoras al programa anterior: 1) Nos interesa poder abrir ficheros gráficos que no sean BMP.

Graba el programa resultante como Unit085.Application .Propiedades: • Form1 • Memo1 Caption: Un Editor de Texto Lines: (borra el texto “Memo1”) WantTabs: True (de esta forma podemos utilizar tabuladores en el texto) ScrollBars: ssBoth (barras de desplazamiento vertical y también horizontal) • • • • • • • Button1 Caption: &Cortar Button2 Caption: &Pegar Button3 Caption: C&opiar Button4 Caption: &Nuevo Button5 Caption: &Abrir Button6 Caption: &Guardar Button7 Caption: &Finalizar Para insertar el OpenDialog1 y el SaveDialog1. debes situarte en la paleta de componentes Dialogs: • .Inserta: . u) El componente “SaveDialog” De la misma forma que tenemos un componente que nos permite “abrir” un fichero. WMF . En efecto: .dpr y pruébalo. también disponemos de un componente que nos permite “grabar”.Menú File – New . De esta forma podremos trabajar con los archivos gráficos reconicidos por la clase Tgraphic que son: BMP.Delphi 7 Fermí Vilà 116 end. EMF. ICO.pas – Project085.Si queremos acceder a imágenes JPEG: Añade a la cláusula Uses del “unit”. la palabra: Jpeg .

CopyToClipboard.Lines. end. begin Memo1.Button1Click(Sender: TObject). begin OpenDialog1. Memo1.PasteFromClipboard.LoadFromFile(OpenDialog1.Execute. end.CutToClipboard.SetFocus. Memo1. Memo1. Memo1.Clear. begin Memo1. procedure TForm1.FileName).Execute.SaveToFile(SaveDialog1.SetFocus.Button5Click(Sender: TObject).Button4Click(Sender: TObject). procedure TForm1.Delphi 7 Fermí Vilà 117 OpenDialog SaveDialog • En la propiedad “Filter” del OpenDialog1 y también del SaveDialog1 escribe: Ficheros de Texto | *.Button6Click(Sender: TObject). procedure TForm1. begin Memo1. procedure TForm1.SetFocus.Button3Click(Sender: TObject). begin Memo1. Memo1. Memo1. Memo1.Código: procedure TForm1. end.txt .Lines. end. procedure TForm1. begin SaveDialog1. end.SetFocus.FileName).Button2Click(Sender: TObject).SetFocus. .

Screen.0.Button7Click(Sender: TObject).0).SetFocus. Por lo tanto las coordenadas (Screen. procedure TForm1.Inserta 5 botones de propiedad “Caption”: . begin ShowMessagePos('Cuadro de Mensajes con coordenadas más claras'. procedure TForm1. begin ShowMessagePos('Cuadro de Mensajes sencillo pero con coordenadas'.Screen.Width div 5.Height div 5). Se trata del cuadro de mensajes que ya conocemos. que son dos valores que indican las coordenadas donde se mostrará el cuadro.Height div 5) • • . Screen. begin ShowMessage('Cuadro de Mensajes sencillo').Button3Click(Sender: TObject).Delphi 7 Fermí Vilà 118 Memo1. . veamos que disponemos de otros … .Button1Click(Sender: TObject). end.Button2Click(Sender: TObject). end. El ShowMessagePos es un cuadro de mensajes igual al anterior pero tiene dos detalles más. v) Cuadros de Mensajes Hasta ahora el único cuadro de mensajes que conocemos es el showMessage. begin Close.Height determina el alto de la pantalla y Screen.Width div 5 .Graba el programa como Unit086. Screen. end.Application . end. end. procedure TForm1.pas – Project086.Width determina el ancho de la pantalla.Menú File – New .dpr y ejecútalo.Escribe: procedure TForm1.

Delphi 7 Fermí Vilà 119 corresponderán a un punto situado a una quinta parte de la pantalla. El cuadro “MessageDlg” tiene más posibilidades: el primer parámetro corresponde al texto que queremos mostrar.0)=mrYes then ShowMessage('Has pulsado Yes') else ShowMessage('Has pulsado No'). begin if MessageDlg('¿Te gusta?'. Por último el MessageDlg devuelve el valor del botón pulsado por el usuario.mtWarning. IdRetry. IdNo. mb_IconWarning. procedure TForm1. mb_IconQuestion. mb_IconExclamation.Button5Click(Sender: TObject). procedure TForm1. Los botones que podemos poner son: mbYes. IdIgnore.pas – Project087. mbHelp. end. IdCancel. mtWarning. el tercer parámetro determina los botones que se mostrarán en el cuadro. que ahora podemos mostrar el cuadro en castellano. En el caso del MessageBox.Button4Click(Sender: TObject). mbOk. el valor que devuelve es una de las siguientes constantes: IdAbort. mb_IconStop. el cuarto parámetro es el índice de la posible ayuda de nuestra aplicación. mrYes.mb_OkCancel+mb_IconExclamation ).[mbYes.mbNo].Graba el programa como Unit087. Funciona igual que el “MessageDlg” con la diferencia. mb_IconError. begin Application.Menú File – New . mbAll. mrNo. si el cuadro contiene un botón de ayuda. el segundo parámetro corresponde al icono que aparecerá en el cuadro. IdYes • • . Los iconos que podemos utilizar son: mtInformation. mrRetry. mrIgnore. Ahora los botones a mostrar son: mb_IconAsterisk.'Título'. mtError. mbNo. mrAbort. El valor que devuelve el cuadro MessageDlg es una constante que puede tomar los valores: mrNone. IdOk. mb_IconHand.dpr y ejecútalo w) Cuadros de Mensajes Personalizados Vamos a ver las posibilidades que tiene el Delphi de crear cuadros de mensajes a nuestro gusto: .Application . mrOk. mbRetry. mbAbort.MessageBox('Mensaje'. mbCancel. mb_IconInformation. end. mrCancel. mbIgnore. mrAll. mtConfirmation y mtCustom. horizontal y verticalmente.

basta que escribas en su propiedad Position = poScreenCenter En definitiva. escribe: uses Unit088b.pas El proyecto como Project088. es decir: Menú File – New – Form .ShowModal).Selecciona el Form1 y escribe el siguiente procedimiento: procedure TForm1. del Unit088a. centrado y que no podemos redimensionar (BorderStyle = bsDialog).Inserta en el Form2 un “label” y un “image” de propiedades: • Label1 . nuestro programa protesta en uses Unit2. Observa que sale descentrado y se conporta de forma “modal”.Selecciona el Form2 y Caption = Cuadro de Mensajes Personalizado . . . antes de grabar los “units” correspondientes.Inserta un “Button” de “Caption = Abrir Cuadro de mensaje personalizado” .Inserta un segundo formulario. Es lógico que proteste.dpr .Delphi 7 Fermí Vilà 120 .Button1Click(Sender: TObject). . begin Form2. Bien. end. es decir: hasta que no cierres el formulario (Form2) no podrás tocar la ventana principal (Form2.ShowModal. vamos a dar contenido a nuestro cuadro de mensajes personalizado: .Para que el Form2 aparezca centrado.Al hacer clic en el botón se abrirá el segundo formulario.Selecciona el Form2 y propiedad BorderStyle = bsDialog .pas El Unit2 como Unit088b. Para solucionar el problema. ya que hemos asociado el Form1 con el Form2.pas.Ejecuta el programa: si todo funciona correctamente.Graba el programa: El Unit1 como Unit088a. hemos conseguido en el Form2 un cuadro de mensajes personalizado: formulario “Modal”.Asocia este segundo formulario al primero: • Selecciona el “Form1” • Menú File Use Unit… Con el Unit2 seleccionado [Ok] . en lugar de uses Unit2.

begin ShowMessage('Has pulsado [Aceptar]'). La propiedad Kind está estrechamente ligada con la propiedad ModalResult.bmp de c:\Windows o el fichero gráfico que quieras Stretch: True .pas – Project088. ya que éste automáticamente tendrá la acción de cancelar.BitBtn2Click(Sender: TObject). procedure TForm2. end.pas – Unit088b.Style: (fsBold = True) Alignment: taCenter Image1 Picture: Circles. La propiedad Kind del componente determina la imagen.Y para acabar el código correspondiente a los dos “BitBtns”: procedure TForm2. de manera que si. WordWrap: True Font.Propiedades del BitBtn1: • Kind = bkOk • Caption = &Aceptar . begin ShowMessage('Has pulsado [Cancelar]'). por ejemplo: Kind = bkCancel entonces ModalResult = mrCancel y no será necesario escribir código al botón.Delphi 7 Fermí Vilà 121 • Caption: Esto es el contenido del cuadro de mensajes personalizado.Por último colocaremos botones en nuestro cuadro de mensajes: • Activa la paleta de componentes Additional • Inserta dos componentes BitBtn: .Graba el programa con el mismo nombre: Unit088a. por defecto Kind = bkCustom (ninguna imagen). x) El componente “BitBtn” Veamos que el componente “BitBtn” es más de lo que hemos visto en el apartado anterior de tal forma que a partir de ahora usaremos muchas veces el BitBtn en lugar del Button.Propiedades del BitBtn2: • Kind = bkCancel • Caption = &Cancelar . Si no queremos que sea así: ModelResult = mrNone de la siguiente forma: .BitBtn1Click(Sender: TObject). . En principio el componente BitBtn no es más que un botón que puede mostrar además una imagen.dpr y pruébalo. end.Size: 12 Font.

es programarlo es el primero: de qué forma anulamos las Unit089.Menú File – New . izquierda.Application .bmp Caption: Circulitos • BitBtn6 Kind: bkCustom Glyph: Bubbles. …) .Observa que el único botón que decir que no es necesario “Close: Salir”.dpr los botones.Graba el programa como y prueba el funcionamiento de todos tiene una acción automática.Inserta seis BitBtn (Additional) con las siguientes propiedades: • BitBtn1 Kind: bkClose Caption: &Salir • BitBtn2 Kind: bkOk Kind: bkCustom ModalResult: mrNone Caption: &Aceptar • BitBtn3 Kind: bkCancel Kind: bkCustom ModalResult: mrNone Caption: &Cancelar • BitBtn4 Kind: bkHelp Kind: bkCustom ModalResult: mrNone Caption: A&yuda • BitBtn5 Kind: bkCustom Glyph: Circles. utilizando las propiedades: Kind = bkCustom Glyph = escogemos la imagen Layout = posición de la imagen (abajo.bmp Caption: Burbujitas Layout: blGlyphTop . 2º) Escogemos Kind = bkCustom 3º) Escogemos ModalResult = mrNone • • • Hay la posibilidad de insertar en el BitBtn una imagen propia. . .Delphi 7 Fermí Vilà 122 1º) Escogemos la propiedad Kind para la imagen del botón. y observa también acciones automáticas del resto.pas – Project089.

. El MainMenu1 nos permitirá crear un menú para nuestro formulario y el PopupMenu1 un menú emergente (el llamado menú contextual.Menú File – New – Application .Inserta en el formulario. que aparece al pulsar el botón derecho del ratón). Se trata igual que el MainMenu. de un componente no visual.Delphi 7 Fermí Vilà 123 y) Menús .Vamos a crear el menú: • Clic-clic en el MainMenu1 • Se acaba de abrir el “Diseñador de Menús” (Menu Designer) • Sitúate en la propiedad Caption (observa el “Object Inspector”) de la primera opción del menú y escribe: &Archivo y [Return] • Haz clic debajo de la opción “Archivo” en el diseñador de menús. visual y . para introducir la primera subopción de nuestro menú Archivo. un MainMenu (Standard) de la siguiente forma: • Clic en el icono MainMenu de la paleta de componentes Standard: • Clic en cualquier punto del formulario. . Se trata de un componente no por lo tanto no es necesario que te preocupes del tamaño ni de su posición.Inserta en el formulario un PopupMenu (Standard) de la siguiente forma: • Clic en el icono PopupMenu de la paleta de componentes Standard: • Clic en cualquier punto del formulario.

es decir: clic en la X del extremo superior derecho de la ventana Form1. Para ello. Clic debajo de la ralla de separación.Vamos a crear el menú emergente: • Clic – clic en el PopupMenu1 • Se abre el “diseñador de menús emergentes”. Crea utilizando el mismo proceso que hemos seguido para el MainMenu1: • Cierra la ventana correspondiente al “diseñador de menús emergentes” . y en la propiedad “Caption” de la nueva opción escribe: &Salir y [Return] Observa: • • Nos gustaría poder acceder a cada una de las opciones de nuestro menú. selecciona la opción “Recuperar” y en su propiedad ShortCut escribe o selecciona F1 A la opción “Grabar” asocia la abreviatura (shortcut) F2 y a la opción “Salir” la F3.Delphi 7 Fermí Vilà 124 • • • • • En la propiedad Caption correspondiente escribe: &Recuperar y [Return] Clic debajo de “Recuperar” y en la propiedad “Caption”. utilizando una tecla de función (abreviatura). de esta forma habremos conseguido una ralla de separación. escribe: &Grabar y [Return] Clic debajo de “Grabar” y en la propiedad “Caption” escribe un menos y [Return]. Tendremos: • “Cierra” el diseñador de menús.MainMenu1 .

Vuelve al “Form1” Clic en “Archivo” – clic en “Grabar” Escribe: procedure TForm1.txt .Inserta un OpenDialog y un SaveDialog (paleta de componentes Dialogs) Escribe en su propiedad Filter: Ficheros de Texto | *.Grabar1Click(Sender: TObject). Memo1.Inserta un componente Memo (Standard) y borra su contenido (propiedad Lines). sino que además.Recuperar1Click(Sender: TObject).Salir1Click(Sender: TObject). escribe o selecciona PopupMenu1 .Delphi 7 Fermí Vilà 125 .Lines. hay que decirle a la aplicación que lo use: • Selecciona el formulario • En la propiedad PopupMenu. begin OpenDialog1.Execute. • • • • • • .No basta con crear un PopupMenu (menú emergente). end. Vuelve al formulario Clic en “Archivo” – clic en “Salir” Escribe: procedure TForm1.LoadFromFile(Opendialog1. begin SaveDialog1.SaveToFile(SaveDialog1. begin Close.Execute. end.FileName) .Lines.Vamos a programar nuestro menú … • Clic en “Archivo” – clic en “Recuperar” • Escribe el procedimiento: procedure TForm1.FileName). En su propiedad ScrollBars. Memo1. escribe o selecciona: ssVertical Deberías tener algo parecido a esto: .

por ejemplo: • Escribe lo que quieras en el “Memo” • Pulsa [Alt][A] (se abrirá el Menú Archivo) • Pulsa [G] (se ejecutará la subopción de grabar) • Escribe como nombre del fichero lo que quieras • Pulsa [F3] (el programa se cerrará) • Vuelve a ejecutar el programa y prueba directamente el uso de las teclas [F1] y/o ]F2] • Vuelve a ejecutar el programa para probar las opciones del menú emergente (botón derecho del ratón).bmp. en efecto: • Selecciona la opción “Recuperar” en la ventana de diseño del PopupMenu1 y en el “Object Inspector” selecciona la pestaña Events • Sitúate en el campo OnClick y escribe o selecciona: Recuperar1Click • Selecciona “Grabar” y en el “Object Inspector” – Events – OnClick escribe o selecciona Grabar1Click • Selecciona “Salir” y en el “Object Inspector – Events – OnClick” escribe o selecciona: Salir1Click .Application .Graba el programa como Unit090. [S]) z) La función STR (núm.Menú File – New .Delphi 7 Fermí Vilà 126 end.pas – Project090. Como las opciones que nos quedan por programar son las mismas que ya hemos programado en el MainMenu1. En este caso hemos de hacerlo desde la pantalla de diseño. utilizando el ratón y/o las teclas ([R]. Recuerda de probar las diferentes abreviaturas que hemos programado. podremos hacerlo muy rápido.Para hacer este ejercicio necesitamos un fichero gráfico de nombre Contar. [G].dpr y pruébalo.Vamos a programar nuestro “menú emergente”. tamaño 16x16 píxeles y contenido: Es lo que se llama un BMP de tamaño ideal como imagen de . por lo tanto haz clic-clic en el PopupMenu1. .Inserta: glifo (fichero 16x16) y es un “BitBtn” . cadena) .

Delphi 7 Fermí Vilà 127 . Label8.bmp Caption: &Contar • BitBtn2 Kind: bkCustom Kind: bkCustom ModalResult: mrNone Caption:&Borrar BitBtn3 Kind: bkClose Caption: &Salir • .tmin.Caption:=tesp.min.'ñ'. Else .Text[i] of '0'.Text) do Case Memo1. Label7. str(min.'á'.esp:=0.'Ñ'.Caption:=tmay.Caption:=tmin.tmin).Caption:=tdig. tdig.tdig).tmay)..'í'.'9': dig:=dig+1. 'a'.esp:integer. for i:=1 to Length(Memo1.'Á'. 'A'.min:=0.'ó'.may:=0. Label5.'Ü': may:=may+1.tmay. str(esp.'z'.tesp:string.Propiedades: • Memo1 • BitBtn1 Lines: (borra la palabra Memo1) Kind: bkCustom Glyph: Contar. var i.'ü': min:=min+1.'Ú'.BitBtn1Click(Sender: TObject).'Ó'.'ú'. str(may.. str(dig..dig.may.'É'.'Z'. Label6. begin dig:=0.'é'.Escribe los siguientes procedimientos de evento: procedure TForm1.tesp).'Í'.

dpr y ejecútalo.tesp).Caption:=tdig. • Observa de qué forma accedemos a un carácter del “memo”: “for:=1 to Length( Memo1.tesp).may. representa cada uno de sus caracteres a1) El componente “Memo” El control Edit tiene la limitación de que la entrada de texto no puede exceder de una línea.Delphi 7 Fermí Vilà 128 esp:=esp+1. ocuparia 10 espacios en la “cadena” con 2 decimales. Label5. str(dig.tmin).BitBtn1Click los números son “integer” y en cambio.cadena). .BitBtn2Click(Sender: TObject). end. en el TForm1. Text) do”.Caption:=tmin.Estudio del Project091: • Str(núm.Text:=''. Label6.tmin.Caption:=tesp. Label6. tdig.esp:word. así en el TForm1.BitBtn2Click los números son word (números enteros comprendidos entre 0 y 65535). siendo “x” un número real.tmin).tdig). Label8. podríamos indicar el número de decimales: str(x:10:2. procedure TForm1.tdig).Caption:=tesp.Caption:=tdig.Caption:=tmay. end.esp:=0.cadena) Función de conversión que convierte el número “núm” en una cadena (string).tesp:string. str(min.tmay.min:=0. begin Memo1. Label7.tmay).pas – Project091.Caption:=tmay. desde uno hasta la longitud del contenido del “memo”. Label7. . Esta función no distingue entre el tipo de número. str(esp. str(min. Label5.min. str(dig. aunque dicha línea de texto puede tener una longitud superior al tamaño del propio Edit en el formulario . entonces Memo1Text[i].may:=0. end.Graba el programa como Unit091.tmay). str(esp. Label8.Caption:=tmin. str(may. Si el número es real. var dig. str(may. dig:=0.

Application . por ejemplo. En el caso ScrollBars = ssNone o ssVertical. es el uso del control Memo … . añadir una nueva línea o insertarla. el texto que vamos introduciendo se divide automáticamente. Quizás la mejor solución a la salida por pantalla de muchos datos tabulados. en lugar de un Edit. Append(). • • • • . WantTabs = True Al pulsar [Tab] no se producirá la activación del siguiente control. hemos de utilizar un “Memo” (paleta Standard) .Menú File – New . siempre y cuando la propiedad WordWrap = True (por defecto) Text Es la propiedad que nos permite acceder a su contenido. Add(). sino una tabulación en el texto.Inserta: .Delphi 7 Fermí Vilà 129 Cuando necesitamos una entrada de texto más amplia. Así. se producirá un salto de línea (no la activación del botón por defecto.Propiedades más importantes de un “Memo” • ScrollBars Muestra o no. ssHorizontal: barra de desplazamiento horizontal. Sus posibles valores son: ssNone: ninguna barra de desplazamiento (defecto) ssVertical: barra de desplazamiento vertical.Lines[3]. que puede existir o no). será la tercera línea del texto que tenemos en el “Memo1” WantReturns = True Al pulsar [Return] en el “Memo”. Insert(): nos permiten eliminar todas las líneas de texto. Memo1. igual que sucede con el control Edit Lines Accedemos a cada una de las líneas del control. ssBoth: barra de desplazamiento vertical y también horizontal.Métodos más importantes en un “Memo”: • • Clear(). saltando de una línea a otra. SaveToFile() y LoadFromFile(): nos permiten guardar y recuperar el texto del “Memo” en un archivo. barras de desplazamiento.

Propiedades: • Memo1 Lines: (borra el texto “Memo1”) ScrollBars: ssVertical WantTabs: True Kind: bkOk Kind: bkCustom ModalResult: mrNone Caption: &Ejecuta • BitBtn1 • BitBtn2 Kind: bkClose Caption: &Fin . for t:=0 to 50 do begin v:=g*t. Memo1. str(v:10:2.81. var t:integer.Text:=salida. salida:=salida+tt+#9+tv+#9#9+ts+#13#10. salida:=salida+'TIEMPO VELOCIDAD ESPACIO'+#13#10. str(t:7. v. s:=1/2*g*t*t.dpr y ejecútalo.Escribe: procedure TForm1.BitBtn1Click(Sender: TObject). str(s:10:2. .ts:string. salida:string.tv.Delphi 7 Fermí Vilà 130 .pas – Project092. end. begin salida:=''.tv). tt. .tt).Graba el programa como Unit092.s:real. end.ts). const g=9.

Propiedades: • Memo1 • Lines: (borra el texto “Memo1”) ScrollBars: ssVertical WantTabs: True Kind: bkOk Kind: bkCustom ModalResult: mrNone Caption: &Ejecuta BitBtn1 . if numero mod 2=0 then par:=par+1 else impar:=impar+1. var numero.par.Text:=''.Delphi 7 Fermí Vilà 131 Programa que calcula 10.Edit2. par:=0.Menú File – New .indice.000 números al azar. Al final.BitBtn1Click(Sender: TObject). Memo1. begin Memo1. sal:string. comprendidos entre 1 y 1000. sal:=sal+IntToStr(numero)+' .Inserta los controles: .Application . end.Edit1. for indice:=1 to 10000 do begin numero:=Random(1000)+1.Text:=''. '. .Text:=''.impar:=0. presenta el número de pares e impares .impar:integer.sal:=''.Text:=sal.Escribe el procedimiento: procedure TForm1.

Por ejemplo. sin seleccionar y sin determinar la acción.pas – Project093. no se excluyen los atributos de negrilla.Propiedades: • CheckBox1 Caption: Negrita • CheckBox2 Caption: Cursiva • CheckBox3 Caption: Subrayado • CheckBox4 Caption: Tachado .dpr y ejecútalo. entonces el valor de la propiedad State determina el estado del CheckBox: State = cbChecked : activado State = cbUnchecked: desactivado State = cbGrayed: indeterminado Las casillas de verificación son un componente que permite que. Actúa como un interruptor que puede presentar tres estados: seleccionado. end.Edit2.Inserta un “label” con la propiedad “Caption = Curso de Delphi 7” . cursiva y subrayado … . . aunque existan varios sobre el mismo formulario.Text:=IntToStr(impar ).Text:=IntToStr(par). Propiedad Checked = True : Casilla de Verificación activada Propiedad Checked = False : Casilla de Verificación desactivada Si la propiedad AllowGrayed = True (por defecto es “False”).Application .Delphi 7 Fermí Vilà 132 Edit1. b1) El componente “CheckBox” El componente CheckBox (Standard) presenta al usuario una opción Sí/No.Graba el programa como Unit093. puedan elegirse varios a la vez (no son excluyentes).Inserta cuatro CheckBoxs (paleta de componentes Standard): .Menú File – New .

Style:=Label1. Observa que podemos activar 4.Font.Font.Menú File – New .Font.Font. . 2 .Style-[fsStrikeOut].Style:=Label1.Font. c1) El componente “RadioButton” Los botones de opción (RadioButton: paleta de componentes standard) son otro de los componentes que permiten la elección de una opción Sí/No.Font.Style-[fsItalic].Inserta un “label” con la propiedad “Caption = Curso de Delphi 7” . end.Application .Style+[fsUnderline] else Label1.Font.Font. begin if CheckBox1. begin if CheckBox1.Font. begin if CheckBox2.Checked=True then Label1. end.Checked=True then Label1. que elegida una de las opciones que presentan estos controles no se puede elegir ninguna otra opción.CheckBox1Click(Sender: TObject). es decir no hay ninguna relación entre ellos.CheckBox3Click(Sender: TObject). procedure TForm1.dpr y ejecútalo.Font.Font. Las opciones que varios botones de opción presentan sobre el mismo formulario son excluyentes. begin if CheckBox1. .Delphi 7 Fermí Vilà 133 .Style+[fsItalic] else Label1.Font.Style+[fsStrikeOut] else Label1.Escribe los siguientes procedimientos de evento: procedure TForm1.Style+[fsBold] else Label1.CheckBox2Click(Sender: TObject). procedure TForm1.Style:=Label1.Graba el programa como Unit094. 1 o ninguno de los “CheckBoxs” de manera que no son excluyentes. end.Style:=Label1.Style:=Label1.Font.Font.Font. es decir. procedure TForm1.Style:=Label1.Style-[fsUnderline]. 3.Checked=True then Label1.Style-[fsBold].Style:=Label1.Font.CheckBox4Click(Sender: TObject). end.pas – Project094.Checked=True then Label1.Style:=Label1.

Font.RadioButton3Click(Sender: TObject).Font. begin Label1.Graba el programa como Unit095. end.RadioButton2Click(Sender: TObject). begin Label1. a diferencia de los CheckBoxs.Application .dpr y pruébalo. la elección de uno de ellos excluye a los demás. Observa que no puedes seleccionar más de un RadioButton a la vez. end. end.Escribe los procedimientos: procedure TForm1. procedure TForm1.pas – Project095.Name:='Arial'.Name:='Times New Roman'.Propiedades: • RadioButton1 Caption: Arial • RadioButton2 Caption: Courier • RadioButton3 Caption: Times New Roman . procedure TForm1. Una forma de solucionar este problema es hacer “grupos” utilizando el componente GroupBox (paleta de componentes Standard) . d1) El componente “GroupBox” Cuando los botones de opción se sitúan sobre un mismo formulario.Inserta tres “RadioButtons” (Paleta de componentes Standard): . begin Label1.RadioButton1Click(Sender: TObject).Name:='Courier'. .Menú File – New .Font. ya que los RadioButtons son excluyentes.Delphi 7 Fermí Vilà 134 .

inserta dos GroupBox (paleta de componentes Standard): con la propiedad “Caption = Estado Civil y Colaboración” .Ejecuta el programa para investigar si los RaioButtons se comportan de la forma que nos interesa: • Sólo podemos escoger Euros o Dólares • Sólo podemos seleccionar un tipo de IVA .Inserta los siguientes controles: .pas – Project096.Application .Graba el programa como Unit096.Delphi 7 Fermí Vilà 135 .Incluye cuatro RadioButtons en el GroupBox1 y tres en el GroupBox2 de propiedad “Caption”.Para ello.Inserta un nuevo formulario (Menú File – New – Form) . .Menú File – New .dpr y ejecútalo. la que aparece en la ilustración.Hemos de conseguir: . e1) La función “Val” .Inserta en el Form2: .

Text='' then begin dol:=cant/1.Edit1. Close.teur.Text:=''.teurt:string.Edit1.Edit1.euri.Checked=True then begin Form2. tdol.dolt. var cant.pas • El proyecto como Project097. if control<>0 then begin ShowMessage('No tiene sentido'). Str(dol:10:2. Form2. if Form2. control:integer.tdoli.pas • El “Form2” como Unit097b.control). Form2. end. if Form2.Text='' then . end.Edit1.Escribe el siguiente procedimiento de evento: procedure TForm1. Form2.dpr .Edit1.cant.doli.Edit1.eurt:real.dol. end.Text.Graba el programa como: • El “Form1” como Unit097a.tdol).Show. Val(Form1. begin Form2. es decir: • Selecciona el primer formulario (Cálculo del IVA) y • Menú File Use Unit… Con el Unit097b seleccionado [Aceptar] . if RadioButton2.Checked=True then begin Form2.Text:=tdol. end.teuri.Desde el primer formulario (Unit097a) nos interesará acceder al segundo (Unit097b).eur.Text.Text.Text:=''. if RadioButton1.Delphi 7 Fermí Vilà 136 .Edit2.17.Text:=Form1.Edit2.Text:=Form1.BitBtn1Click(Sender: TObject).Edit1.tdolt.Edit2.

Form2. if RadioButton4.Edit5. Form2.tdolt).Checked=True then begin doli:=dol*0. Str(doli:10:2. Form2. eurt:=eur+euri.teuri). Val(Form2. dolt:=dol+doli. Form2.teurt). Str(doli:10:2. Str(dolt:10:2. euri:=eur*0.Text.Edit1. Str(eurt:10:2. Val(Form2.dol.Checked=True then begin doli:=dol*0. end.Edit3. Str(eurt:10:2.Text:=teurt. if RadioButton5.Text:=teurt.07.Edit6.Edit2.Text:=teuri.teur).16.tdolt). Form2.tdoli).Text:=tdoli. Str(eur:10:2.Edit3.16.Text:=tdoli.Edit4.Text:=teuri. Form2.teurt).Edit6. Form2.control). Str(euri:10:2.07.Text. Form2. Form2.Edit4.Checked=True then begin doli:=dol*0.04.tdolt). Form2. Str(eurt:10:2.Edit5.control). Form2.teuri).Text:=tdolt.Edit3. euri:=eur*0. dolt:=dol+doli. if RadioButton3.Edit2.Text:=teurt. dolt:=dol+doli. end.Delphi 7 Fermí Vilà 137 begin eur:=cant*1.teuri). eurt:=eur+euri. Str(euri:10:2. Str(dolt:10:2.teurt). . Form2.Text:=tdoli.Text:=tdolt. Form2.17.Text:=teuri. end.04.tdoli).tdoli). Str(doli:10:2. euri:=eur*0.Text:=teur.Text:=tdolt.Edit4.eur.Edit5. eurt:=eur+euri. Str(dolt:10:2. Str(euri:10:2.Edit6.

pas – Project097. Su funcionamiento es un poco distinto del GroupBox.Propiedades: • RadioGroup1 Caption: Tipos de Letra Items: Arial Courier Times New Roman • RadioGroup2 Caption: Moneda Items: Euros Dólares .Menú File – New . entonces i=0 • Observa de qué modo evitamos el error que se produciría si lo que escribimos en el Edit del Form1 no es un número: Val(Form1. Close.Text. .Graba el programa con el mismo nombre: Unit097a.r.i) Convierte el string “t” en el real “r”. .control).Estudio del Project097: • Estamos suponiendo que 1 dólar = 1. end. veamos: .cant. f1) El componente “RadioGroup” El componente GroupBox se usa para agrupar sobre el formulario grupos de controles del tipo que sea. end.Escribe los siguientes procedimientos de evento: . a diferencia del componente RadioGroup (Standard) que está especialmente pensado para agrupar RadioButtons. if control<>0 then begin ShowMessage('No tiene sentido'). en efecto.17 euros • Val(t.pas – Unit097b. si ello es posible.dpr pruébalo.Delphi 7 Fermí Vilà 138 end.Inserta un label y dos RadioGroup (paleta de componentes Standard): .Application .Edit1.

Font.Caption:='Times New Roman'. es decir.Name:='Arial'. en un RadioGroup no tiene sentido la propiedad Checked. en tiempo de ejecución aparecerá activado el segundo RadioButton. g1) El componente “ListBox” El control ListBox de la paleta de componentes “Standard”. Label1.Name:='Courier'. if RadioGroup1.Caption:='Courier'.ItemIndex=1 then begin Label1.Caption:=Label1. end. end else ShowMessage('Debes seleccionar en primer lugar un tipo de letra').Caption+' Dólares'. Si en tiempo de diseño establecemos la propiedad ItemIndex.Caption<>'Label1' then begin if RadioGroup2. se utiliza para recoger “listados”.Delphi 7 Fermí Vilà 139 procedure TForm1.Caption:=Label1.Font.Font. Es decir.ItemIndex=0 then Label1.dpr y pruébalo.ItemIndex=2 then begin Label1.pas – Project098. .Caption+' Euros'. if RadioGroup1. end. end. Label1. . Label1. por ejemplo igual a 1.Graba el programa como Unit098. end.RadioGroup1Click(Sender: TObject).Propiedades más importantes: • Items: contiene los diferentes elementos de la lista. Observa que la propiedad ItemIndex del “RadioGroup” determina la opción seleccionada (empezando por 0).Name:='Times New Roman'. begin if Label1.RadioGroup2Click(Sender: TObject). end. if RadioGroup2.ItemIndex=1 then Label1. procedure TForm1.ItemIndex=0 then begin Label1. begin if RadioGroup1.Caption:='Arial'. su principal característica es: líneas de texto .

Métodos más importantes: • Add(): toma como parámetro una cadena de texto. Si no existe devuelve “-1”. Elementos seleccionados: o Si MultiSelect = False.Delphi 7 Fermí Vilà 140 • • • • • Sorted: si es “True”. sólo podremos utilizar el ratón. Encambio si es “False”. • IndexOf(): devuelve el índice del elemento igual a la cadena introducida como parámetro. ExtendedSelect: si es “True” podremos usar el botón izquierdo del ratón y también las teclas [Mayúsculas] y/o [Ctrl].Menú File – .Application . • Exchange(): intercambia dos elementos. . entonces el valor de “ItemIndex” será el único elemento seleccionado.Inserta: New . • Clear(): borra todo el listado. añadiéndola al final del listado. • Move(): toma dos parámetros. • Delete(): al indicar el índice. a partir de los índices respectivos. El primero indica el índice del elemento a mover y el segundo el índice a donde hay que moverlo. dependerá del valor de la propiedad ExtendedSelect. los elementos del listado aparecen ordenados. o En el caso MultiSelect = True. La forma de selección. la propiedad SelCount contiene el número de elementos seleccionados y la propiedad Selected contendrá los índices de los elementos seleccionados. o TopIndex contiene el índice del elemento visible en la parte superior de la ventana. • SaveToFile(): guarda en un archivo todo el listado • LoadToFile(): recupera de un archivo el contenido de la lista. no habrá ningún elemento seleccionado. • Insert(): toma dos parámetros. El primero determina la posición y el segundo el texto a añadir. MultiSelect: si es “True”. o Si ItemIndex= -1. más de un elemento. el primer elemento y/o último aparecen cortados. el usuario podrá seleccionar. Si al desplazarse por los elementos del listado. borrará el elemento correspondiente. basta establecer la propiedad IntegralHeight = True .

vt). tex.Add(tex).st).pas – Project099.Add(st).dpr y ejecútalo.Application . ListBox2. s:=1/2*g*t*t. end. const g=9. ListBox1.Menú File – New .Items. Str(t:10.tex).Graba el programa como Unit099.vt. . Str(s:10:2.s:real.Items.Add(vt). var v. Vamos a hacer un programa que nos permita ordenar tres números enteros … .Código: procedure TForm1. Str(v:10:2.Delphi 7 Fermí Vilà 141 . t:integer. end.81. ListBox3.st:string.BitBtn1Click(Sender: TObject).Items. begin for t:=0 to 15 do begin v:=g*t.

c:=StrToInt(InputBox('Tercer número entero'.Items. if (a>b) then begin aux:=a. a:=aux. ListBox2.Add(IntToStr(b)).'')).Código: procedure TForm1.Add(IntToStr(a)). var a.b. c:=b.Items.Delphi 7 Fermí Vilà 142 . if (c<a) then begin aux:=c.Clear. ListBox1.BitBtn1Click(Sender: TObject).Insertar: . aux:integer.Add(IntToStr(c)). ListBox2. b:=a.''.Add(IntToStr(c)). begin ListBox1.Add(IntToStr(b)). a:=StrToInt(InputBox('Primer número entero'.'')). end. ListBox2. c:=aux. ListBox2. b:=c. ListBox1.Items.''. ListBox1. end. a:=b.Items. end else if (c<b) then begin aux:=b.Add(IntToStr(a)). b:=aux.c:integer. b:=StrToInt(InputBox('Segundo número entero'.'')).Items.''.Clear.Items. .

sobres:integer.Menú File – New . for alum:=1 to total do begin repeat nota:=StrToInt(InputBox('Nota de'. aux es el mayor a:=b.'')).'Alumno '+IntToStr(alum).'')). En definitiva a es menor que b Vamos a hacer un programa que obtenga una estadística con el número de suspendidos. var total.alum.Clear. b es el mayor (aux) end.Graba el programa como Unit100. begin ListBox1.notabl:=0.aprob. .BitBtn1Click(Sender: TObject). notables y sobresalientes de un grupo de alumnos.notabl. total:=StrToInt(InputBox('Número de alumnos'.pas – Project100. suspen:=0. .Delphi 7 Fermí Vilà 143 end.Inserta: .suspen.dpr y pruébalo . aprobados. La nota hemos de introducirla como un número entero entre 0 y 10 .''.Estudio del Project100 El método de ordenación que utilizamos es el uso de una variable auxiliar (variable aux).sobres:=0. Veamos: If (a>b) then si a es el mayor entonces Begin aux:=a.nota.Applicatrion . a es el pequeño (b) b:=aux.Código: procedure TForm1. aprob:=0.

ListBox1.Items..Items. ListBox1. begin if Edit1. Edit3.Text<>'' then .Text:=''. .Add('Girona'). until (nota>=0) And (nota<=10).dpr y pruébalo .pas – Project101.Add('A Coruña').Text:=IntToStr(aprob).BitBtn1Click(Sender: TObject). Case nota of 0. end.Items.Código: procedure TForm1. Edit5.Text:=IntToStr(notabl). end.10: sobres:=sobres+1.Text:=IntToStr(suspen).. Edit1. end.Delphi 7 Fermí Vilà 144 ListBox1.Text:=IntToStr(sobres).Inserta: .En la propiedad MultiSelect del ListBox1. end.Add(IntToStr(nota)).Graba el programa como Unit101.Menú File – New . 9. procedure TForm1.Add('Granada').Application .6: aprob:=aprob+1.. considera el valor Tru . begin Edit1. Edit4.Items. 5.. Edit2.8: notabl:=notabl+1.4: suspen:=suspen+1.FormCreate(Sender: TObject).Text:=IntToStr(total). 7. ListBox1.

csDropDown (defecto): aspecto de un cuadro de texto con un botón a su derecha que despliega el listado. procedure TForm1.dpr y ejecútalo. end.Text). . de la paleta de componentes Standard no es más que la unión de un Edit con un “ListBox”. ya que el listado existe aunque no sea visible directamente. Prueba la opción [Eliminar de la lista] si tienes más de un elemento seleccionado.Inserta: . Con este estilo es posible utilizar las teclas del cursor arriba y abajo para recorrer los elementos de la lista.Application . end. que puede valer: .Count do begin if Selected[n] then begin Items. end. Sus propiedades y métodos son básicamente los mismos que un “ListBox”. ni listado adjunto.Delete(n).csSimple: su aspecto es el mismo que un “Edit”. . var n:integer. es decir no hay botón.Items.Graba el programa como Unit102. end else n:=n+1. begin n:=0.BitBtn2Click(Sender: TObject). end.csDropDownList: no podemos escribir.Delphi 7 Fermí Vilà 145 begin ListBox1. With ListBox1 do While n<Items.Add(Edit1. exceptuando la propiedad Style. Edit1.SelectAll. h1) El componente “ComboBox” El control ComboBox. n:=0.pas – Project102. pero sí seleccionar . .Menú File – New .

.431.Add('Dólares'). endivisa:real. if codigo=0 then begin endivisa:=valor*cambio[ComboBox1. ComboBox1.Items. begin ComboBox1. var codigo:integer.5] of real . end.FormCreate(Sender: TObject). ComboBox1.Add('Francos Suizos').985.Items.Text.Items.valor.Items.dpr y ejecútalo. Str(endivisa:10:2. cambio[5]:=1.Add('Coronas Suecas').codigo). end.En el apartado public del unit escribe: cambio:array [0. cambio[4]:=9. Edit1.Add('Coronas Danesas'). .Items. Label3.471. procedure TForm1.Add('Euros').636.Text.Código: procedure TForm1.Text:=''. .El “ComboBox” debes insertarlo utilizando el icono ComboBox de la paleta de componentes Standard: . valor:real. ComboBox1. cambio[0]:=0. ComboBox1. cambio[2]:=1. cadena:string. begin Val(Edit1.Delphi 7 Fermí Vilà 146 .Caption:=cadena+' '+ComboBox1.Add('Libras Esterlinas').cadena).204.ItemIndex]. ComboBox1.BitBtn1Click(Sender: TObject).Grábalo como Unit103. end else ShowMessage('Debes escribir la cantidad en Euros').pas – Project103. cambio[3]:=7.Items. cambio[1]:=0.

pas / ProjectEjer33. .Delphi 7 Fermí Vilà 147 Ejercicios 1) Repite el ejercicio ProjectEjer26 que servia para simplificar fracciones pero de forma “visual”.pas / ProjectEjer32. Grábalo como Ejer33. que servia para calcular el área de un triángulo en el espacio. pero de forma “visual”.dpr Nota: Si en lugar de “Edits” utilizas “Memos” podrás centrar su contenido (Alignment = taCenter) 2) Repite el ejercicio ProjectEjer27 que servia para sumar fracciones pero de forma “visual”.dpr 3) Repite el ejercicio ProjectEjer29. Grábalo como Ejer32.

Delphi 7 Fermí Vilà 148 Grábalo como Ejer34. .Escribimos en el “Edit1” el número de multiplicaciones que queremos hacer.dpr. .Si la respuesta es incorrecta.En el “Edit5” escribimos el resultado de la multiplicación que aparece en el “Edit3” y “Edit4”. . de la siguiente forma: .pas / ProjectEjer35.pas / ProjectEjer34.dpr 4) Crea un programa de nombre Ejer35. aparece en el “Edit8” la contestación correcta. que sirva para repasar las tablas de multiplicar. .Si la respuesta es correcta. aparece en el cuadro “Edit8” la frase “Muy Bien”.En los campos “Edit3” y “Edit4” aparecen dos números aleatorios entre 1 y 9 .

dpr de tipo visual que sirva para calcular determinantes de segundo y/o tercer orden. . . en el cuadro de texto “Edit9” aparece la nota cualitativa (ProjectEjer09) y el botón [Otro Producto] se hace invisible.Los cuadros “Edit6” y “Edit7” cuentan el número de respuestas correctas e incorrectas respectivamente.En el campo “Edit2” aparece en cada momento el número de multiplicaciones pendientes. . 5) Crea un programa de nombre Ejer36.El botón [Otro Producto] sirve para que aparezca otra multiplicación. Una forma de conseguir las líneas verticales es: • Inserta un Panel (paleta de componentes Standard): .Delphi 7 Fermí Vilà 149 .Al acabarse todas las multiplicaciones.pas / ProjectEjer36.

dpr que nos permita jugar a los dados.pas / ProjectEjer37.Delphi 7 Fermí Vilà 150 • En su propiedad Color = clBlack 6) Crea un programa de nombre Ejer37.pas / ProjectEjer38. 7) Crea un programa de nombre Ejer38. de la siguiente forma: .dpr de tipo visual que sirva para resolver una ecuación de 2º grado.

Al iniciarse el programa: el botón [Tirada] y el mensaje “SELECCIONA LOS …” desaparecen: .Al hacer clic en [Empezar partida] aparecen los valores “aleatorios” de los 5 dados y el botón [Tirada] y el mensaje “SELECCIONA LOS …” se hacen visibles: .Al hacer lo que nos dice el mensaje (clic en los botoncitos de los “dados” que queremos volver a tirar). desaparecen los dados correspondientes: .Delphi 7 Fermí Vilà 151 .

Delphi 7 Fermí Vilà 152 . De la siguiente forma: Al hacer clic en una de las tres partes del de éste aparece el correspondiente: ordenador.dpr que sirva para enseñar las diferentes partes de un ordenador a un niño.Al hacer clic en [Tirada].pas / ProjectEjer39. debajo nombre de la parte . los dados que habían desaparecido se hacen visibles con otros valores “aleatorios”: 8) Crea un programa de nombre Ejer39.

Al ejecutar el programa: .pas / ProjectEjer40.Delphi 7 Fermí Vilà 153 Indicación: Coloca tres labels que “tapen” las tres partes del ordenador con las propiedades: AutoSize: False Caption: Transparent: True 9) Crea un programa de nombre Ejer40.Al hacer clic en [Encender]: .dpr que simule el funcionamiento de una lámpara de la siguiente forma: .

Al hacer clic en [Apagar] volvemos a la situación inicial. 10) Crea un programa de nombre Ejer41.Delphi 7 Fermí Vilà 154 .dpr que sirva para calcular la media aritmética de una serie de números de la siguiente forma: a) Al escribir un número en el campo “Número” y pulsar [Return] o al hacer clic en [Introduce el número].pas / ProjectEjer41. . éste se coloca en el listado: b) Al escribir un número en el campo “Lugar” aparece automáticamente en el campo “Valor” el correspondiente valor del número que tenemos en el “listado” de orden el “Lugar” introducido (deberás utilizar el evento OnChange del control correspondiente a “Lugar”).

Items[3] = cuarto valor del listado(string) c) Al hacer clic en [Media Aritmética]. en el campo “M. el botón anterior se encuentra desactivado .Delphi 7 Fermí Vilà 155 Para acceder a un elemento determinado del listado hemos de utilizar: ListBox1.” aparece la media aritmética de todos los números del “listado” d) Hemos de tener la posibilidad de borrar todo el listado (acción del botón [Borra el listado]) e) Hemos de tener la posibilidad de borrar un determinado elemento del “listado” siempre y cuando lo seleccionemos préviamente (acción del botón [Elimina el número seleccionado]) Si no hay ningún elemento seleccionado en el “Listado”.A.Items[lugar del listado – 1] Por ejemplo: ListBox1.

dpr. La condición de salida ha de ser que dicho número sea el cero: 12) Crea un programa de nombre Ejer43. que sirva para calcular la media aritmética de una serie de números de la siguiente forma: La suma debe realizarse dentro de un bucle REPEAT. Al seleccionar un país. añadiéndose al contenido de una variable “suma”. aparece el mapa y bandera del país correspondiente: Para hacer este ejercicio necesitarás 6 gráficos: . que contenga un ComboBox con el nombre de sus países.pas / ProjectEjer42.dpr.pas / ProjectEjer43.Delphi 7 Fermí Vilà 156 11) Crea un programa de nombre Ejer42. el valor leído desde el teclado.

dpr que contenga un crucigrama funcionando de la siguiente forma: 14) Crea un programa de nombre Ejer45.pas / ProjectEjer44.dpr que nos sirva para “repasar” las tablas de sumar o multiplicar de la siguiente forma: .Delphi 7 Fermí Vilà 157 13) Crea un programa de nombre Ejer44.pas / ProjectEjer45.

que calcule el producto de dos números pero por el método de las sumas (por ejemplo: 7*5 = 7 veces 5 = 5+5+5+5+5+5+5) . según los “suplementos”.Delphi 7 Fermí Vilà 158 15) Crea un programa de nombre Ejer46. que calcule el precio de un ordenador.pas / ProjectEjer47.dpr.pas / ProjectEjer46. de la siguiente forma: 16) Crea un programa de nombre Ejer47.dpr.

dpr. 4-3=1. el cociente es tres) 18) Crea un programa de nombre Ejer49.dpr.Delphi 7 Fermí Vilà 159 17) Crea un programa de nombre Ejer48.pas / ProjectEjer49.pas / ProjectEjer48.dpr. . que calcule la división entera pero por el método de las restas (por ejemplo: 10/3: 10-3=7. como hemos restado 3 veces. que calcule la suma de los números entre dos dados 19) Crea un programa de nombre Ejer50. que acepte números hasta un máximo de 20 y luego obtiene el porcentaje de números positivos sobre el total de números distintos de cero. 7-3=4.pas / ProjectEjer50.

dando el “nombre”.dpr.pas / ProjectEjer51. que acepte números hasta un máximo de 50 y luego obtiene el número mayor y el menor.Delphi 7 Fermí Vilà 160 20) Crea un programa de nombre Ejer51. Posteriormente. indicando el lugar que ocupan 21) Crea un programa de nombre Ejer52.dpr. que vaya pidiendo el nombre y el teléfono de una serie de personas. nos contesta con su número de teléfono: .pas / ProjectEjer52.

El “array” correspondiente de fechas. El mejor componente para trabajar con fechas es el dateTimePicker que encontrarás en la página de componentes win32. Por último el programa determina el nombre y la fecha de nacimiento de la persona más joven y de la persona más vieja. debes declarlo como: fechas: array [1.. de una serie de personas.50] of TDateTime Una variable ‘tipo fecha’ sería: fecha:TDateTime La fecha que contiene el control DateTimePicker queda determinada por DateTimePicker1 .dpr.pas / ProjectEjer53.Date . que nos permita introducir el nombre y la fecha de nacimiento.Delphi 7 Fermí Vilà 161 22) Crea un programa de nombre Ejer53.