Dialog Examples/es

From Free Pascal wiki
Jump to navigationJump to search

Deutsch (de) English (en) español (es) suomi (fi) français (fr) 日本語 (ja) polski (pl) русский (ru) slovenčina (sk) 中文(中国大陆)‎ (zh_CN)

Algunos diálogos útiles

   Aquí tenemos algunos diálogos útiles, que no aparecen en la Paleta de Componentes:

   Cada uno de ellos da lugar a la aparición de una ventana emergente, que contiene cierta información y espera una respuesta del usuario: presionar un botón, introducir algún texto o ambas cosaa. Los programadores tienen poco control sobre el formato, tamaño o posición de estas ventanas, pero pueden cambiar su contenido textual.
   La razón de que haya varias alternativas es permitir diferentes métodos de crear la ventana y de recibir datos de respuesta para procesar en nuestro código.

Diálogos con mensaje

   Las ventanas de diálogo con mensaje muestran un mensaje y esperan que se salga de ellos mediante la pulsación de unos de los botones que muestran, o cerrando la ventano con cualquier otra opción disponible.

ShowMessage

<delphi> Procedure ShowMessage (const Msg: string); {el procedimiento está definido en la unidad Dialogs.pp}</delphi>

   Es la ventana de diálogo más simple: recibe una cadena como parámetro, y la muestra en una ventana predefinida, con un botón (OK o Aceptar) y un icono de Información. El diálogo se muestra hasta que se cierra con alguna de las opciones posibles: pulsar el único botón o el aspa de la barra de título.
  La ventana del diálogo es modal, es decir, se muestra, toma el foco y no permite interacción con la aplicación que la originó.

Ejemplo: <delphi> Program UnMensajeConLazarus;

 Uses Dialogs;
 var  mi_mensaje: string;
 begin
   mi_mensaje:= 'Este es un texto que se extiende a lo largo de'#13'de dos líneas';
   ShowMessage (mi_mensaje);
 end.</delphi>

   (nota: cómo se puede ver en el ejemplo el const de la definición del procedimiento significa que no es necesaria una variable, aunque se puede utilizar una variable si lo queremos. Así mismo vemos que los mensajes los podemos dividir en las líneas que deseemos mediante #13, esto lo podemos usar en todos los cuadros de los que hablamos aquí)

Lazarus ShowMessage.png

MessageBox

<delphi> Function Application.MessageBox (Mensaje, Titulo: PChar; Marcadores: longint) : Integer;</delphi>

   Función definida en Forms.pp como parte de TApplication, de ahí que tengamos que usarla de esta forma: Application.Messagebox ( ); o bien utilizando la construcción 'With Application do ...'].

   Sus parámetros:

  • Mensaje: El texto del mensaje que queremos mostrar al usuario;
  • Titulo: El título de la ventana del cuadro de diálogo;
  • Marcadores: Un entero construido al sumar varias constantes (definidas en el módulo LCLType) que definen el icono y botones que mostrará el cuadro, por ejemplo MB_ABORTRETRYIGNORE + MB_ICONQUESTION hará que se muestre un signo de interrogación (?) y tres botones: Abortar, Reintentar e Ignorar.

   La función devuelve un valor entero que corresponde al botón que se presionó; su valor se puede determinar por referencia a las constantes [IDOK..IDHELP]

  Si no necesitamos el valor del botón pulsado la podemos invocar cómo un procedimiento, en Pascal no es obligatorio recoger el valor devuelto por una función - véase el ejemplo siguiente:

   Ejemplo: <delphi> Uses Forms, Dialogs, LCLType;

Procedure MuestraMessageBox;
 var resp, estilo: integer;
   texto: pchar;
begin
  with application do
    begin
     estilo :=  MB_ABORTRETRYIGNORE + MB_ICONQUESTION;
     resp :=  MessageBox ('Pulsa un botón', 'Ejemplo de MessageBox', estilo); //recogemos el valor de la función
     case resp of
       IDABORT: texto := 'Abortar';
       IDRETRY: texto :=  'Reintentar';
       IDIGNORE: texto := 'Ignorar';
       else texto := 'Has cerrado el cuadro con el aspa: ';
     end; //case
     MessageBox (texto, 'Respuesta', MB_ICONHAND); // no recogemos el valor devuelto por MessageBox
    end; //with   
end; //procedmiento</delphi>
Lazarus MessageBox.png Lazarus MessageBoxRespuesta.png

http://lazarus-ccr.sourceforge.net/kbdata/MessageBoxDemo.png http://lazarus-ccr.sourceforge.net/kbdata/ReplyYes.png

MessageDLG

<delphi> function MessageDlg(const Msj: string; tipo: TMsgDlgType; Botones: TMsgDlgButtons; AyudaCtx: Longint): Integer;

function MessageDlg(const Titulo, Msj: string; Tipo: TMsgDlgType; Butones: TMsgDlgButtons; AyudaCtx: Longint): Integer;</delphi>

ver Tipos de mensaje:TMsgDlgType

   Hay dos versiones de esta función, por ejemplo, primero el parámetro 'Caption'; si se omite, se pierde la etiqueta del cuadro.

  Es el más completo y elaborado de los cuadros de diálogo, y permite al programador un considerable control sobre su aspecto.    Los parámetros que definen el tipo de cuadro y su icono son tipos, más que constantes enteras, y los botones se pueden especificar como un conjunto entre corchetes, por ejemplo [mbRetry, mbIgnore, mbAbort, mbCancel].   El parámetro HelpCtx no está implementado actualmente y se le debe asignar el valor cero.   El valor devuelto por la función es idéntico al botón presionado, expresado como un entero (véanse las definiciones siguientes, [mrNone..mrAll]).

Ejemplo: <delphi> Uses forms, dialogs, lcltype, controls;

procedure TryMessageDlg;
begin
  if MessageDlg ('Question', 'Do you wish to Execute?', mtConfirmation, 
                 [mbYes, mbNo, mbIgnore],0) = mrYes
  then { Execute rest of Program };
 end;</delphi>
http://lazarus-ccr.sourceforge.net/kbdata/Question.png

Diálogos de entrada de texto

InputBox

Diáogos de entrada de texto: muestran un mensaje y esperan que el usuario introduzca un texto. <delphi>

Function InputBox(const ACaption, APrompt, ADefault : String) : String;

</delphi> Muestran un cuadro con un título y una indicación definido y esperan que el usuario introduzca un texto. Opcionalmente, se puede mostrar una cadena por omisión en el cuadro de texto. Lo introducido por el usuario o la cadena por omisión se devuelve como el resultado de la función.

Ejemplo: <delphi>

Uses forms, lcltype, dialogs, controls;

procedure TryInputBox;
var userstring: string;
begin
  userstring := InputBox ('Get some text input', 
                         'Please type in some   information', 'Some sample text');
  ShowMessage (userstring)
end;

</delphi>

InputQuery

Function InputQuery(const ACaption, APrompt : String;
                    MaskInput : Boolean; var Value : String) : Boolean;
Function InputQuery(const ACaption, APrompt : String;
                    var Value : String) : Boolean;

</delphi> Existen dos versiones de esta función que muestra una indicación y espera que el usuario introduzca los datos en forma de texto. La primera incluye un parámetro booleano MaskInput que determina si lo introducido por el usuario se sustituye por asteriscos en el cuadro de entrada de texto (como cuando se escribe una contraseña), mientras que la segunda omite esta propiedad. El texto introducido por el usuario se devuelve en el parámetro variable 'Value'; el resultado de la función es un booleano que devuelve TRUE si se presionó el botón ACEPTAR, o FALSE si el cuadro se cerró de otra forma (por ejemplo, pulsando el icono 'Cerrar' de la barra de título). Omitir el parámetro MaskInput equivale a asignarle FALSE.

Ejemplo: <delphi>

Uses forms, lcltype, dialogs, controls;

procedure TryInputQuery;
var QueryResult: boolean;
  userstring: string;
begin
  if InputQuery ('Question', 'Type in some data', TRUE, userstring)
  then ShowMessage (userstring)
  else 
  begin
    InputQuery ('Dont be silly', 'Please try again', userstring);
    ShowMessage (userstring)
  end
end;

</delphi>

http://lazarus-ccr.sourceforge.net/kbdata/MessageDlgQuestion.png
http://lazarus-ccr.sourceforge.net/kbdata/DontBeSillly.png

PasswordBox

<delphi>

Function PasswordBox(const ACaption, APrompt : String) : String;

</delphi> Se comporta de forma parecida a la función InputQuery con MaskInput = TRUE; la diferencia es que la contraseña que se escriba se devolverá como el resultado de la función (como InputBox).

Varias constantes y tipos importantes que se usan en los cuadros de diálogo están predefinidas en la biblioteca LCL:

const { Definida en LCLType.pp }

Constantes enteras para definir tipos de botones e iconos que se muestran en MessageBox: <delphi>

MB_OK = $00000000;
MB_OKCANCEL = $00000001;
MB_ABORTRETRYIGNORE = $00000002;
MB_YESNOCANCEL = $00000003;
MB_YESNO = $00000004;
MB_RETRYCANCEL = $00000005;


MB_ICONHAND = $00000010;
MB_ICONQUESTION = $00000020;
MB_ICONEXCLAMATION = $00000030;
MB_ICONASTERICK = $00000040;
MB_ICONWARNING = MB_ICONEXCLAMATION;
MB_ICONERROR = MB_ICONHAND;
MB_ICONINFORMATION = MB_ICONASTERICK;

</delphi> Constantes enteras que definen el valor devuelto desde MessageBox según el botón que se presione: <delphi>

IDOK = 1; 	ID_OK = IDOK;
IDCANCEL = 2;	ID_CANCEL = IDCANCEL;
IDABORT = 3;	ID_ABORT = IDABORT;
IDRETRY = 4;	ID_RETRY = IDRETRY;
IDIGNORE = 5;	ID_IGNORE = IDIGNORE;
IDYES = 6;	ID_YES = IDYES;
IDNO = 7;	ID_NO = IDNO;
IDCLOSE = 8;	ID_CLOSE = IDCLOSE;
IDHELP = 9;	ID_HELP = IDHELP;

</delphi> Definen si el botón por omisión es el primero, el segundo o el tercero: <delphi>

MB_DEFBUTTON1 = $00000000;
MB_DEFBUTTON2 = $00000100;
MB_DEFBUTTON3 = $00000200;
MB_DEFBUTTON4 = $00000300;

</delphi> El parámetro Flags de MessageBox está construido al añadir una constante botón [MB_OK..MB_RETRYCANCEL], una constante icono [MB_ICONHAND..MB_ICONINFORMATION] y una constante opcional, botón por defecto [MB_DEFBUTTON1..MB_DEFBUTTON3]

Los tipos que se utilizan en MessageDlg, los cuales necesitan parámetros AType de TMsgDlgType y AButtons de TMSgDlgButtons:

{ Definido en Dialogs.pp }

<delphi>

type
 TMsgDlgType    = (mtWarning, mtError, mtInformation,  mtConfirmation,
                   mtCustom);
 TMsgDlgBtn     = (mbYes, mbNo, mbOK, mbCancel, mbAbort, mbRetry, mbIgnore,
                  mbAll, mbNoToAll, mbYesToAll, mbHelp, mbClose);
 TMsgDlgButtons = set of TMsgDlgBtn;
 
const
 mbYesNoCancel = [mbYes, mbNo, mbCancel];
 mbOKCancel = [mbOK, mbCancel];
 mbAbortRetryIgnore = [mbAbort, mbRetry, mbIgnore];
 
 MsgDlgBtnToBitBtnKind: array[TMsgDlgBtn] of TBitBtnKind = (
  bkYes, bkNo, bkOK, bkCancel, bkAbort, bkRetry, bkIgnore,
   bkAll, bkNoToAll, bkYesToAll, bkHelp, bkClose
  );

 BitBtnKindToMsgDlgBtn: array[TBitBtnKind] of TMsgDlgBtn = (
   mbOk, mbOK, mbCancel, mbHelp, mbYes, mbNo,
   mbClose, mbAbort, mbRetry, mbIgnore, mbAll, mbNoToALl, mbYesToAll
   );

{ Definido en Controls.pp }
const
 mrNone = 0;
 mrOK = mrNone + 1;
 mrCancel = mrNone + 2;
 mrAbort = mrNone + 3;
 mrRetry = mrNone + 4;
 mrIgnore = mrNone + 5;
 mrYes = mrNone + 6;
 mrNo = mrNone + 7;
 mrAll = mrNone + 8;
 mrNoToAll = mrNone + 9;
 mrYesToAll = mrNone + 10;
 mrLast = mrYesToAll;

</delphi>

Sobre las ventanas de diálogo: Referencia de la unidad Dialogs: Procedimientos y fucniones

Créditos

Traducción original por Mgsalvador

Reescritura, formato más legible, estampas y ejemplos más ilustrativos. Iskraelectrica. 2008/06/14

Esta página se ha importado desde el epikwiki version.