Whats new? | Login | Parceiros
Cadastre-se | Atendimento | RSS
+ Delphi:
artigos   |   vídeos   |    cursos   |    mais

Criando um Messagebox personalizado

Veja como criar um Messagebox personalizado para ser usado em seus aplicativos.

RODRIGO LAZOTI
Rodrigo Lazoti (rodrigolazoti@yahoo.com.br) é desenvolvedor de software com mais de 8 anos de experiência, bacharel em Sistemas de Informação e possui também as certificações SCJP, SCWCD e SCBCD. Atualmente desenvolve sistemas utilizando Java e Ruby ...


Ver space do autor


Estatísticas:
Visualizações:
12300
Favoritado:
 7 vez(es)
Conteúdo:
Didática:
Utilidade:
2 0
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.

    Veja a seguir as mudanças que devem ser feitas nas propriedades dos botões:

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:

  msg_image002.jpg

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‘;

 
   
Agora vamos declarar nosso principal método, que vai ser um método de classe chamado Mensagem, declare-o na sessão public de nossa unit. Ele irá receber três argumentos, o texto da mensagem, os tipos de mensagem que vai ser exibida e quais botões serão exibidos, o método que será uma função vai retornar um valor boleano. Vejo o método declarado:

 

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;

     case (Tipo) of
      ‘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;

     frm.ShowModal;

    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;

 procedure TfrmTeste.Button3Click(Sender: TObject);
begin
  tFrmMensagens.Mensagem(‘Mensagem de cuidado‘,‘C‘,[mbOk]);
end;

 procedure TfrmTeste.Button4Click(Sender: TObject);
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:

msg_image003.jpg

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.

 

msg_image001.jpg

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
[Fechar]

Este post é fechado - você precisa ter acesso ao post para incluir um comentário.


tone
12/6/2007 12:00
excelente! muito bom, parabens!

[responder]

 
Eliel Gonçalves Martins
12/6/2007 14:38
Parabens... Muito bom mesmo... Isso vai ajudar muita gente .. valeu

[responder]

 
DevTabajara
13/6/2007 11:54
Reclamação Viemos atraves desta reclamar sobre os posts apagados, a DevTabajara apoia toda a manifestação popular, censura nunca mais!!! pode apagar que eu posto de novo :)

[responder]

 
Ediberto Alves
18/6/2007 12:01
Muito bom! Ótimo artigo! Parabéns!

[responder]

 
Andressa
11/9/2007 14:46
Parabéns Otimo artigo !

[responder]

 



 
 

[Este post ainda não foi associado a uma sequência]


[Fechar]
Este post está disponível para assinantes da ClubeDelphi ou para quem possui Créditos DevMedia.

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

Plano conveniência – Neste plano este post custa R$ 0,00 (Compre agora)
Esse plano permite que você compre somente um post, pagando por ele seu preço sem desconto.

Plano ocasional: Aqui este post custa: R$ -1,00 (assinante) ou R$ -1,00 (não-assinante)
Este plano é ideal para quem tem interesse em mais de um post. Você compra um mínimo de R$ 50,00 em créditos e ganha, em média, 50% de desconto no preço do post. Compre Créditos agora!

Assinatura de Créditos (Plano econômico) – Aqui este post custa R$ -1,00
Este plano é ideal para quem tem interesse em muitos posts. Com esse plano você compra R$ 180,00 em créditos e ganha, em média, 80% de desconto no preço do post. Assine este plano agora!

> Saiba mais sobre o Sistema de Créditos DevMedia
DevMedia Group   www.devmedia.com.br   |   www.javafree.org   |   www.mrbool.com
2010 - Todos os Direitos Reservados a DevMedia Group - (21) 3382-5038