Aprendiendo BORLAND Delphi. Marta Sananes Universidad de Los Andes, Venezuela. Mayo 2002.

HolaLee
 
 
Este ejemplo muestra uso de diálogos para entrada de datos de estilos predefinidos, contenidos también en la Delphi-Unit Dialog. Este programa simula parte de un Sistema de Información que toma datos personales de alumnos. En un sistema real los datos se almacenarían en forma persistente, posiblemente incorporándose a una Base de Datos -lo cual tamibién se puede hacer con Delphi- para su posterior uso y mantenimiento. El texto del programa en lenguaje ObjectPascal (OP) aparece a la izquierda con fondo gris pizarra, a la derecha con fondo verde, hay notas explicativas. En el archivo de programa en este caso (.dpr) el texto escrito por el programador está en color blanco. 

HolaLee.dpr
 
program HolaLee;
uses Dialogs;
Para preparar este programa:
Proceda igual que para el Programa HolaCons, pero asignando el nombre HolaLee
type tipo = (entero, flotante,doble); Definición de tipo como tipo enumerado.
var s, nombre, apellido: string;
    edad, coderr: integer;
    peso, estatura: real;
    estado: boolean;
Variables definidas para alojar valores de atributos de cada alumno.
procedure EntradaDato
          (Letrero, Mensaje: string;
           Var x;
           li, ls: double; t: tipo);
var n: integer; a: real; b: double;

begin
 repeat
  s:='';

Procedimiento: Código reutilizable, en este caso para lectura y validación de datos. Cada utilización se configura con argumentos asignados a los parámetros formales.
Observe la declaración del parámetro x, precedido por la palabra var, lo que indica que se trata de una referencia a la variable que se use como argumento en el entorno donde se invoque -se llame- al procedimiento. Los valores de parámetros sin calificativo se guardan localmente y sólo son modificables internamente.
  estado:=InputQuery(Letrero,Mensaje,s); InputQuery: función residente en la Unit Dialogs. Si el usuario no cancela, recoge valor del string introducido y lo entrega por el argumento de referencia a la variable global s.
  if estado then
  begin
    case t of
    entero: begin
El parámetro t es de tipo enumerado tipo, por lo tanto es también de tipo ordenado y su valor puede usarse como discriminador en una instrucción case
              Val(s,n,coderr); b:=n; El procedimientoVal convierte el valor del primer parámetro de tipo string a valor numérico, el cual retorna por la referencia del segundo parámetro. La conversión la hace de acuerdo al tipo del argumento correspondiente a este segundo parámetro. En caso de encontrarse algún caracter inválido, se retorna en el tercer parámetro su posición relativa al 
origen del string. Si no, se retorna 0.
Equivalentemente se pueden usar las funciones StrTo.... (Unit SysUtils) para convertir a diversos tipos. En ese caso para detectar error de conversión, hay que ponerlas dentro de un bloque de manejo de excepciones try ... except.
(Ver Help de Delphi)
            end;
  flotante: begin
              Val(s,a,coderr);b:=a;
            end;
     doble: begin Val(s,b,coderr); end;
    end; {case}
    if coderr <> 0 then estado:=false
    else
    if (b < li) or (b > ls) then
       estado:=false;
  end;
 until estado;
Observe las otras aplicaciones del procedimiento Val para conversión a otros tipos numéricos. 
Observe también como la instrucción de control repeat ... until obliga al usuario a continuar introduciendo el dato requerido hasta que sea correcto.
 case t of
   entero: Integer(x):=Trunc(b);
 flotante: Real(x):=b;
    doble: Double(x):=b;
 end;
Observe las asignaciones a la referencia x de tipo indefinido utilizando la facilidad de typecast, la cual permite forzar a que el argumento de la expresión sea tratado de acuerdo al identificador de tipo especificado por el typecast.
Se puede usar typecast de variables tanto a la derecha como a la izquierda en expresiones de asignación.
end; Fin de definición del procedimiento EntradaDato.
// Cuerpo programa principal
begin
 nombre:=InputBox('Identificación',
         'Escribe tu nombre','Alumno');
 apellido:=''; 
 estado:=InputQuery('Identificación',
         'Escribe tu apellido',apellido);
 if (not estado) or (apellido = '')
 then apellido:='Nivelación Postgrado';
 ShowMessage('Hola '+nombre+' '+apellido);
Observe el comentario estilo lenguaje C++, disponible en Delphi además de los estilos  tradiconales de Pascal {...} y TurboPascal (* ... *).
Observe las llamadas a las funciones InputBox y ShowMessage, ambas residentes en la Unit Dialogs. Consulte el Help.

Si el usuario no asigna nombre o apellido, se asignan valores por defecto.

 EntradaDato('Edad','Escribe tu edad',
              edad,20,80,entero); 
 EntradaDato('Peso en Kg.','Escribe tu peso',
              peso,50,120,flotante); 
 EntradaDato('Estatura en cm.',
             'Escribe tu estatura',
              estatura,140,200,doble);
 ShowMessageFmt
 ('Edad: %d años Peso: %f Kg. Estatura %f cm.',
 [edad,peso,estatura]);
Observe las llamadas a la función definida por el programador EntradaDato con la asignación de valores a los parámetros para adpatarla a cada requerimiento de datos.
Observe la llamada a las función ShowMessageFmt, residente en la Unit Dialogs. Observe el uso de string de formato estilo lenguaje C y la forma del argumento para el segundo parámetro de tipo array of const. Consulte el Help.
end. Fin de definición del programa.