Difference between revisions of "Dialog Examples/es"

From Lazarus wiki
Jump to navigationJump to search
Line 11: Line 11:
 
* function PasswordBox(const ACaption, APrompt : String) : String;
 
* function PasswordBox(const ACaption, APrompt : String) : String;
  
Cada uno de esos componentes da lugar a la aparición de una pequeña caja emergente, que contiene cierta información y pide una respuesta del ususario: 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>
+
Cada uno de esos componentes da lugar a la aparición de una pequeña caja 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>
 
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.
 
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.
  

Revision as of 09:59, 10 January 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:

  • procedure ShowMessage (const Msg: string);
  • function MessageBox (Text, Caption : PChar; Flags: Word): Integer;
  • function MessageDlg (const Msg: string; AType: TMsgDlgType; AButtons: TMsgDlgButtons; HelpCtx: LongInt): Word;
  • function InputBox (const ACaption, APrompt, ADefault: string); string;
  • function InputQuery (const ACaption, APrompt: string; var Value: string): Boolean;
  • function PasswordBox(const ACaption, APrompt : String) : String;

Cada uno de esos componentes da lugar a la aparición de una pequeña caja 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]

Se puede invocar como una llamada a un procedimiento (por ejemplo, como una instrucción 'MessageBox()' más que como una función 'Variable := MessageBox()' - véase el ejemplo siguiente)

Ejemplo:

Uses Forms, Dialogs, LCLType;

Procedure DisplayMessageBox;
  var reply, boxstyle: integer;
  begin
    with application do begin
      boxstyle :=  MB_ICONQUESTION + MB_YESNO;
      reply :=  MessageBox ('Press either button', 'MessageBoxDemo', boxstyle);
      if reply = IDYES then MessageBox ('Yes       ', 'Reply',MB_ICONINFORMATION)
      else MessageBox ('No         ', 'Reply', MB_ICONHAND)
  end;

Advierta que en este ejemplo a las cadenas 'Yes' y 'No' se les han añadido espacios en blanco; de otro modo el cuadro no tendría el ancho suficiente para mostrar apropiadamente el rótulo.

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.