Escolar Documentos
Profissional Documentos
Cultura Documentos
personalizada
Ol amigos do The Club, neste artigo irei apresentar uma maneira fcil de criar e customizar as
caixas de dilogos no Delphi XE6. No Delphi j temos pronto diversos tipos de caixas de dilogo, como por
exemplo: a ShowMessage, Application.MessageBox ou a MessageDLG. Todas elas nos proporcionam
alguns recursos interessantes, mas como todo programador, sempre sentimos a necessidade de
implementao de novos recursos. Todo o funcionamento ir se basear na criao de um formulrio padro
junto com uma classe, a qual ir montar toda a estrutura necessria.
Criando a Caixa de Mensagem
Clique em File/New/VCL Form Delphi para criarmos um formulrio desde o incio. Sugiro alterar
algumas propriedades deste formulrio, de acordo com a tabela 01 abaixo.
Propriedades
Valores
BorderStyle
bsDialog
BorderIcons
[]
Caption
Mensagem
ClientHeight
222
color
clBtnFace
Font
Calibri
Position
poScreenCenter
Dentro deste mesmo formulrio iremos adicionar 3 Panels, sendo: pnlIcones (Para agrupar os cones
utilizados), pnlMensagem (Para adicionar a mensagem informativa) e pnlBotoes (Para adicionar os botes
OK, Sim e No). Ver Imagem 01.
Ver
abaixo
Item (1) - pnlIcones:
as
tabelas
com
Propriedades
todas
as
configuraes
detalhadas.
Valores
Align
alLeft
Alignment
taLeftJustify
BevelOuter
bvNone
Height
178
Width
70
Propriedades
Height
Valores
35
Width
50
Propriedades
Valores
Align
alClient
Alignment
taCenter
BevelOuter
bvNone
BorderWidth
10
Height
178
Width
280
Propriedades
Valores
Align
alBottom
Alignment
taCenter
BevelOuter
bvLowered
Height
44
Width
350
Propriedades
Valores
Default
True
Height
38
ModalResult
mrNo
Visible
False
Width
75
Propriedades
Valores
Caption
&Sim
Height
38
ModalResult
mrYes
Visible
False
Width
75
Propriedades
Valores
Caption
&No
Height
38
ModalResult
mrNo
Visible
False
Width
75
uma instncia, ou seja, podemos apenas fazer a utilizao direta do mtodo em questo. Detalharei melhor
a seguir.
O primeiro passo seria criar um Tipo (type) para armazenar os botes (Sim, No, e Ok). Esta
codificao normalmente se localiza logo acima do Tipo (TfrMensagem), a classe do formulrio.
Type
TMeusBotoes
Type
(mbSim,
mbNao,
TFrmMensagem
mbOk);
class(TForm)
......
Criaremos tambm uma class function Mensagem como pblica. Classes deste tipo no
necessitam de instncia, que encaixam perfeitamente no nosso tipo de utilizao. Temos trs parmetros,
sendo respectivamente: O texto informativo que ir aparecer na caixa de mensagem, uma varivel char que
identifica o tipo da Mensagem e o Array do type TMeusBotoes (tem como tarefa criar as rotinas conforme os
botes escolhidos.
Private
{ Private declarations }
Public
{ Public declarations }
class function Mensagem(Texto:
Boolean;
String;
Tipo:
Char;
Botoes:
array
of
TMeusBotoes):
end;
A constante LEFTBUTTONS ir permitir uma realocao dos botes (Sim, No e Ok) no formulrio
pela propriedade Left. J a constante TITULO ir entitular a caixa de dilogo.
const
LEFTBUTTONS:
array[0..2]
of
TITULO: String = 'The Club';
Var
FrmMensagem: TFrmMensagem;
Implementation
{$R *.dfm}
class function TFrmMensagem.Mensagem(Texto:
TMeusBotoes):
var
i:
frm
begin
frm
integer
String;
Tipo:
(258,
Char;
178,
Botoes:
97);
array of
Boolean;
Integer;
:TFrmMensagem;
:=
TFrmMensagem.Create(nil);
try
frm.lblMensagem.Caption
frm.Caption
for i:=0
begin
to
:=
:=
Texto;
TITULO;
Length(Botoes)-1
case (Botoes[i])
end;
end;
frm.BtnOK.Visible
frm.BtnOK.Left
frm.btnSim.Visible
frm.btnSim.Left
:=
:=
:=
:=
do
of
mbOk: begin
True;
LEFTBUTTONS[i];
mbSim: begin
True;
LEFTBUTTONS[i];
end;
else begin
end;
frm.BtnNao.Visible
frm.BtnNao.Left
frm.BtnOK.Visible
frm.BtnOK.Left
mbNao: begin
True;
LEFTBUTTONS[i];
:=
:=
:=
True;
LEFTBUTTONS[i];
:=
end;
end;
frm.imgInformacao.top
frm.imgDeletar.top
frm.imgQuestao.top
frm.imgCuidado.top
frm.imgErro.top
case (Tipo)
frm.imgInformacao.Visible
frm.imgDeletar.Visible
frm.imgQuestao.Visible
frm.imgCuidado.Visible
frm.imgErro.Visible
'I':
'D':
'Q':
'C':
'E':
else
end;
mrYes
result
4;
4;
4;
4;
4;
of
True;
True;
True;
True;
True;
:=
:=
:=
:=
:=
frm.imgInformacao.Visible
frm.ShowModal;
case (frm.ModalResult)
mrOk,
else
end;
finally
if (frm<>nil)
:=
:=
:=
:=
:=
:=
result
:=
True;
end;
:=
of
True;
False;
then
FreeAndNil(frm);
end;
Iremos instanciar a classe TfrmMensagem, passando como parmetro o nil. Logo em seguida
faremos um try/catch para atribuir o ttulo na propriedade Caption e a Mensagem Informativa passada por
parmetro no componente lblMensagem. Faremos um Case para receber o retorno do array botes
para ir setando como Visvel ou no e os realocando na tela conforme a propriedade Left (utilizada pela
constante LEFTBUTTONS). Na prxima etapa do cdigo, atravs da propriedade TOP dos componentes
TImage, deixaremos as mesmas alinhadas logo no incio do formulrio. O parmetro tipo ir nos orientar
e habilitar qual imagem dever ficar visvel conforme a necessidade (I= Informativa, D= Deletar, Q=
Questionamento, C=Cuidado, E=Erro). O mtodo frm.ModalResult ir nos retornar como true ou false
para tratarmos na funo mais adiante. Para finalizar liberaremos o frm da memria atravs do mtodo
FreeAndNil.
Testando a Caixa de Dilogo
Para isto crie um projeto do incie e insira alguns botes, tais como: Information, Question, Warning,
Delete, Error e Sign Out. Ver Lay-Out na Imagem 03.
Devemos declarar a unit Umensagens. O uso da classe TfrmMensagem muito simples pelo fato
de no precisarmos instanciar nenhum objeto. Devemos apenas passar como parmetros os seguintes itens:
O
Texto,
o
Tipo
e
os
botes.
uses Umensagens;
Exemplo de Mensagem do tipo Informativa.
procedure TForm2.Button1Click(Sender:
begin
TFrmMensagem.Mensagem('Esta
uma
end;
TObject);
Mensagem
de
Information!','I',[mbOk]);
end;
TObject);
uma
Mensagem
de
Warning!','C',[mbOk]);
end;
TObject);
uma
Mensagem
de
Error!','E',[mbOk]);
Quando necessitamos receber o retorno de nossa class Funcion, podemos seguir os exemplos a
Exemplo de Mensagem para Excluso.
procedure TForm2.Button4Click(Sender:
TObject);
begin
if (TFrmMensagem.Mensagem('Deseja
excluir
o
registro?','D',[mbSim,
mbNao])) then
TFrmMensagem.Mensagem('Voc
clicou
em
SIM!','I',[mbOk])
else
TFrmMensagem.Mensagem('Voc
clicou
em
NO!','I',[mbOk]);
end;
Exemplo de Mensagem do tipo Questionativa.
procedure TForm2.Button2Click(Sender:
TObject);
begin
if (TFrmMensagem.Mensagem('Esta uma Mensagem de Question!','Q',[mbSim, mbNao])) then
TFrmMensagem.Mensagem('Voc
clicou
em
SIM!','I',[mbOk])
else
TFrmMensagem.Mensagem('Voc
clicou
em
NO!','I',[mbOk]);
end;
Outro Exemplo de Mensagem Questionativa, para encerramento da aplicao.
procedure TForm2.Button6Click(Sender:
begin
if (TFrmMensagem.Mensagem('Deseja encerrar
end;
TObject);
a
Concluses
Neste ms procurei abordar um assunto solicitado em nosso suporte tcnico. Todo projeto que
desenvolvemos, sempre temos a necessidade de fazer o uso de caixas de dilogos. Procurei neste artigo
criar uma classe bsica para personalizao deste recurso. Impostante lembrar que apesar de ser
desenvolvido no Delphi XE6, foram testados nas verses anteriores com sucesso. Fica a a dica, um forte
abrao e at o ms que vem!