7- Diálogos estándar del sistema
Curso: Introducción a Delphi y Lazarus
7- Diálogos estándar del sistema
Introducción a Delphi y Lazarus, por Nacho CabanesDentro de la pestaña "Additional" de la barra de componentes tenemos botones para acceder a ciertas ventanas estándar de Windows, como la de "Abrir", la de "Guardar", la de elegir tipo de letra, etc. Los iconos que las representan son los siguientes:
OpenDialog es la ventana de diálogo estándar para "Abrir" un archivo.
SaveDialog es la ventana de diálogo estándar para "Guardar" un archivo.
FontDialog es la ventana de diálogo estándar para escoger un tipo de letra.
ColorDialog es la ventana de diálogo estándar para escoger un cierto color.
Para mostrar cualquiera de estas ventanas estándar se usa su método Execute (realmente se trata de una función, que devuelve un valor boolean: FALSE si se cancela la ventana o TRUE si se acepta). Por ejemplo, podríamos crear un mini-programa que permitiese acceder a estas cuatro ventanas, pulsando ciertos botones.
La respuesta a la pulsación de cada una de estas teclas sería simplemente así:
procedure TForm1.btAbrirClick(Sender: TObject);begin
OpenDialog1.Execute;
end;
procedure TForm1.btColorClick(Sender: TObject);
begin
ColorDialog1.Execute;
end;
procedure TForm1.btFuenteClick(Sender: TObject);
begin
FontDialog1.Execute;
end;
procedure TForm1.btGuardarClick(Sender: TObject);
begin
SaveDialog1.Execute;
end;
Al pulsar el primero de los botones aparecería la ventana de "Abrir" habitual en Windows:
(Nota: convendría que escribiésemos, desde el Inspector de Objetos, en la propiedad "FileName" de nuestro "OpenDialog" el valor "*.*", para que en la lista se nos muestren todos los ficheros; también podríamos cambiar la lista de tipo de archivos permitidos, con la popiedad "Filter").
Si queremos leer el nombre del fichero que se ha elegido (o tecleado) en esta ventana, usaríamos construcciones como:
nombreFichero := OpenDialog1.Filename;
De formas similares podríamos leer la fuente (Font) que se ha escogido en un FontDialog o el color de un ColorDialog.
Pero hay otro tipo de ventanas que son también muy frecuentes en Windows. Son las ventanas de aviso, información, etc., que muestran un mensaje y uno o varios botones.
La más sencilla es simplemente una ventana que muestra un texto, y en cuya barra de título aparece el nombre de nuestra aplicación. Se accede a ella con "ShowMessage".
procedure TForm1.btSaludarClick(Sender: TObject);
begin
ShowMessage( 'Hola!');
end;
y el resultado sería:
Otras ventanas algo más desarrolladas son las que aparecen en Windows con una cierta frecuencia, mostrando un texto junto con una admiración, un símbolo de stop, etc. Se accede a ellas con MessageDlg. Un ejemplo de su uso sería el siguiente código:
procedure TForm1.btPreguntarClick(Sender: TObject);
var
Respuesta: integer;
begin
Respuesta := MessageDlg('¿Guardar los cambios?', mtConfirmation,
[mbYes, mbNo, mbCancel], 0);
case Respuesta of
mrYes: (*GuardarCambios*);
mrNo: (*SalirSinGuardar*);
mrCancel: (*NoSalir*);
end;
end;
donde:
- El primer texto es el que queremos que aparezca en la ventana
- mtConfirmation es el tipo de ventana: una ventana que pide confirmación y que muestra la palabra "Confirm" en su barra de título y el dibujo. Otros ejemplos de valores posibles son: mtWarning, mtError y mtInformation.
- mbYes, mbNo y mbCancel son los botones que queremos que aparezcan. Se indica entre corchetes porque se trata de un conjunto (set) de valores. Otros ejemplos de valores posibles son mbOk, mbAbort, mbRetry, mbIgnore, mbHelp o mbAll.
- Nos devuelve un valor, que podemos contrastar con ciertas constantes predefinidas, como mrYes, mrNo, mrCancel, mrOK, mrAbort, mrRetry, mrClose, mrHelp.
Esta ventana quedaría así:
Eso sí, para los que hablamos español y hacemos programas en español, esta ventana tiene un claro problema: tanto el título como los botones están en inglés. Se debe a que son funciones creadas por Delphi/Lazarus. Para que aparezcan en el idioma que tengamos configurado en Windows, deberíamos emplear la función del API de Windows llamada MessageBox. Un ejemplo de su uso es:
resultado := Application.MessageBox('Confirme que desea cambiar el color',
'Confirmación', MB_OkCancel + MB_IconQuestion
);
que devuelve un valor como IDOK o IDCANCEL.
pero es más incómoda de manejar, porque se trata de una función inicialmente diseñada para ser usada desde lenguaje C, y los parámetros de texto no son "strings" de Pascal, sino "pChar" (los punteros a carácter típicos del lenguaje C), así que no daré más detalles por ahora. Quien quiera saber más, puede consultar la ayuda que incluye Delphi sobre el API de Windows (en Lazarus hay mucha menos ayuda en línea, y además en la versión 0.9.22 de Lazarus este cuadro de mensaje también aparece en inglés).
Aun así, en Lazarus existe la posibilidad de traducir nosotros mismos los textos que aparecen en los botones. Dichos textos se encuentran (al menos en la versión 0.9.22) en el fichero "lclstrconsts.pas", que está en la carpeta "lcl".
Actualizado el: 09-04-2007 02:10