Desde la versión 1.8 de Lazarus, TTaskDialog está disponible en la pestaña o lengüeta de Dialogs. Se trata de un componente no visual.
En este caso veremos como incluir un par de botones comunes como si y no y un checkbox, porque no encontré en ningún lado como averiguar el estado del checkbox, pues lo habitual es que tenga una propiedad checked del tipo boolean, digo, si es un botón checkbox... pero no, es un enumerado y hay que buscarlo en Flags, si está ahí entonces sería True, caso contrario, False. Más rebuscado imposible, pero funcionar, funciona.
Este componente tiene varias opciones y se puede hacer bastante con él, en todos los ejemplos que vi (pocos, por cierto) se lo crea con código, lo que implica no usar el inspector de objetos; en este ejemplo, por lo tanto, se usa el inspector de objetos.
En un formulario poner 2 botones, 1 memo y un TTaskDialog. Un botón para comenzar y otro para cerrar o salir del programa.
En el inspector de objetos marcar las siguientes opciones e insertar los textos en las propiedades correspondientes.
Nota: no sé si es un bug o una nueva característica de Lazarus 2.X pero ahora para que el texto ingresado en una propiedad se refleje en el componte, una vez escrito el texto, hay que presionar Enter... obvio que es un pequeño y molesto bug que será reportado como corresponde para beneficio de todos.
Si dejamos la propiedad VerificationText vacía (o escrita pero sin presionar [Enter] entonces la casilla de verificación no se mostrará en el cuadro de diálogo. También se podría establecer mediante código: TaskDialog1.VerificationText:='No volver a pausar.".
Esta propiedad es un enumerado y al no estar vacía incorpora al conjunto de enumerados Flags el elemento tfVerificationFlagChecked. Por ende para saber si el usuario marco dicha casilla se debe preguntar si ese elemento está contenido en el conjunto Flags de esta forma:
tfVerificationFlagChecked in TaskDialog1.Flags
El código completo:
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Memo1: TMemo;
TaskDialog1: TTaskDialog;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
public
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
SeguirPreguntando:Boolean=True; //Asociaremos con el checkbox
begin
for i:=1 to 200 do
begin
if (i mod 10) = 0 then
if SeguirPreguntando then
if TaskDialog1.Execute then
// Si presiona Sí o si está marcado el checkbox y se presionó Sí: la segunda condición
// es necesaria porque si no, si se marca el checkbox y se presiona no produce resultados
// no deasedos.
if (TaskDialog1.ModalResult=mrYes) or ((tfVerificationFlagChecked in TaskDialog1.Flags) and (TaskDialog1.ModalResult=mrYes) )then
SeguirPreguntando:=not (tfVerificationFlagChecked in TaskDialog1.Flags)
else
Break; // Se aborta el ciclo, por ende es imposible continuarlo, ya que no se interrumpe sino que
// directamente se aborta el for do.
Memo1.Lines.Add(i.ToString);
Application.ProcessMessages;
Sleep(50);
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Close;
end;
end.
Documentación oficial de TTaskDialog
No hay comentarios:
Publicar un comentario