Difference between revisions of "Dialog Examples/es"

From Free Pascal wiki
Jump to navigationJump to search
Line 46: Line 46:
 
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]
 
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]
  
Si no necesitamos el valor del botón pulsado la podemos invocar cómo un procedimiento - véase el ejemplo siguiente)
+
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:
 
Ejemplo:
 
+
<delphi>
 
  Uses Forms, Dialogs, LCLType;
 
  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 
 +
</delphi>
 
<center> http://lazarus-ccr.sourceforge.net/kbdata/MessageBoxDemo.png  http://lazarus-ccr.sourceforge.net/kbdata/ReplyYes.png
 
<center> http://lazarus-ccr.sourceforge.net/kbdata/MessageBoxDemo.png  http://lazarus-ccr.sourceforge.net/kbdata/ReplyYes.png
 
  </center>
 
  </center>

Revision as of 01:20, 14 June 2008

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:

  • procedimiento ShowMessage (const Msg: string);
  • función MessageBox (Text, Caption : PChar; Flags: Word): Integer;
  • función MessageDlg (const Msg: string; AType: TMsgDlgType; AButtons: TMsgDlgButtons; HelpCtx: LongInt): Word;
  • función InputBox (const ACaption, APrompt, ADefault: string); string;
  • función InputQuery (const ACaption, APrompt: string; var Value: string): Boolean;
  • función 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.
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.

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.

ShowMessage

Procedure ShowMessage (const Msg: string);

{ 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ó.
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.

Ejemplo:

Program LazMessage;
Uses Dialogs;
begin
  ShowMessage ('This is a message from Lazarus')
end.

MessageBox

Function Application.MessageBox (Text, Caption: PChar; Flags: longint) : Integer;

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:

  • Text: la cadena que se muestra como una indicación o instrucción en el cuadro;
  • 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]

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   

</delphi>

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, 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.

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:

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;


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.

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

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:

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;

InputQuery

Function InputQuery(const ACaption, APrompt : String;
                    MaskInput : Boolean; var Value : String) : Boolean;
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.

Ejemplo:

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;
http://lazarus-ccr.sourceforge.net/kbdata/MessageDlgQuestion.png
http://lazarus-ccr.sourceforge.net/kbdata/DontBeSillly.png

PasswordBox

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

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:

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;

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 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 }
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;

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