Difference between revisions of "Dialog Examples/es"

From Free Pascal wiki
Jump to navigationJump to search
m (Fixed syntax highlighting)
 
(79 intermediate revisions by 7 users not shown)
Line 1: Line 1:
 
{{Dialog Examples}}
 
{{Dialog Examples}}
 
[[category:Castellano|D]][[category:Español|D]]
 
[[category:Castellano|D]][[category:Español|D]]
 +
[[Category:LCL/es]][[Category:GUI/es]]
 
= Algunos diálogos útiles =
 
= Algunos diálogos útiles =
Aquí tenemos algunos diálogos útiles, que no aparecen en la Paleta de Componentes:
+
   Aquí tenemos algunos diálogos útiles, que no aparecen en la Paleta de Componentes:
  
* procedimiento ShowMessage (const Msg: string);
+
* procedimiento [http://lazarus-ccr.sourceforge.net/docs/lcl/dialogs/showmessage.html ShowMessage (const Msg: string);]
* función MessageBox (Text, Caption : PChar; Flags: Word): Integer;
+
* función [http://lazarus-ccr.sourceforge.net/docs/lcl/forms/tapplication.messagebox.html MessageBox (Text, Caption : PChar; Flags: Word): Integer;]
* función MessageDlg (const Msg: string; AType: TMsgDlgType; AButtons: TMsgDlgButtons; HelpCtx: LongInt): Word;
+
* función [http://lazarus-ccr.sourceforge.net/docs/lcl/dialogs/messagedlg.html MessageDlg (const Msg: string; AType: TMsgDlgType; AButtons: TMsgDlgButtons; HelpCtx: LongInt): Word;]
* función InputBox (const ACaption, APrompt, ADefault: string); string;
+
* función [http://lazarus-ccr.sourceforge.net/docs/lcl/dialogs/inputbox.html InputBox (const ACaption, APrompt, ADefault: string); string;]
* función InputQuery (const ACaption, APrompt: string; var Value: string): Boolean;
+
* función [http://lazarus-ccr.sourceforge.net/docs/lcl/dialogs/inputquery.html InputQuery (const ACaption, APrompt: string; var Value: string): Boolean;]
* función PasswordBox(const ACaption, APrompt : String) : String;
+
* función [http://lazarus-ccr.sourceforge.net/docs/lcl/dialogs/passwordbox.html PasswordBox(const ACaption, APrompt : String): String;]
  
Cada uno de esos componentes da lugar a la aparición de un pequeño cuadro emergente, que contiene cierta información y pide una respuesta del usuario: presionar un botón, introducir algún texto o ambos. Los programadores tienen poco control sobre el formato, tamaño o posición de esos cuadros emergentes, pero pueden cambiar su contenido textual.<br>
+
&nbsp;&nbsp;&nbsp;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.<br>
La razón de que a menudo haya varias alternativas parecidas es permitir diferentes métodos de llamar al componente y recibir datos de respuesta desde el procedimiento o la función.
+
&nbsp;&nbsp;&nbsp;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==
 
==Diálogos con mensaje==
Los diálogos con mensaje muestran un mensaje y esperan que se presione una tecla o se haga clic con el ratón.
+
&nbsp;&nbsp;&nbsp;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 ventana con cualquier otra opción disponible.
  
===ShowMessage===
+
===[http://lazarus-ccr.sourceforge.net/docs/lcl/dialogs/showmessage.html ShowMessage]===
Procedure ShowMessage (const Msg: string);
+
<syntaxhighlight lang=pascal> Procedure ShowMessage (const Msg: string);
+
{el procedimiento está definido en la unidad ''Dialogs.pp''}</syntaxhighlight>
{ Definido en Dialogs.pp }
 
  
Es el cuadro de diálogo más simple: lleva una cadena sencilla como parámetro, lo muestra en una caja predefinida, y espera un clic de ratón o la pulsación de una tecla antes de volver a la rutina o programa que lo llamó.<br>
+
&nbsp;&nbsp;&nbsp;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.<br>
Esta ventana es modal, es decir, se muestra el cuadro de diálogo, recibe el foco y no lo pierde hasta que se pulsa Aceptar u otra tecla.
+
&nbsp;&nbsp;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:
 
Ejemplo:
 +
<syntaxhighlight lang=pascal> 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.</syntaxhighlight>
  
Program LazMessage;
+
&nbsp;&nbsp;&nbsp;(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'', ''sLineBreak'' o ''LineEnding'', esto lo podemos usar en todos los cuadros de los que hablamos aquí)
Uses Dialogs;
+
<center>[[Image:Lazarus_ShowMessage.png]]</center>
begin
 
  ShowMessage ('This is a message from Lazarus')
 
end.
 
  
===MessageBox===
+
===[http://lazarus-ccr.sourceforge.net/docs/lcl/forms/tapplication.messagebox.html MessageBox]===
Function Application.MessageBox (Text, Caption: PChar; Flags: longint) : Integer;
+
<syntaxhighlight lang=pascal> Function Application.MessageBox (Mensaje, Titulo: PChar; Marcadores: longint) : Integer;</syntaxhighlight>
 
Definido en Forms.pp como parte de TApplication; de ahí que deba ser llamado como Application.Messagebox ( ) o utilizando el constructor 'With Application do ...'.
 
  
Sus parámetros:
+
&nbsp;&nbsp;&nbsp;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 ...'].
  
* Text: la cadena que se muestra como una indicación o instrucción en el cuadro;
+
&nbsp;&nbsp;&nbsp;Sus parámetros:
* Caption: la etiqueta de cadena que hay en la parte superior del cuadro de diálogo;
 
* Flags: longint - un entero construido al unir varias constantes (definidas en el módulo LCLType) para definir los contenidos y comportamiento del cuadro, por ejemplo MB_ABORTRETRYIGNORE + MB_ICONQUESTION producirá que la aplicación muestre un signo de interrogación (?) en un cuadro con tres botones: ABORTAR REINTENTAR IGNORAR.
 
  
La función devuelve un valor entero que corresponde al botón que se presione; su valor se puede determinar por referencia a las constantes [IDOK..IDHELP]
+
* 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.
  
Si no necesitamos el valor del botón pulsado la podemos invocar cómo un procedimiento - véase el ejemplo siguiente)
+
&nbsp;&nbsp;&nbsp;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]
  
Ejemplo:
+
&nbsp;&nbsp;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:
  
Uses Forms, Dialogs, LCLType;
+
&nbsp;&nbsp;&nbsp;Ejemplo:
 +
<syntaxhighlight lang=pascal> Uses Forms, Dialogs, LCLType;
 
   
 
   
 
  Procedure MuestraMessageBox;
 
  Procedure MuestraMessageBox;
  var resp, estilo: integer;
+
  var resp, estilo: integer;
  begin
+
    texto: pchar;
    with application do begin
+
begin
      estilo :=  MB_ICONQUESTION + MB_YESNO;
+
  with application do
      resp :=  MessageBox ('Pulsa uno de los botones', 'Ejemplo de MessageBox', estilo); //recogemos el valor
+
    begin
      if resp = IDYES then
+
      estilo :=  MB_ABORTRETRYIGNORE + MB_ICONQUESTION;
              MessageBox ('Sí', 'Respuesta',MB_ICONINFORMATION) // no recogemos el valor devuelto por la función
+
      resp :=  MessageBox ('Pulsa un botón', 'Ejemplo de MessageBox', estilo); //recogemos el valor de la función
      else
+
      case resp of
              MessageBox ('No', 'Respuesta', MB_ICONHAND);
+
        IDABORT: texto := 'Abortar';
      end;
+
        IDRETRY: texto :=  'Reintentar';
  end;
+
        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</syntaxhighlight>
 +
<center>[[Image:Lazarus_MessageBox.png]]      [[Image:Lazarus_MessageBoxRespuesta.png]]
 +
http://lazarus-ccr.sourceforge.net/kbdata/MessageBoxDemo.png  http://lazarus-ccr.sourceforge.net/kbdata/ReplyYes.png
 +
</center>
 +
 
 +
===[http://lazarus-ccr.sourceforge.net/docs/lcl/dialogs/messagedlg.html MessageDlg]===
 +
<syntaxhighlight lang=pascal>function MessageDlg(const aMsg:String; DlgType:TMsgDlgType; Buttons:TMsgDlgButtons; HelpCtx:LongInt):Integer;
 +
function MessageDlg(const aCaption:String; const aMsg:String; DlgType:TMsgDlgType;
 +
                    Buttons:TMsgDlgButtons; HelpCtx:longInt):Integer;
 +
function MessageDlg(const aCaption:String; const aMsg:String; DlgType:TMsgDlgType;
 +
                    Buttons:TMsgDlgButtons; HelpCtx:LongInt;  DefaultButton:TMsgDlgBtn):Integer;
 +
function MessageDlg(const aCaption:String; const aMsg:String; DlgType:TMsgDlgType;  
 +
                    Buttons:TMsgDlgButtons; const HelpKeyword: String):Integer;</syntaxhighlight>
 +
:Ver [http://lazarus-ccr.sourceforge.net/docs/lcl/dialogs/tmsgdlgtype.html Tipos de mensaje(TMsgDlgType)], [http://lazarus-ccr.sourceforge.net/docs/lcl/dialogs/tmsgdlgbuttons.html Botones(TMsgDlgButtons)] [http://lazarus-ccr.sourceforge.net/docs/lcl/dialogs/tmsgdlgbtn.html Botones(TMsgDlgBtn)] Las dos clase de botones definen exactamente lo mismo¿¡!?)
  
<center> http://lazarus-ccr.sourceforge.net/kbdata/MessageBoxDemo.png  http://lazarus-ccr.sourceforge.net/kbdata/ReplyYes.png
+
&nbsp;&nbsp;&nbsp;Hay cuatro versiones de esta función, en la primera al omitir el título, se pondrá cómo título el identificador de la aplicación; en las demás podemos poner como título de la ventana el texto que nos convenga. En la tercera podemos especificar mediante el parámetro ''DefaultButton'' qué botón será el activo por defecto. En la cuarta podemos mostrar la ayuda especificada en ''HelpKeyword''.
</center>
 
  
===MessageDLG===
+
&nbsp;&nbsp;&nbsp;Es el más completo y elaborado de las ventanas de diálogo, y permite al programador un considerable control sobre su aspecto.
function MessageDlg(const aMsg: string; DlgType: TMsgDlgType;  
 
                    Buttons: TMsgDlgButtons; HelpCtx: Longint): Integer;
 
function MessageDlg(const aCaption, aMsg: string; DlgType: TMsgDlgType;
 
                    Buttons: TMsgDlgButtons; HelpCtx: Longint): Integer;
 
  
Hay dos versiones de esta función, por ejemplo, primero el parámetro 'Caption'; si se omite, se pierde la etiqueta del cuadro.
+
&nbsp;&nbsp;&nbsp;Los parámetros que definen el tipo de cuadro y el icono es un tipo enumerado, y los botones se pueden especificar como un conjunto entre corchetes, por ejemplo [mbRetry, mbIgnore, mbAbort, mbCancel].
  
Es el más completo y elaborado de los cuadros de diálogo, y permite al programador un considerable control sobre su aspecto.
+
&nbsp;&nbsp;&nbsp;''HelpCtx'' se utiliza para especificar qué tema del archivo de ayuda debe ser demostrado, o cero para no mostrar nínguno. Si se utiliza HelpKeyword se mostrará la ayuda de esa palabra.
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:
+
&nbsp;&nbsp;&nbsp;El valor devuelto por la función corresponde al botón presionado, expresado como un entero (ver más edelante las definiciones de [mrNone..mrAll]).
  
Uses forms, dialogs, lcltype, controls;
+
:Ejemplo:
 +
<syntaxhighlight lang=pascal> Uses forms, dialogs, lcltype, controls;
 
   
 
   
  procedure TryMessageDlg;
+
  procedure EstoSiQueEsUnMensaje;
  begin
+
  var tipo: TMsgDlgType;
  if MessageDlg ('Question', 'Do you wish to Execute?', mtConfirmation,  
+
        botones: TMsgDlgButtons;
                  [mbYes, mbNo, mbIgnore],0) = mrYes
+
  begin
  then { Execute rest of Program };
+
    tipo := mtWarning;
  end;
+
    botones:= [mbYesToAll, mbNoToAll];
 +
    MessageDlg ('Cosas para no olvidar', 'las personas son las que dan sentido,'#13+
 +
                              'coherencia y lógica a las cosas', tipo, botones,0);
 +
  end;</syntaxhighlight>
 +
<center> http://lazarus-ccr.sourceforge.net/kbdata/Question.png<br>
 +
 
 +
[[Image:Lazarus_MessageDlg.png]]</center>
 +
 
 +
=== El diálogo ''''QuestionDlg'''' ===
 +
&nbsp;&nbsp;&nbsp;El diálogo ''''QuestionDlg'''' permite cambiar los rótulos de los botones y determinar los botones predetermindo y de cancelar.
 +
&nbsp;&nbsp;&nbsp;Ejemplo:
 +
<syntaxhighlight lang=pascal>
 +
    case QuestionDlg ('Este es el Título','Este es el Mensaje',mtCustom,[mrYes,'Positivo', mrNo, 'Negativo', mrCancel,'Predetermindado'],'La ayuda') of
 +
        mrYes: QuestionDlg ('Este es el Título','Has elegido "Positivo"',mtCustom,[mrOK,'¡Muy bien!'],'');
 +
        mrNo:  QuestionDlg ('Este es el Título','¡Oh! has elegido "Negativo"',mtCustom,[mrOK,'Exacto'],'');
 +
        mrCancel: QuestionDlg ('Título','Has cancelado el diálogo con ESC o el botón "Predetermindado".',mtCustom,[mrOK,'Correcto'],'');
 +
    end;  
 +
</syntaxhighlight>
 +
<center> [[image:QuestionDlg_es_linux_qt.png‎]]
 +
</center>
  
 +
{{Nota|¡Si el usuario cancela el diálogo y no hay un botón definido como 'IsCancel', mrCancel será devuelto! Si quieres redirigir ESC/cerrar a u botón concreto utiliza el parámetro 'IsCancel' tras el botón deseado . (''Nota del traductor'', lo traduzco pero no consigo reproducir esta funcionalidad)}}
  
<center> http://lazarus-ccr.sourceforge.net/kbdata/Question.png
+
&nbsp;&nbsp;&nbsp;Ejemplos avanzados con botones (tomados de promptdialog.inc)
</center>
+
<syntaxhighlight lang=pascal>
 +
    [mrOk, '¡Vale!',mrCancel,'Cancela Ahora',mrIgnore, 'Ignorar',300,'¡Hazlo!','IsDefault']
 +
</syntaxhighlight>
 +
&nbsp;&nbsp;&nbsp;Se muestran cuatro botones:
 +
* '¡Vale' que devuelve ''mrOk''
 +
* 'Cancela Ahora'  que devuelve ''mrCancel''
 +
* 'Ignorar'  que devuelve ''mrIgnore''
 +
* '¡Hazlo!'  que devuelve ''300''. Este es el botón predeterminado (con el foco)
  
== Diálogos de entrada de texto ==
+
&nbsp;&nbsp;&nbsp;Es habitual que los botones en los diálogos de Lazarus tengan iconos. Con el fin de evitar que los iconos se muestren, se pueden utilizar valores no normalizados como resultado de los mensajes. El valor normalizado má alto hasta hoy es 11. Por ejemplo:
===InputBox===
 
Diáogos de entrada de texto: muestran un mensaje y esperan que el usuario introduzca un texto.
 
  
  Function InputBox(const ACaption, APrompt, ADefault : String) : String;
+
<syntaxhighlight lang=pascal>
 +
  case QuestionDlg ('Este es el Título','Este es el Mensaje',mtCustom,[20,'Positivo', 21, 'Negativo',22,'No lo sé','IsDefault'],'') of
 +
    20: QuestionDlg ('Este es el Título','Has dicho „Sí“',mtCustom,[20,'Eso está bien'],'');
 +
    21: QuestionDlg ('Este es el Título','¡Oh, has dicho „No“',mtCustom,[21,'Correcto'],'');
 +
    22: QuestionDlg ('Este es el Título','¡Entonces, averigüalo!',mtCustom,[22,'Tal vez'],'');
 +
  end;
 +
</syntaxhighlight>
 +
&nbsp;&nbsp;&nbsp;Con el fin de facilitar el trabajo, definiremos constantes. Por ejemplo:
  
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.
+
<syntaxhighlight lang=pascal>
 +
const
 +
  mrNoneNI=      20;
 +
  mrOkNI=        mrNoneNI+1;
 +
  mrCancelNI=    mrNoneNI+2;
 +
  mrAbortNI=    mrNoneNI+3;
 +
  mrRetryNI=    mrNoneNI+4;
 +
  mrIgnoreNI=    mrNoneNI+5;
 +
  mrYesNI=      mrNoneNI+6;
 +
  mrNoNI=        mrNoneNI+7;
 +
  mrAllNI=      mrNoneNI+8;
 +
  mrYesToAllNI=  mrNoneNI+10;
 +
  mrCloseNI=    mrNoneNI+11;
 +
  mrLastNI=      mrCloseNI;
 +
begin
 +
  case QuestionDlg ('Este es el Título','Este es el Mensaje',mtCustom,[mrYesN,'Positivo', mrNoNI, 'Negativo',22,'No lo sé','IsDefault'],'') of
 +
    20: QuestionDlg ('Este es el Título','Has dicho „Sí“',mtCustom,[mrYesNI,'Eso está bien'],'');
 +
    21:  QuestionDlg ('Este es el Título','¡Oh, has dicho „No“',mtCustom,[mrNoNI,'Correcto'],'');
 +
    22:  QuestionDlg ('Este es el Título','¡Entonces, averigüalo!',mtCustom,[mrCancelNI,'Tal vez'],'');
 +
  end;//case
 +
end;
 +
</syntaxhighlight>
 +
<center> [[File:QuestionDlg_esp_002.png]] </center>
  
Ejemplo:
+
== Diálogos de entrada de texto ==
 +
===[http://lazarus-ccr.sourceforge.net/docs/lcl/dialogs/inputbox.html InputBox]===
 +
&nbsp;&nbsp;&nbsp;Junto con el mensaje muestra una caja de edición para que el usuario pueda escribir un texto que será pasado a la aplicación.
 +
<syntaxhighlight lang=pascal> Function InputBox(const ATitulo, ACursor, ADefecto : String) : String;</syntaxhighlight>
 +
&nbsp;&nbsp;&nbsp;Se puede especificar el título de la Ventana (ATitulo), el mensaje que indicará al usuario que tipo de entrada de texto se espera que realice (ACursor) e incluso un texto ya predefinido (ADefecto). El texto escrito por el usuario o el proporcionado es devuelto a la aplicación como resultado de la función. La vnta muestr loa botones mbOK y mbCancel)
  
Uses forms, lcltype, dialogs, controls;
+
&nbsp;&nbsp;&nbsp;Ejemplo:
 +
<syntaxhighlight lang=pascal> Uses forms, lcltype, dialogs, controls;
 
   
 
   
  procedure TryInputBox;
+
  procedure VentanaEntradaTexto;
var userstring: string;
+
  var textoUsuario: string;
begin
+
  begin
  userstring := InputBox ('Get some text input',  
+
    textoUsuario := InputBox ('Introducción de texto por el usuario',
                          'Please type in some  information', 'Some sample text');
+
                            'Por favor, escribe algo aquí:',  
  ShowMessage (userstring)
+
                            'Si no quieres escribir, este es el texto que se devolverá');
end;
+
    ShowMessage (textoUsuario);
 +
  end</syntaxhighlight>
 +
<center>[[Image:Lazarus_InputBox.png]]</center>
 +
&nbsp;&nbsp;&nbsp;(nota: ojo con esta ventana, el texto de ''ACursor'' tiene un límite de longitud visible, ya que la ventana tiene un ancho y un alto limitado y fijo, y mostrará el texto en una única línea -al menos a día de hoy-)
  
===InputQuery===
+
===[http://lazarus-ccr.sourceforge.net/docs/lcl/dialogs/inputquery.html InputQuery]===
Function InputQuery(const ACaption, APrompt : String;
+
<syntaxhighlight lang=pascal> Function InputQuery(const ATitulo, ACursor : String; Enmascarar : Boolean; var TextoUsuario : String) : Boolean;
                    MaskInput : Boolean; var Value : String) : Boolean;
+
  Function InputQuery(const ATitulo, ACursor : String; var TextoUsuario : String) : Boolean;</syntaxhighlight>
  Function InputQuery(const ACaption, APrompt : String;
 
                    var Value : String) : Boolean;
 
  
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.
+
&nbsp;&nbsp;&nbsp;La función [http://lazarus-ccr.sourceforge.net/docs/lcl/dialogs/inputquery.html '''''InputQuery'''''],  que como [[Dialog_Examples#InputBox|''InputBox'']], permite al usuario introducir texto, tiene dos versiones; en la primera se utiliza el parámetro ''Enmascarar'' que indica si el texto que escribe el usuario se sustituye por asteriscos (valor ''true'') o no (''false''), como para escribir una contraseña; en la segunda se omite este parámetro, lo que equivale a  darle el valor ''false''. El texto introducido por el usuario se devuelve en el parámetro ''TextoUsuario'' (por eso es variable); la función devuelve ''true'' si se presionó el botón ''Aceptar'', o ''falso'' si se cerró la ventana de cualquier otra forma (por ejemplo, pulsando el icono 'X' de la barra de título).
  
Ejemplo:
+
&nbsp;&nbsp;&nbsp;Ejemplo:
 
+
<syntaxhighlight lang=pascal> Uses forms, lcltype, dialogs, controls;
Uses forms, lcltype, dialogs, controls;
 
 
   
 
   
 
  procedure TryInputQuery;
 
  procedure TryInputQuery;
var QueryResult: boolean;
+
  var respuesta: boolean;
  userstring: string;
+
      TextoUsuario: string;
begin
+
  begin
  if InputQuery ('Question', 'Type in some data', TRUE, userstring)
+
    respuesta := InputQuery ('Una cuestión de geografía', '¿Capital de Nicaragua?', true, TextoUsuario);
  then ShowMessage (userstring)
+
    if respuesta {= true} and (TextoUsuario = 'Managua') then
  else  
+
      ShowMessage ('Efectivamente ' + TextoUsuario + ' es la capital de Nicaragua')
  begin
+
    else
    InputQuery ('Don''t be silly', 'Please try again', userstring);
+
      begin
    ShowMessage (userstring)
+
        InputQuery ('Prueba de nuevo', 'No has pulsado ''OK'' o tu respuesta (' + TextoUsuario
  end
+
                                                      + ') no es la capital de Nicaragua', TextoUsuario);
end;
+
        ShowMessage (' Tu respuesta ha sido: ' + TextoUsuario);
 
+
      end;
<center> http://lazarus-ccr.sourceforge.net/kbdata/MessageDlgQuestion.png </center>
+
  end;</syntaxhighlight>
 
+
<center>[[Image:Lazarus_InputQuery.png]]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[[Image:Lazarus_InputQueryNoMascara.png]]</center>
 +
&nbsp;&nbsp;&nbsp;Nota: en la segunda imagen apreciamos que ''InputQuery'' padece el mismo defecto que ''InputBox'' respecto del texto que puede mostrar por la limitación de las dimensiones de la ventana.
 +
En Linux, con Lazarus 0.09.30-0 y FPC 2.4.2 este defecto no aparece y la ventana se expande; además se pueden crear nuevas líneas con #13)
 +
<center>[[Image:InputQuery_ES_Linux_LAZ_0.9.30-0_FPC-2.4.2.png]]</center>
 +
<center> http://lazarus-ccr.sourceforge.net/kbdata/MessageDlgQuestion.png </center>
 
<center> http://lazarus-ccr.sourceforge.net/kbdata/DontBeSillly.png </center>
 
<center> http://lazarus-ccr.sourceforge.net/kbdata/DontBeSillly.png </center>
  
===PasswordBox===
+
===[http://lazarus-ccr.sourceforge.net/docs/lcl/dialogs/passwordbox.html PasswordBox]===
Function PasswordBox(const ACaption, APrompt : String) : String;
+
<syntaxhighlight lang=pascal> Function PasswordBox(const ACaption, APrompt : String) : String;</syntaxhighlight>
 
+
&nbsp;&nbsp;&nbsp;Su comportamiento es parecido a [[Dialog_Examples#InputBox|InputBox]], consistiendo las diferencias en que no hay texto por defecto y el texto que el usuario escribe se enmascara.
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).
 
  
 
==Constantes y tipos usados en los cuadros de diálogo==
 
==Constantes y tipos usados en los cuadros de diálogo==
  
Varias constantes y tipos importantes que se usan en los cuadros de diálogo están predefinidas en la biblioteca LCL:
+
&nbsp;&nbsp;&nbsp;Constantes y tipos importantes que se utilizan en estos diálogos y que 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:
 
  
 +
&nbsp;&nbsp;&nbsp;Constantes enteras para definir tipos de botones e iconos que se muestran en MessageBox, definidos en la unidad '''''LCLType.pp''''':
 +
<syntaxhighlight lang=pascal> //Botones
 
  MB_OK = $00000000;
 
  MB_OK = $00000000;
 
  MB_OKCANCEL = $00000001;
 
  MB_OKCANCEL = $00000001;
Line 164: Line 238:
 
  MB_YESNO = $00000004;
 
  MB_YESNO = $00000004;
 
  MB_RETRYCANCEL = $00000005;
 
  MB_RETRYCANCEL = $00000005;
   
+
  //Iconos
 
 
  MB_ICONHAND = $00000010;
 
  MB_ICONHAND = $00000010;
 
  MB_ICONQUESTION = $00000020;
 
  MB_ICONQUESTION = $00000020;
Line 172: Line 245:
 
  MB_ICONWARNING = MB_ICONEXCLAMATION;
 
  MB_ICONWARNING = MB_ICONEXCLAMATION;
 
  MB_ICONERROR = MB_ICONHAND;
 
  MB_ICONERROR = MB_ICONHAND;
  MB_ICONINFORMATION = MB_ICONASTERICK;
+
  MB_ICONINFORMATION = MB_ICONASTERICK;</syntaxhighlight>
 
+
&nbsp;&nbsp;&nbsp;Constantes enteras que definen el valor devuelto desde MessageBox según el botón que se presione:
Constantes enteras que definen el valor devuelto desde MessageBox según el botón que se presione:
 
  
 +
<syntaxhighlight lang=pascal>
 
  IDOK = 1; ID_OK = IDOK;
 
  IDOK = 1; ID_OK = IDOK;
 
  IDCANCEL = 2; ID_CANCEL = IDCANCEL;
 
  IDCANCEL = 2; ID_CANCEL = IDCANCEL;
Line 184: Line 257:
 
  IDNO = 7; ID_NO = IDNO;
 
  IDNO = 7; ID_NO = IDNO;
 
  IDCLOSE = 8; ID_CLOSE = IDCLOSE;
 
  IDCLOSE = 8; ID_CLOSE = IDCLOSE;
  IDHELP = 9; ID_HELP = IDHELP;
+
  IDHELP = 9; ID_HELP = IDHELP;</syntaxhighlight>
 
+
&nbsp;&nbsp;&nbsp;Definen si el botón por omisión es el primero, el segundo o el tercero:
Definen si el botón por omisión es el primero, el segundo o el tercero:
 
  
 +
<syntaxhighlight lang=pascal>
 
  MB_DEFBUTTON1 = $00000000;
 
  MB_DEFBUTTON1 = $00000000;
 
  MB_DEFBUTTON2 = $00000100;
 
  MB_DEFBUTTON2 = $00000100;
 
  MB_DEFBUTTON3 = $00000200;
 
  MB_DEFBUTTON3 = $00000200;
  MB_DEFBUTTON4 = $00000300;
+
  MB_DEFBUTTON4 = $00000300;</syntaxhighlight>
 +
&nbsp;&nbsp;&nbsp;El valor del parámetro Marcadores de ''MessageBox'' se forma al añadir una constante botón [MB_OK..MB_RETRYCANCEL], una constante icono [MB_ICONHAND..MB_ICONINFORMATION] y una constante opcional, de botón por defecto [MB_DEFBUTTON1..MB_DEFBUTTON3]
  
El parámetro Flags de MessageBox está construido al añadir una constante botón [MB_OK..MB_RETRYCANCEL],
+
&nbsp;&nbsp;&nbsp;Los tipos que se utilizan en MessageDlg, los cuales necesitan parámetros
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:
 
AType de TMsgDlgType y AButtons de TMSgDlgButtons:
  
 
+
<syntaxhighlight lang=pascal> { Definido en Dialogs.pp }
{ Definido en Dialogs.pp }
 
 
 
 
  type
 
  type
   TMsgDlgType   = (mtWarning, mtError, mtInformation,  mtConfirmation,
+
   TMsgDlgType = (mtWarning, mtError, mtInformation,  mtConfirmation, mtCustom);
                    mtCustom);
+
   TMsgDlgBtn = (mbYes, mbNo, mbOK, mbCancel, mbAbort, mbRetry, mbIgnore, mbAll, mbNoToAll, mbYesToAll, mbHelp, mbClose);
   TMsgDlgBtn     = (mbYes, mbNo, mbOK, mbCancel, mbAbort, mbRetry, mbIgnore,
 
                  mbAll, mbNoToAll, mbYesToAll, mbHelp, mbClose);
 
 
   TMsgDlgButtons = set of TMsgDlgBtn;
 
   TMsgDlgButtons = set of TMsgDlgBtn;
 
    
 
    
 
 
  const
 
  const
 
   mbYesNoCancel = [mbYes, mbNo, mbCancel];
 
   mbYesNoCancel = [mbYes, mbNo, mbCancel];
Line 216: Line 281:
 
   mbAbortRetryIgnore = [mbAbort, mbRetry, mbIgnore];
 
   mbAbortRetryIgnore = [mbAbort, mbRetry, mbIgnore];
 
    
 
    
 +
  MsgDlgBtnToBitBtnKind: array[TMsgDlgBtn] of TBitBtnKind = (bkYes, bkNo, bkOK, bkCancel, bkAbort, bkRetry,
 +
                                                            bkIgnore, bkAll, bkNoToAll, bkYesToAll, bkHelp, bkClose);
 
   
 
   
  MsgDlgBtnToBitBtnKind: array[TMsgDlgBtn] of TBitBtnKind = (
+
   BitBtnKindToMsgDlgBtn: array[TBitBtnKind] of TMsgDlgBtn = (mbOk, mbOK, mbCancel, mbHelp, mbYes, mbNo, mbClose,
  bkYes, bkNo, bkOK, bkCancel, bkAbort, bkRetry, bkIgnore,
+
                                                            mbAbort, mbRetry, mbIgnore, mbAll, mbNoToALl, mbYesToAll);
    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 }
 
  { Definido en Controls.pp }
Line 242: Line 300:
 
   mrNoToAll = mrNone + 9;
 
   mrNoToAll = mrNone + 9;
 
   mrYesToAll = mrNone + 10;
 
   mrYesToAll = mrNone + 10;
   mrLast = mrYesToAll;
+
   mrLast = mrYesToAll;</syntaxhighlight>
  
----
+
&nbsp;&nbsp;&nbsp;Sobre las ventanas de diálogo: [http://lazarus-ccr.sourceforge.net/docs/lcl/dialogs/index-5.html Referencia de la unidad '''''Dialogs''''': Procedimientos y funciones]
Esta página se ha importado desde el epikwiki [http://lazarus-ccr.sourceforge.net/index.php?wiki=DialogExamples version].
 

Latest revision as of 08:11, 13 February 2020

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 ventana con cualquier otra opción disponible.

ShowMessage

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

   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:

 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.

   (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, sLineBreak o LineEnding, esto lo podemos usar en todos los cuadros de los que hablamos aquí)

Lazarus ShowMessage.png

MessageBox

 Function Application.MessageBox (Mensaje, Titulo: PChar; Marcadores: longint) : Integer;

   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:

 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
Lazarus MessageBox.png Lazarus MessageBoxRespuesta.png

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

MessageDlg

function MessageDlg(const aMsg:String; DlgType:TMsgDlgType; Buttons:TMsgDlgButtons; HelpCtx:LongInt):Integer;
function MessageDlg(const aCaption:String; const aMsg:String; DlgType:TMsgDlgType; 
                     Buttons:TMsgDlgButtons; HelpCtx:longInt):Integer;
function MessageDlg(const aCaption:String; const aMsg:String; DlgType:TMsgDlgType; 
                     Buttons:TMsgDlgButtons; HelpCtx:LongInt;  DefaultButton:TMsgDlgBtn):Integer;
function MessageDlg(const aCaption:String; const aMsg:String; DlgType:TMsgDlgType; 
                    Buttons:TMsgDlgButtons; const HelpKeyword: String):Integer;
Ver Tipos de mensaje(TMsgDlgType), Botones(TMsgDlgButtons) Botones(TMsgDlgBtn) Las dos clase de botones definen exactamente lo mismo¿¡!?)

   Hay cuatro versiones de esta función, en la primera al omitir el título, se pondrá cómo título el identificador de la aplicación; en las demás podemos poner como título de la ventana el texto que nos convenga. En la tercera podemos especificar mediante el parámetro DefaultButton qué botón será el activo por defecto. En la cuarta podemos mostrar la ayuda especificada en HelpKeyword.

   Es el más completo y elaborado de las ventanas de diálogo, y permite al programador un considerable control sobre su aspecto.

   Los parámetros que definen el tipo de cuadro y el icono es un tipo enumerado, y los botones se pueden especificar como un conjunto entre corchetes, por ejemplo [mbRetry, mbIgnore, mbAbort, mbCancel].

   HelpCtx se utiliza para especificar qué tema del archivo de ayuda debe ser demostrado, o cero para no mostrar nínguno. Si se utiliza HelpKeyword se mostrará la ayuda de esa palabra.

   El valor devuelto por la función corresponde al botón presionado, expresado como un entero (ver más edelante las definiciones de [mrNone..mrAll]).

Ejemplo:
 Uses forms, dialogs, lcltype, controls;
 
 procedure EstoSiQueEsUnMensaje;
   var  tipo: TMsgDlgType;
        botones: TMsgDlgButtons;
   begin
    tipo := mtWarning;
    botones:= [mbYesToAll, mbNoToAll];
    MessageDlg ('Cosas para no olvidar', 'las personas son las que dan sentido,'#13+
                              'coherencia y lógica a las cosas', tipo, botones,0);
   end;
http://lazarus-ccr.sourceforge.net/kbdata/Question.png
Lazarus MessageDlg.png

El diálogo 'QuestionDlg'

   El diálogo 'QuestionDlg' permite cambiar los rótulos de los botones y determinar los botones predetermindo y de cancelar.    Ejemplo:

    case QuestionDlg ('Este es el Título','Este es el Mensaje',mtCustom,[mrYes,'Positivo', mrNo, 'Negativo', mrCancel,'Predetermindado'],'La ayuda') of
        mrYes: QuestionDlg ('Este es el Título','Has elegido "Positivo"',mtCustom,[mrOK,'¡Muy bien!'],'');
        mrNo:  QuestionDlg ('Este es el Título','¡Oh! has elegido "Negativo"',mtCustom,[mrOK,'Exacto'],'');
        mrCancel: QuestionDlg ('Título','Has cancelado el diálogo con ESC o el botón "Predetermindado".',mtCustom,[mrOK,'Correcto'],'');
    end;
QuestionDlg es linux qt.png
Note-icon.png

Nota: ¡Si el usuario cancela el diálogo y no hay un botón definido como 'IsCancel', mrCancel será devuelto! Si quieres redirigir ESC/cerrar a u botón concreto utiliza el parámetro 'IsCancel' tras el botón deseado . (Nota del traductor, lo traduzco pero no consigo reproducir esta funcionalidad)

   Ejemplos avanzados con botones (tomados de promptdialog.inc)

    [mrOk, '¡Vale!',mrCancel,'Cancela Ahora',mrIgnore, 'Ignorar',300,'¡Hazlo!','IsDefault']

   Se muestran cuatro botones:

  • '¡Vale' que devuelve mrOk
  • 'Cancela Ahora' que devuelve mrCancel
  • 'Ignorar' que devuelve mrIgnore
  • '¡Hazlo!' que devuelve 300. Este es el botón predeterminado (con el foco)

   Es habitual que los botones en los diálogos de Lazarus tengan iconos. Con el fin de evitar que los iconos se muestren, se pueden utilizar valores no normalizados como resultado de los mensajes. El valor normalizado má alto hasta hoy es 11. Por ejemplo:

  case QuestionDlg ('Este es el Título','Este es el Mensaje',mtCustom,[20,'Positivo', 21, 'Negativo',22,'No lo sé','IsDefault'],'') of
     20: QuestionDlg ('Este es el Título','Has dicho „Sí“',mtCustom,[20,'Eso está bien'],'');
     21:  QuestionDlg ('Este es el Título','¡Oh, has dicho „No“',mtCustom,[21,'Correcto'],'');
     22:  QuestionDlg ('Este es el Título','¡Entonces, averigüalo!',mtCustom,[22,'Tal vez'],'');
  end;

   Con el fin de facilitar el trabajo, definiremos constantes. Por ejemplo:

const
  mrNoneNI=      20;
  mrOkNI=        mrNoneNI+1;
  mrCancelNI=    mrNoneNI+2;
  mrAbortNI=     mrNoneNI+3;
  mrRetryNI=     mrNoneNI+4;
  mrIgnoreNI=    mrNoneNI+5;
  mrYesNI=       mrNoneNI+6;
  mrNoNI=        mrNoneNI+7;
  mrAllNI=       mrNoneNI+8;
  mrYesToAllNI=  mrNoneNI+10;
  mrCloseNI=     mrNoneNI+11;
  mrLastNI=      mrCloseNI; 
begin
  case QuestionDlg ('Este es el Título','Este es el Mensaje',mtCustom,[mrYesN,'Positivo', mrNoNI, 'Negativo',22,'No lo sé','IsDefault'],'') of
     20: QuestionDlg ('Este es el Título','Has dicho „Sí“',mtCustom,[mrYesNI,'Eso está bien'],'');
     21:  QuestionDlg ('Este es el Título','¡Oh, has dicho „No“',mtCustom,[mrNoNI,'Correcto'],'');
     22:  QuestionDlg ('Este es el Título','¡Entonces, averigüalo!',mtCustom,[mrCancelNI,'Tal vez'],'');
  end;//case
end;
QuestionDlg esp 002.png

Diálogos de entrada de texto

InputBox

   Junto con el mensaje muestra una caja de edición para que el usuario pueda escribir un texto que será pasado a la aplicación.

 Function InputBox(const ATitulo, ACursor, ADefecto : String) : String;

   Se puede especificar el título de la Ventana (ATitulo), el mensaje que indicará al usuario que tipo de entrada de texto se espera que realice (ACursor) e incluso un texto ya predefinido (ADefecto). El texto escrito por el usuario o el proporcionado es devuelto a la aplicación como resultado de la función. La vnta muestr loa botones mbOK y mbCancel)

   Ejemplo:

 Uses forms, lcltype, dialogs, controls;
 
 procedure VentanaEntradaTexto;
   var textoUsuario: string;
  begin
    textoUsuario := InputBox ('Introducción de texto por el usuario',
                             'Por favor, escribe algo aquí:', 
                             'Si no quieres escribir, este es el texto que se devolverá');
    ShowMessage (textoUsuario);
  end
Lazarus InputBox.png

   (nota: ojo con esta ventana, el texto de ACursor tiene un límite de longitud visible, ya que la ventana tiene un ancho y un alto limitado y fijo, y mostrará el texto en una única línea -al menos a día de hoy-)

InputQuery

 Function InputQuery(const ATitulo, ACursor : String; Enmascarar : Boolean; var TextoUsuario : String) : Boolean;
 Function InputQuery(const ATitulo, ACursor : String; var TextoUsuario : String) : Boolean;

   La función InputQuery, que como InputBox, permite al usuario introducir texto, tiene dos versiones; en la primera se utiliza el parámetro Enmascarar que indica si el texto que escribe el usuario se sustituye por asteriscos (valor true) o no (false), como para escribir una contraseña; en la segunda se omite este parámetro, lo que equivale a darle el valor false. El texto introducido por el usuario se devuelve en el parámetro TextoUsuario (por eso es variable); la función devuelve true si se presionó el botón Aceptar, o falso si se cerró la ventana de cualquier otra forma (por ejemplo, pulsando el icono 'X' de la barra de título).

   Ejemplo:

 Uses forms, lcltype, dialogs, controls;
 
 procedure TryInputQuery;
   var respuesta: boolean;
       TextoUsuario: string;
  begin
     respuesta := InputQuery ('Una cuestión de geografía', '¿Capital de Nicaragua?', true, TextoUsuario);
     if respuesta {= true} and (TextoUsuario = 'Managua') then
       ShowMessage ('Efectivamente ' + TextoUsuario + ' es la capital de Nicaragua')
     else
       begin
         InputQuery ('Prueba de nuevo', 'No has pulsado ''OK'' o tu respuesta (' + TextoUsuario
                                                      + ') no es la capital de Nicaragua', TextoUsuario);
         ShowMessage (' Tu respuesta ha sido: ' + TextoUsuario);
      end;
  end;
Lazarus InputQuery.png      Lazarus InputQueryNoMascara.png

   Nota: en la segunda imagen apreciamos que InputQuery padece el mismo defecto que InputBox respecto del texto que puede mostrar por la limitación de las dimensiones de la ventana. En Linux, con Lazarus 0.09.30-0 y FPC 2.4.2 este defecto no aparece y la ventana se expande; además se pueden crear nuevas líneas con #13)

InputQuery ES Linux LAZ 0.9.30-0 FPC-2.4.2.png
http://lazarus-ccr.sourceforge.net/kbdata/MessageDlgQuestion.png
http://lazarus-ccr.sourceforge.net/kbdata/DontBeSillly.png

PasswordBox

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

   Su comportamiento es parecido a InputBox, consistiendo las diferencias en que no hay texto por defecto y el texto que el usuario escribe se enmascara.

   Constantes y tipos importantes que se utilizan en estos diálogos y que están predefinidas en la biblioteca LCL:

   Constantes enteras para definir tipos de botones e iconos que se muestran en MessageBox, definidos en la unidad LCLType.pp:

 //Botones
 MB_OK = $00000000;
 MB_OKCANCEL = $00000001;
 MB_ABORTRETRYIGNORE = $00000002;
 MB_YESNOCANCEL = $00000003;
 MB_YESNO = $00000004;
 MB_RETRYCANCEL = $00000005;
 //Iconos
 MB_ICONHAND = $00000010;
 MB_ICONQUESTION = $00000020;
 MB_ICONEXCLAMATION = $00000030;
 MB_ICONASTERICK = $00000040;
 MB_ICONWARNING = MB_ICONEXCLAMATION;
 MB_ICONERROR = MB_ICONHAND;
 MB_ICONINFORMATION = MB_ICONASTERICK;

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

 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;

   Definen si el botón por omisión es el primero, el segundo o el tercero:

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

   El valor del parámetro Marcadores de MessageBox se forma al añadir una constante botón [MB_OK..MB_RETRYCANCEL], una constante icono [MB_ICONHAND..MB_ICONINFORMATION] y una constante opcional, de 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 }
 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;

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