Criando um Messagebox personalizado
Veja como criar um Messagebox personalizado para ser usado em seus aplicativos.
Estatísticas:










votos: 2
Serviços:

Já pensou em personalizar o Messagebox, incluir imagens em seus botões ou até mesmo usar outros ícones para cada tipo de mensagem? Nesse artigo você uma forma simples de fazer isso, personalizando as mensagens de seu aplicativo.
Iniciando nosso exemplo
Nesse artigo vou demonstrar uma forma de personalizar as mensagens geradas pelos aplicativos em substituição aos métodos Messagebox, Showmessage e Messagedlg. Iremos criar um formulário com todos os tipos de mensagens que ele poderá exibir junto com seus botões e imagens.
Criando o formulário de mensagem
Inicie o Delphi, a caso não tenha sido criado uma nova aplicação automaticamente, vá ao menu e clique em File >> New >> Application. Com isso será criado um novo formulário para a aplicação, mude sua propriedade name para frmMensagens, salve sua unit como uMensagens.pas e o projeto como Project1.dpr. Mude as seguintes propriedades do formulário:
|
Propriedade |
Valor |
|
BorderStyle |
bsDialog |
|
BorderIcons |
[] |
|
Height |
230 |
|
Position |
poScreenCenter |
|
Width |
350 |
Tabela 1. Propriedades do frmMensagens.
Vá à aba Standard e insira três componentes TPanel no formulário, mude a propriedade Name de cada para pnlIcones, pnlMensagem, pnlBotoes. A seguir veja os valores de suas propriedades que devem ser alteradas.
|
Componente |
Propriedade |
Valor |
|
pnlIcones |
Align |
alLeft |
|
pnlIcones |
BevelOuter |
bvNone |
|
pnlIcones |
Caption |
|
|
pnlIcones |
Width |
70 |
|
pnlBotoes |
Align |
alBotton |
|
pnlBotoes |
BevelOuter |
bvLowered |
|
pnlBotoes |
Caption |
|
|
pnlBotoes |
Height |
40 |
|
pnlMensagem |
Align |
alClient |
|
pnlMensagem |
BevelOuter |
bvNone |
|
pnlMensagem |
Caption |
|
|
pnlMensagem |
BorderWidth |
10 |
Tabela 2. Ajustando as propriedades dos componentes.
Ainda na aba Standard insira um componente TLabel no pnlMensagem, mude seu nome para lblMensagem e sua propriedade Align para alClient, localize a aba Additional, insira três componentes TBitbtn no pnlBotoes, chame-os de btnSim, btnNao, btnOK e finalizando insira cinco componentes TImage no pnlIcones, mude o nome de cada TImage para imgDeletar, imgQuestao, imgCuidado, imgInformacao e imgErro e mude as propriedades Align para alTop e Visible para False.
|
Componente |
Propriedade |
Valor |
|
btnSim |
Caption |
&Sim |
|
btnSim |
ModalResult |
mrYes |
|
btnNao |
Caption |
&Não |
|
btnNao |
ModalResult |
mrNo |
|
btnOk |
Caption |
&OK |
|
btnOk |
Default |
True |
|
btnOk |
ModalResult |
mrNo |
|
btnSim, btnOk, btnNao |
Height |
29 |
|
btnSim, btnOk, btnNao |
Top |
6 |
|
btnSim, btnOk, btnNao |
Visible |
False |
Tabela 3. Ajustando as propriedades dos componentes.
Ao terminar essa etapa seu formulário deve estar parecido com a imagem a seguir:

Figura 1. Formato do nosso formulário.
Codificando o formulário de mensagem
Com a parte visual do nosso formulário pronto, vamos iniciar à parte da lógica criando um tipo que servirá para identificar os botões da mensagem, ele será declarado antes da classe TfrmMensagens.
Listagem 1. Declarando um novo tipo.
type
TMyButtons = (mbSim, mbNao, mbOk);
type
TfrmMensagens = class(TForm)
...
Vou criar duas constantes. Uma será usada para armazenar a posição (propriedade Left) que os botões devem ser posicionados e a outra servirá para armazenar o título da mensagem (Caso você queira, poderá deixar o título dinâmico incluindo um novo parâmetro no método que chama a mensagem). Veja a declaração das constantes logo depois da declaração da variável do nosso formulário:
Listagem 2. Declarando as constantes.
var
frmMensagens: TfrmMensagens;
const
LEFTBUTTONS : array[0..2] of integer = (258, 178, 97);
TITULO :String = ‘ClubeDelphi‘;
Listagem 3. Declarando um novo método.
public
{ Public declarations }
class function Mensagem(Texto: String; Tipo: Char; Botoes: array of TMyButtons): Boolean;
end;
Aperte Ctrl+Shift+C para que seja criado o corpo do método e veja ele pronto a seguir:
Listagem 4. Codificação do novo método.
class function TfrmMensagens.Mensagem(Texto: String; Tipo: Char;
Botoes: array of TMyButtons): Boolean;
var
i: Integer;
frm :TfrmMensagens;
begin
frm := TfrmMensagens.Create(nil);
try
frm.lblMensagem.Caption := Texto;
frm.Caption := TITULO;
for i:=0 to Length(Botoes)-1 do
begin
case (Botoes[i]) of
mbOk: begin
frm.BtnOK.Visible := True;
frm.BtnOK.Left := LEFTBUTTONS[i];
end;
mbSim: begin
frm.btnSim.Visible := True;
frm.btnSim.Left := LEFTBUTTONS[i];
end;
mbNao: begin
frm.BtnNao.Visible := True;
frm.BtnNao.Left := LEFTBUTTONS[i];
end;
else begin
frm.BtnOK.Visible := True;
frm.BtnOK.Left := LEFTBUTTONS[i];
end;
end;
end;
‘I‘: frm.imgInformacao.Visible := True;
‘D‘: frm.imgDeletar.Visible := True;
‘Q‘: frm.imgQuestao.Visible := True;
‘C‘: frm.imgCuidado.Visible := True;
‘E‘: frm.imgErro.Visible := True;
else
frm.imgInformacao.Visible := True;
end;
case (frm.ModalResult) of
mrOk, mrYes : result := True;
else
result := False;
end;
finally
if (frm<>nil) then
FreeAndNil(frm);
end;
end;
Repare que apenas os botões btnSim e btnOK fazem a função retornar True, enquanto o botão btnNao faz a função retornar False.
Testando o MessageBox personalizado
Ainda no mesmo projeto, inclua um novo formulário e salve-o com qualquer nome, inclua no uses desse formulário a unit uMensagens. Vá à aba Standard e insira seis componentes do tipo TButton no formulário, de um clique duplo em cada um e insira o código conforme a listagem a seguir:
Listagem 5. Criando um exemplo para exibir as mensagens
procedure TfrmTeste.Button1Click(Sender: TObject);
begin
tFrmMensagens.Mensagem(‘Mensagem de informação‘,‘I‘,[mbOk]);
end;
procedure TfrmTeste.Button2Click(Sender: TObject);
begin
if (tFrmMensagens.Mensagem(‘Mensagem de questionamento‘,‘Q‘,[mbSim, mbNao])) then
tFrmMensagens.Mensagem(‘Você clicou em SIM!‘,‘I‘,[mbOk])
else
tFrmMensagens.Mensagem(‘Você clicou em NAO!‘,‘I‘,[mbOk]);
end;
begin
tFrmMensagens.Mensagem(‘Mensagem de cuidado‘,‘C‘,[mbOk]);
end;
begin
if (tFrmMensagens.Mensagem(‘Deseja excluir o registro?‘,‘D‘,[mbSim, mbNao])) then
tFrmMensagens.Mensagem(‘Você clicou em SIM!‘,‘I‘,[mbOk])
else
tFrmMensagens.Mensagem(‘Você clicou em NAO!‘,‘I‘,[mbOk]);
end;
procedure TfrmTeste.Button5Click(Sender: TObject);
begin
tFrmMensagens.Mensagem(‘Mensagem de erro‘,‘E‘,[mbOk]);
end;
procedure TfrmTeste.Button6Click(Sender: TObject);
begin
if (tFrmMensagens.Mensagem(‘Deseja encerrar a aplicação?‘,‘Q‘,[mbOK, mbNao])) then
Application.Terminate;
end;
No menu principal do Delphi, vá em Project >> Options e retire o formulário frmMensagens do Auto-Create forms, conforme a imagem a seguir:

Figura 2. Configurando a aplicação.
Clique em OK e pronto, nosso aplicativo está pronto para ser executado, compile o projeto, execute-o e vejo o resultado.

Figura 3. Exemplo de mensagem.
Conclusão
Como vimos nesse artigo, esta é uma forma simples de melhorar o visual de uma aplicação e torná-lo mais intuitivo para o usuário final.

Participe! Inclua um comentário
12/6/2007 12:00


12/6/2007 14:38


13/6/2007 11:54
[responder]


18/6/2007 12:01


11/9/2007 14:46



Artigo Clube Delphi 80 - Exibindo dicas na forma de balão com a descrição de campos do FB

Artigo Clube Delphi 94 - ClientDataSet

Desenhando um olho em Java

Criando um Messagebox personalizado

Como ler um arquivo XML utilizando AJAX

Validação de campos obrigatórios em um Dataset

Criando uma Stored Procedure em Firebird para retornar o próximo dia útil

Criando uma Interface para padronização dos formulários de Cadastro



Curso Online - Delphi Fundamental (Win32)

Curso Online-Aplicação Financeira com Delphi 2009 e MySQL

Curso on-line Rave Reports

Curso Online - Criando uma Aplicação multi-camadas Completa com Delphi

Rad Studio 2007-DBX4 e Firebird 2.0-Aplicação comercial de vendas do Inicio ao Fim

Introdução ao ASP

Curso Completo MySQL

jQuery – A Biblioteca JavaScript para Webdesigners




[vídeo] Consumindo os dados via ajax – Consumindo dados com getJson do jQuery utilizando POCO EF 4.0 – Parte 3

[vídeo] Classe POCO – Consumindo dados com getJson do jQuery utilizando POCO EF 4.0 – Parte 1

Imprimindo Relatório : VCL Crystal Reports XI - Delphi

VCL Crystal Reports XI - Delphi

[vídeo] Gerenciamento das Comunicações - Curso Gerência de Projetos – Parte 8

[vídeo] Plano de Comunicação - Curso Gerência de Projetos – Parte 9

[vídeo] Seleção e Priorização de Projetos - Curso Gerência de Projetos – Parte 6

[vídeo] Escopo, metas, premissas, restrições - Curso Gerência de Projetos – Parte 7

[vídeo] Documento Conceitual do Projeto - Curso Gerência de Projetos – Parte 5


Você está em:





Conheça os planos de créditos DevMedia e visualize esse post agora mesmo!


