Está en la página 1de 15

Capt.

4
ESTRUCTURAS DE MULTIPLES ALTERNATIVAS
En la temática anterior se mostro como hacer que el compilador escoja entre dos
alternativas usando el enunciado if – Then - Else. Sin embargo, en algunos casos
puede requerirse que el compilador escoja de una lista de más de dos opciones. Hay dos
métodos:
a) El enunciado if anidado
b) El enunciado case

El Enunciado if anidado
El formato general de un if de esta clase:
If condición1 then
Sentencia1
else if condicion2 then
Sentencia2
else if condición3 then
Sentencia3
…..
Else
SentenciaX
end;

La sentencia Case
Una sentencia Case tiene la forma:
Case selector of
Lista1: sentencia1;
……
ListaN: sentenciaN;
else
sentencia;
end;
el estudiante debe recordar que selector es un tipo cardinal. Las listas pueden ser:
a) Un numeral, una constante declarada
b) Un subrango de la forma: Primero …. Ultimo, en el que el primero es menor o
igual que ultimo.
c) Una lista de la forma ítem1, ….., ItemN.

1) Aplicación Fecha de Nacimiento


Desarrollar una aplicación que solicite al usuario la suma que se obtiene al multiplicar
su día de nacimiento por 12 y el número del mes por 31 y a continuación muestre en un

1
Cuadro de Edición la fecha de su nacimiento en un formato similar al siguiente modelo
(ud. No deberá ingresar ni el día ni el mes de su nacimiento).
Calculador de Fecha de Nacimiento
Especifique la suma S = 12d + 31m : 170
Usted ha nacido el : 09 de febrero

Siga los siguientes pasos:


1. Crear una nueva aplicación con formulario
2. En el formulario colocar 2 etiquetas, 1 cuadro de edición, 1 control BitBtn y una
Caja Agrupadora.
3. Modificar las propiedades de los componentes:

Control Propiedad Valor


Form1 Caption Calculador de Fecha de nacimiento
Position poScreenCenter
Label1 Especifique la suma S = 12d + 31m
Label2 Caption ‘’
Edit1 Text ‘’
GroupBox1 Caption Usted ha nacido el
BitBtn1 Caption &Salir
Kind bkClose

Aspecto de la interfaz de usuario:

Asociemos un procedimiento al control Edit1 para el evento OnKeyPress Aquí


calcularemos en m y d el mes y el día correspondiente al valor ingresado. Asimismo en
el Cuadro de Edición permitiremos el acceso solo de digitos.
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var
S,d,m:integer;
mm:string;
begin
if key=#13 then
begin
2
try
S:=StrToInt(Edit1.Text);
if (7*S mod 12=0) then
m:=12
else
m:=7*S mod 12;
d:=(S-31*m) div 12;
case m of
1: mm:='Enero';
2: mm:='Febrero';
3: mm:='Marzo';
4: mm:='Abril';
5: mm:='Mayo';
6: mm:='Junio';
7: mm:='Julio';
8: mm:='Agosto';
9: mm:='Setiembre';
10: mm:='Octubre';
11: mm:='Noviembre';
12: mm:='Diciembre'
end;
Label2.Caption:=IntToStr(d)+' de '+mm;//IntToStr(m);
Edit1.SetFocus;
Edit1.SelStart:=0;
Edit1.SelLength:=Length(Edit1.Text)
except
on EConvertError do
ShowMessage('El número es muy grande')
end
end;
if not (key in ['0'..'9',#8]) then key:=#0
end;

Programa ejecutándose:

2) Premiación por goles

3
Cierta empresa auspiciadora desea premiar l a participación nuestro seleccionado en la Copa
América incentivando a cada jugador en función a las anotaciones conseguidas por el equipo en cada
encuentro. Estos recibirán una bolsa que se calculara multiplicando el número de goles convertidos en una
fecha por un Factor, el cual se obtiene de acuerdo a la siguiente tabla:

Total de Goles Factor


0 0
1…5 300
6…8 600
9, 10 1000

Siga los siguientes pasos:


1. Crea una nueva aplicación con formulario:
2. En el formulario colocar los siguiente controles: 3 etiquetas, 3 cuadros de edición,
1 control UpDown, 1 botón de figura y una Caja Agrupadora
3. Modifique las propiedades de los componentes:

Control Propiedad Valor


Form1 Caption Bonificación por Goles
Position poScreenCenter
Label1 Caption Total de goles
Label2 Caption Factor asociado
Label3 Caption Premio
Edit1 Text 0
UpDown1 Associate Edit1
Increment 1
Max 10
Min 0
Edit2 Text ‘’
ReadOnly True
Edit3 Text ‘’
ReadOnly True
GroupBox1 Caption Resultados
BitBtn1 Caption &Salir
Kind bkClose

Aspecto de la interfaz de usuario:

4
Asociemos un procedimiento al control Edit1 para el evento OnKeyPress:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var
pInicial,pFinal,Factor:integer;
begin
if key=#13 then
begin
try
pInicial:=StrToInt(Edit1.Text);
Case pInicial of
0 : Factor:=0;
1..5 : Factor:=6000;
6..8 : Factor:=9000;
9,10 : Factor:=10000
End;
if pInicial<=10 then
begin
pFinal:=pInicial*Factor;
Edit2.Text:=IntToStr(Factor);
Edit3.Text:=IntToStr(pFinal)
end;
Edit1.SetFocus;
Edit1.SelStart:=0;
Edit1.SelLength:=Length(Edit1.Text)
except
on EConvertError do
ShowMessage('El número es muy grande')
end
end;
if not (key in ['0'..'9',#8]) then key:=#0
end;

El programa ejecutándose:

5
3) MiniEditor de Textos
Elaborar una aplicación que permita cambiar el formato de un texto de entrada:
Siga los siguientes pasos:
1. Crear una nueva aplicación con formulario
2. En el formulario colocar los siguientes componentes: 1 etiqueta, 1 cuadro de
edición, 3 cajas agrupadoras, 2 botones, 3 casillas de verificación, 1 control
RadioGroup1 y 3 botones de radio.
3. Modificar las propiedades de los componentes:

Control Propiedad Valor


Form1 Caption Mini-Editor de Texto
Icon D:\Imagenes\Editor.bmp
Position poScreenCenter
Label1 Caption Texto:
Edit1 Text Desarrollo de aplicaciones es Delphi
GroupBox1 Caption Estilo:
CheckBox1 Caption Negrita
Font/Style fsBold=True
CheckBox2 Caption Cursiva
Font/Style fsItalic
CheckBox3 Caption SubRayado
Font/Style FsUnderline=true
RadioButton1 Caption Rojo
Checked True
Font Color=clRed
RadioButton2 Caption Verde
Font Color=clGreen
RadioButton3 Caption Azul
Font Color=clBlue
RadioGroup1 ItemIndex 0
Items 8
12
16
Buttoin1 Caption &Abandonar
Button2 Caption &Ver Código

6
Al diseñar una interfaz de usuario como la mostrada en la siguiente figura asegúrese de
colocar las casillas de verificación y los botones de Opción dentro de las cajas
agrupadoras:

Consideraciones:
El color inicial del Cuadro de Edición debe ser Rojo Claro. Use la propiedad Color desde
la propiedad genérica Font.
En la caja agrupadora Color, el Rojo es la opción seleccionada inicialmente. Use la
propiedad Checked.
El formulario debe ser de tamaño fijo, se podrá minimizar pero no se podrá maximizar.
Use las propiedades BordeStyle, BorderIcons, (biMinimize, biMaximize).
La ruta para el icono del formulario es: D\Imágenes\Editor.ico.
Para aplicar algún formato al texto en el cuadro de edición declararemos la variable
estilos la que almacena un conjunto de estilos según la selección actual de los controles.
Var
Estilos:TFontStyle;

El siguiente procedimiento de evento activa o desactiva los marcos dependiendo del


contenido del Cuadro de Edición. Se añaden también instrucciones para activar o
desactivar los controles que se encuentran dentro de las Cajas Agrupadoras.
procedure TfrmMensaje.edtMensajeChange(Sender: TObject);
begin
if trim(edtMensaje.Text)='' then
begin
gbEstilo.Enabled:=false;
gbColor.Enabled:=false;
Radiogroup1.Enabled:=false;
chkNegrita.Enabled:=false;
chkCursiva.Enabled:=false;
chkSubrayado.Enabled:=false;
7
rbrojo.enabled:=false;
rbverde.enabled:=false;
rbazul.enabled:=false;
end
else
begin
gbEstilo.Enabled:=true;
gbColor.Enabled:=true;
Radiogroup1.Enabled:=true;
chkNegrita.Enabled:=true;
chkCursiva.Enabled:=true;
chkSubrayado.Enabled:=true;
rbrojo.enabled:=true;
rbverde.enabled:=true;
rbazul.enabled:=true;
end
end;
El siguiente procedimiento de evento comprueba si la casilla de verificación Negrita esta
con marca o no, para luego modificar la propiedad Font/Style(fsBold) del cuadro de
edición.

procedure TfrmMensaje.chkNegritaClick(Sender: TObject);


begin
if chknegrita.Checked=true then
include(estilos,fsBold)
else
exclude(estilos,fsBold);
edtmensaje.font.Style:=estilos
end;

De modo similar programe los eventos para las otras casillas. En Cursiva use la
propiedad Font/Style(fsItalic) y en subrayado use la propiedad FontStyle(fsUnderline).

procedure TfrmMensaje.chkCursivaClick(Sender: TObject);


begin
if chkCursiva.Checked=true then
include(estilos,fsItalic)
else
exclude(estilos,fsItalic);
edtmensaje.font.Style:=estilos;
end;

procedure TfrmMensaje.chkSubrayadoClick(Sender: TObject);


begin
if chkSubrayado.Checked=true then
include(estilos,fsUnderline)
else
exclude(estilos,fsUnderline);
8
edtmensaje.font.Style:=estilos;
end;

Haga doble clic sobre el botón de opción Rojo, aparecerá la ventana de código para el
suceso OnClick. Dentro del procedimiento de evento escriba:

procedure TfrmMensaje.rbRojoClick(Sender: TObject);


begin
edtMensaje.Font.Color:=RGB(255,0,0)
end;

De forma similar programe los botones Verde y Azul. Use los colores clGreen y clBlue
respectivamente.
procedure TfrmMensaje.rbVerdeClick(Sender: TObject);
begin
edtMensaje.Font.Color:=RGB(0,255,0)
end;
procedure TfrmMensaje.rbAzulClick(Sender: TObject);
begin
edtMensaje.Font.Color:=RGB(0,0,255)
end;

Ahora haga doble clic en control RadioGroup1. La propiedad ItemIndex indicara cual
botón ha sido seleccionado. En el editor de código digite los siguiente:

procedure TfrmMensaje.RadioGroup1Click(Sender: TObject);


begin
case RadioGroup1.ItemIndex of
0:edtMensaje.Font.Size:=8;
1:edtMensaje.Font.Size:=12;
2:edtMensaje.Font.Size:=16
end
end;

Programa ejecutándose:

9
4) Creando una Nueva Ficha

Para agrega un formulario al Proyecto siga los siguientes pasos:

1. Clic en el Menú File


2. Clic en la opción New Form
Luego a esta ficha insértele los siguientes controles: 1 etiqueta, 1 Cuadro de Edición, 1
Barra de desplazamiento y 1 Botón. Debe tener la siguiente apariencia:

Proceda a establecer las propiedades de acuerdo al siguiente cuadro:

Control Propiedad Valor


Form1 Caption Averiguar Codigo
BordeStyle bsSingle
Position poScreenCenter
Label1 Caption 32
Font/Size 12
Font/Style fsBold=True
ScrollBar1 Max 255
Min 32

10
Position 32
LargeChange 10
SamillChange 1
Button1 Caption &Retomar

Codifique el evento OnChange de la barra de desplazamiento como se muestra a


continuación:
procedure TfrmAscii.scbCodigoChange(Sender: TObject);
begin
lblCodigo.Caption:=intToStr(scbCodigo.position);
edtCaracter.text:=chr(scbCodigo.position);
end;

La función Chr devuelve un carácter de acuerdo al código que aparece entre paréntesis.

En el formulario Form1 haga doble clic sobre el botón Ver Código y escriba la
instrucción necesaria para mostrar el formulario Form2 en forma Modal.

procedure TfrmMensaje.Button1Click(Sender: TObject);


begin
frmascii.ShowModal
end;

Requerimos enlazar la segunda unidad o modulo con la primera, para conseguirlo siga
estos pasos:

1. Clic en el mene File


2. Elegir el comando Use Unit (o pulsar Alt + F11)
3. En el dialogo Use Unit seleccione Unit2 y luego clic en el botón OK.
Verifique que se haya añadido la siguiente instrucción luego de la sección
Implementation.

Implementation
Uses unit2;
{$R *.DFM}
En el formulario Form2 haga doble clic en el botón Retornar y escriba el código para
cerrar el formulario, use el método Close del formulario.
procedure TfrmMensaje.btnAceptarClick(Sender: TObject);
begin
Close
end;
11
Finalmente al ejecutar el formulario Form2 se debe mostrar así:

5) Diferentes sistemas de conversión


Desarrollemos una aplicación que convierta grados centígrados a Farenheit y viceversa.
Siga estos pasos para diseñar la interfaz:
1. Crear una aplicación con formulario
2. Seguidamente añadir los siguientes controles: 1 control Image, 4 controles Label,
4 controles Edit y 1 Control BitBtn.
3. Seleccione el control Image1 y en el Inspector de Objetos, haga doble clic en la
columna derecha de la propiedad Picture. Delphi visualiza el cuadro de dialogo
Picture Editor.
4. Haga clic en el botón Load. Delphi visualiza el cuadro de dialogo Load Picture.
5. Sitúese en la carpeta Imágenes, seleccione la imagen Computadora.jpg y haga
clic en el botón abrir. Delphi regresa al cuadro de dialogo Picture Editor quq ahora
muestra la imagen seleccionada.
6. Haga clic en el botón OK. En el control Image1 aparece la imagen seleccionada.
7. Modifique las propiedades de los componentes:

Control Propiedad Valor


Form1 Caption Conversión de Temperaturas
Label1 Caption Grados &centigrados
Label2 Caption Grados &farenheit
Label3 Caption Grados &kelvin
Label4 Caption Grados &rankine
Edit1 Text ‘ ‘
Edit2 Text ‘ ‘
Edit3 Text ‘ ‘
Edit4 Text ‘ ‘
BitBtn Caption &Salir
Kind bkAbort

12
Establecidas las propiedades de los controles, la interfaz de usuario debe tener el
siguiente aspecto:

Luego de diseñar la interfaz de usuario, el paso siguiente consiste en unir código a los
controles del formulario. El código debe realizarse de manera tal que cuando ingresemos
una temperatura (grados centígrados) en el control Edit1 y pulsemos Enter, los controles
Edit2, Edit3 y edit4 deben mostrar las conversiones en grados farenheit, kelvin y rankine,
respectivamente. La figura es que si ingresamos una temperatura en un control Edit y
pulsamos Enter, en el resto de los controles Edit deben mostrar la conversión
correspondiente.
Formula de conversión:

Vinculemos un procedimiento común a los controles Edit1, Edit2, Edit3 y Edit4.


1. En el formulario haga clic en el control Edit1 para seleccionarlo
2. Sitúese en la ficha Events del Inspector de Objetos y haga doble Clic e el evento
OnKeyPress.
3. Digite el siguiente código:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var GradosCentigrados, GradosFahrenheit, GradosKelvin, GradosRankine :
Double;
EditBox : TEdit;
begin
EditBox:=TEdit(Sender);
case ord(Key) of
13 : begin
if sender=Edit1 then
begin
13
GradosCentigrados:=StrToFloat(Edit1.Text);
GradosFahrenheit:=GradosCentigrados*9/5 + 32;
GradosKelvin:=GradosCentigrados + 273;
GradosRankine:=GradosCentigrados*9/5 + 492;
Edit2.Text:=FloatToStr(GradosFahrenheit);
Edit3.Text:=FloatToStr(GradosKelvin);
Edit4.Text:=FloatToStr(GradosRankine);
end;
if sender=Edit2 then
begin
GradosFahrenheit:=StrToFloat(Edit2.Text);
GradosCentigrados:=(GradosFahrenheit - 32)*5/9;
GradosKelvin:=(GradosFahrenheit - 32)*5/9 + 273;
GradosRankine:=GradosFahrenheit + 460;
Edit1.Text:=FloatToStr(GradosCentigrados);
Edit3.Text:=FloatToStr(GradosKelvin);
Edit4.Text:=FloatToStr(GradosRankine);
end;
if sender=Edit3 then
begin
GradosKelvin:=StrToFloat(Edit3.Text);
GradosCentigrados:=GradosKelvin - 273;
GradosFahrenheit:=(GradosKelvin - 273)*9/5 + 32;
GradosRankine:=(GradosKelvin - 273)*9/5 + 492;
Edit1.Text:=FloatToStr(GradosCentigrados);
Edit2.Text:=FloatToStr(GradosFahrenheit);
Edit4.Text:=FloatToStr(GradosRankine);
end;
if sender=Edit4 then
begin
GradosRankine:=StrToFloat(Edit4.Text);
GradosCentigrados:=(GradosRankine - 492)*5/9;
GradosFahrenheit:=GradosRankine - 460;
GradosKelvin:=(GradosRankine - 492)*5/9 + 273;
Edit1.Text:=FloatToStr(GradosCentigrados);
Edit2.Text:=FloatToStr(GradosFahrenheit);
Edit3.Text:=FloatToStr(GradosKelvin);
end;
end;
46 : if Pos('.',EditBox.Text)<>0 then Key:=#0;
8,48..57 :
else
Key:=#0;
end;
end;

4. Seleccione el control Edit2, sitúese en la ficha Events del Inspector de Objetos y,


en el evento OnKeyPress, elija Edit1KeyPres.
14
5. Repita el paso 4 para los controles Edit3 y Edit4

Vincule un procedimiento al control BitBtn1 que finalice la ejecución del programa


cuando el usuario haga doble clic en este botón.
Programa ejecutándose:

15

También podría gustarte