Poner un CheckBox en un cuadro de diálogo

5072 vistas

Los MessageDlg son pequeños cuadros de diálogo que usamos amenudo para alertar, informar o preguntar al usuario. Los creamos gracias a la función:



delphi
  1. MessageDlg(const Msg: string;
  2.           DlgType: TMsgDlgType;
  3.           Buttons: TMsgDlgButtons;
  4.           HelpCtx: Longint): Word;



A veces puede ser interesante mostrar un CheckBox, generalmente para poner "No mostrar más este mensaje". Devido a que esta posibilidad no la contenpla el estándar, será necesario escribir nuestro propio MessageDlg:



delphi
  1. function MDChecked(const Msg,                  { Mensaje a mostrar }
  2.                   ChkMsg: string;            { Mensaje del CheckBox }
  3.                   var checkedValue : boolean; { Valor del CheckBox }
  4.                   DlgType: TMsgDlgType;      { Tipo del cuadro de diálogo }
  5.                   Buttons: TMsgDlgButtons)    { Botones }
  6.                   : Word;
  7. var
  8.   chk: TCheckBox;
  9.   frm: TForm;
  10. begin
  11.   frm := CreateMessageDialog(Msg, DlgType, Buttons);
  12.   with frm do
  13.   try
  14.     { añadimos el CheckBox en la parte inferior derecha }
  15.     chk := TCheckBox.Create(frm);
  16.     with chk do
  17.     begin
  18.       Checked := checkedValue;
  19.       Caption := chkMsg;
  20.       Left := 8;
  21.       Top := frm.Height - Height - 12;
  22.       Width := frm.width - left - 1;
  23.       Parent := frm;
  24.     end;
  25.     { ampliamos la ventana }
  26.     Height := Height + chk.Height;
  27.     Position := poScreenCenter;
  28.     { la mostramos }
  29.     Result := ShowModal;
  30.     { recuperamos valor del CheckBox }
  31.     checkedValue := chk.Checked;
  32.   finally
  33.     Free;
  34.   end;
  35. end;



Ejemplo de uso:



delphi
  1. var
  2.   chk : boolean;
  3. begin
  4. ...
  5.   if ParametrosApp.MostrarMensaje then
  6.   begin
  7.     chk := false;
  8.     MDChecked('Bla bla bla...', 'No mostrar más este mensaje', chk, mtInformation, [mbOK]);
  9.     { según el valor devuelto del CheckBox, actualizamos parámetros }
  10.     ParametrosApp.MostrarMensaje := not chk;
  11.   end;



ParametrosApp.MostrarMensaje es un parámetre de la aplicación almacenado en un .ini o en una base de datos o donde queráis.