News & Events
MessageDlg Personalizada
- 2 de julho de 2007
- Posted by: Adriano Santos
- Category: delphi delphi2007 dicas mensagem messagedlg
Difficulty level not set for this Post
Oi Pessoal,
Outra dica interessante que gostaria de passar é sobre como criar uma MessageDlg personalizada. Na minha função eu inclui alguns novos parâmetros. Que são:
DefButton: Botão default;
Portugues: Se a MessageDlg vai será traduzida;
Checar: Com este parâmetro um CheckBox é adicionado;
MsgCheck: Caption do CheckBox;
Funcao: Ponteiro para uma procedure que pode ser passada como parâmetro;
Eis a função:
function MessageDlgCheck(Msg: string; AType: TMsgDlgType; AButtons:
TMsgDlgButtons;
IndiceHelp: LongInt; DefButton: TMOdalResult; Portugues: Boolean; Checar:
Boolean; MsgCheck: string; Funcao: TProcedure): Word;
var
I: Integer;
Mensagem: TForm;
Check: TCheckBox;
begin
Check := nil;
Mensagem := CreateMessageDialog(Msg, AType, Abuttons);
Mensagem.HelpContext := IndiceHelp;
with Mensagem do
begin
for i := 0 to ComponentCount - 1 do
begin
if (Components[i] is TButton) then
begin
if (TButton(Components[i]).ModalResult = DefButton) then
begin
ActiveControl := TWincontrol(Components[i]);
end;
end;
end;
if Portugues then
begin
if Atype = mtConfirmation then
Caption := 'Confirmação'
else if AType = mtWarning then
Caption := 'Aviso'
else if AType = mtError then
Caption := 'Erro'
else if AType = mtInformation then
Caption := 'Informação';
end;
end;
if Portugues then
begin
TButton(Mensagem.FindComponent('YES')).Caption := '&Sim';
TButton(Mensagem.FindComponent('NO')).Caption := '&Não';
TButton(Mensagem.FindComponent('CANCEL')).Caption := '&Cancelar';
TButton(Mensagem.FindComponent('ABORT')).Caption := '&Abortar';
TButton(Mensagem.FindComponent('RETRY')).Caption := '&Repetir';
TButton(Mensagem.FindComponent('IGNORE')).Caption := '&Ignorar';
TButton(Mensagem.FindComponent('ALL')).Caption := '&Todos';
TButton(Mensagem.FindComponent('HELP')).Caption := 'A&juda';
end;
if Checar then
begin
Mensagem.ClientHeight := Mensagem.ClientHeight + 20;
Check := TCheckBox.Create(Mensagem);
Check.Parent := Mensagem;
Check.Left := 15;
Check.Top := Mensagem.ClientHeight - 20;
Check.Visible := True;
Check.Caption := MsgCheck;
Check.Width := Mensagem.ClientWidth - 10;
end;
Result := Mensagem.ShowModal;
if Check.Checked then
Funcao;
Mensagem.Free;
end;
end.
Exemplo de uso:
procedure TForm1.Button1Click(Sender: TObject);
procedure ChecarEstadoCheckBox;
begin
ShowMessage('O CheckBox foi checado pelo usuário na janela de mensagem.');
end;
begin
MessageDlgCheck('Este é um "MessageDlg" personalizado.' + #13#13 +
'Clique no "CheckBox" pra ver o efeito.', mtInformation, [mbYes, mbNo],
0, mrNo, True, True, 'Não mostrar esta mensagem novamente.', @ChecarEstadoCheckBox);
end;
end
Parabéns, sua inscrição no Feed RSS foi aceita. Leia em primeira mão todas as notícias do blog.
Siga @tdevrocks no Twitter agora e fique por dentro de todas as atualizações do blog.
Siga também o autor @asrsantos
Author: Adriano Santos
Adriano Santos é especialista em linguagens de desenvolvimento, Embarcadero MVP, possui +1000 artigos e vídeo-aulas publicadas em revistas e websites especializados, ex-editor chefe das revistas ClubeDelphi e WebMobile. Atualmente Diretor de Operações na startup GET IT! Technology e Consultor Senior na Embarcadero do Brasil.
Muito interessante, já havia visto algo parecido em um módulo aqui no trabalho.
Apenas um adendo.
Nas linhas:
“procedure TForm1.Button1Click(Sender: TObject);
procedure ChecarEstadoCheckBox;”
Se tu puder notar, tens dentro do evento click do botão a procedure ChecarEstadoCheckBox.
Possivelmente algum usuário terá dificuldades em perceber isto.
Abraço e parabéns belo blog.
Como funciona isso?
hernani.hayashi@gmail.com
Legal essa logica da procedureINprocedure…
vlw dessa nao sabia xD
abraço,
bot.
SIM…. muito interessante a idéia… Mas Como obtenho o ModalResult da tua Função??? TIPO: mrYes ou mrNo, dependendo do botão clicado na sua MessageDlg????
e-mail: paulo.arruda.jr@hotmail.com
Paulo,
Obrigado pelo seu comentário. E em resposta, é exatamente a mesma coisa da MessageDlg do Delphi:
if MessageDlgCheck(…) = mrYes then
…
Normal.
Adriano… Vlw mesmo pela resposta… Sua idéia é simples, prática e principalmente leve na aplicação. Anda não testei o ModalResult como vc mostrou na sua resposta, mas acredto que eu já havia tentado dessa maneira e talvez possa ter cometido algum erro aqui. Vou verificar. Mas mesmo assim… Muito obrigado pela resposta.
Abraço!!!
Paulo Arruda
e-mail: paulo.arruda.jr@hotmail.com
Parabens Adriano ,
Que pena que a funcao que usou para traduzir eh vcl, nao existe no firemokey.
Abracos