I have a form where in it I have two buttons, and in one of them I use a timer to enable
In the FormShow
procedure TfrmMensagem.FormShow(Sender: TObject);
begin
inherited;
fCaption := btn1.Caption;
a1 := 2;
a2 := 0;
if (Timer1.Enabled) then
begin
btn1.Caption := 'Aguarde ('+IntToStr(a1)+')';
btn1.Enabled := false;
end;
scrlbx.SetFocus;
end;
In the Timer
procedure TfrmMensagem.Timer1Timer(Sender: TObject);
var msg: string;
begin
inherited;
btn1.Enabled := false;
if (a2 = 0) then
begin
a1 := a1 - 1;
msg := 'Aguarde ('+IntToStr(a1)+')';
btn1.Caption := msg;
if (a1 = 0) then
begin
btn1.Enabled := True;
Timer1.Enabled := false;
a2 := 1;
a1 := 2;
btn1.Caption := fCaption;
if btn1.Visible then
btn1.SetFocus;
end;
end;
end;
And I have a class to work with that form
Unit Mensagem;
interface
uses SysUtils, Classes, Controls, Forms, StdCtrls;
type
TTipoMensagem = (tmConfirmacao, tmAtencao);
TMensagem = class
fLimparMensagens : Boolean;
private
fMensagem : TStrings;
fTipoMensagem : TTipoMensagem;
procedure CriaLabels;
procedure ConfiguraForm;
public
NumeroMensagens : Integer;
constructor Create;
destructor Destroy; override;
procedure Ordenar;
procedure Adicionar(Mensagem : String);
procedure SetTipo(TipoMensagem : TTipoMensagem);
procedure Limpar;
function Show(Mensagem : String = ''; TipoMensagem : TTipoMensagem = tmAtencao; Timer: Boolean = false) : TModalResult;
end;
implementation
uses UMensagem;
{ TMessageForm }
constructor TMensagem.Create;
begin
fLimparMensagens := True;
fMensagem := TStringList.Create;
NumeroMensagens := fMensagem.Count;
end;
destructor TMensagem.Destroy;
begin
FreeAndNil(fMensagem);
inherited;
end;
procedure TMensagem.Adicionar(Mensagem : String);
begin
fMensagem.Add(WrapText(Mensagem, 100));
NumeroMensagens := fMensagem.Count;
end;
procedure TMensagem.Limpar;
begin
fMensagem.Clear;
NumeroMensagens := fMensagem.Count;
end;
procedure TMensagem.ConfiguraForm;
begin
case fTipoMensagem of
tmConfirmacao :
begin
frmMensagem.Caption:='Confirme';
frmMensagem.btn1.Caption:='Sim';
frmMensagem.btn1.ModalResult:=mrYes;
frmMensagem.btn2.Caption:='Não';
frmMensagem.btn2.ModalResult:=mrNo;
end;
tmAtencao :
begin
frmMensagem.Caption:='Atenção';
frmMensagem.btn1.Visible:=False;
frmMensagem.btn2.Caption:='OK';
frmMensagem.btn2.ModalResult:=mrOk;
end;
end;
end;
procedure TMensagem.CriaLabels;
var count : integer;
l : TLabel;
begin
for count:=0 to fMensagem.Count-1 do
begin
l:=TLabel.Create(frmMensagem);
l.Parent:=frmMensagem.scrlbx;
l.Caption:=fMensagem[count];
l.Left := 6;
l.Top := count * 17 + 4;
end;
end;
function TMensagem.Show(Mensagem : String = ''; TipoMensagem : TTipoMensagem = tmAtencao; Timer: Boolean = false) : TModalResult;
begin
try
fTipoMensagem := TipoMensagem;
frmMensagem := TfrmMensagem.Create(nil);
frmMensagem.Timer1.Enabled := Timer;
ConfiguraForm;
if Mensagem <> '' then
Adicionar(Mensagem);
CriaLabels;
if NumeroMensagens > 0 then
Result := frmMensagem.ShowModal
else Result := mrNone;
finally
FreeAndNil(frmMensagem);
end;
if fLimparMensagens then
Limpar;
end;
procedure TMensagem.Ordenar;
begin
(fMensagem as TStringList).Sort;
end;
procedure TMensagem.SetTipo(TipoMensagem: TTipoMensagem);
begin
fTipoMensagem := TipoMensagem;
end;
end.
When I need to use it, I do this:
if fMensagem.Show('Você deseja realmente finalizar a operação ' + aTipo + '?', tmConfirmacao, True) = mrYes then
I see possibilities if you create your own component, or create a form to simulate messagebox or messagedlg. Apart from that the way seems quite difficult.
– Reginaldo Rigo
@Reginaldorigo, it will be the way, to leave for the own dialog
– Jefferson Rudolf