Você está na página 1de 2

Oi Pessoal, Outra dica interessante que gostaria de passar sobre como criar uma MessageDlg personalizada.

. Na minha funo eu inclui alguns novos parmetros. Que so: DefButton: Boto default; Portugues: Se a MessageDlg vai ser traduzida; Checar: Com este parmetro um CheckBox adicionado; MsgCheck: Caption do CheckBox; Funcao: Ponteiro para uma procedure que pode ser passada como parmetro; Eis a funo:

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 := 'Confirmao' else if AType = mtWarning then Caption := 'Aviso' else if AType = mtError then Caption := 'Erro' else if AType = mtInformation then Caption := 'Informao'; end; end; if Portugues then

begin TButton(Mensagem.FindComponent('YES')).Caption := '&Sim'; TButton(Mensagem.FindComponent('NO')).Caption := '&No'; 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 usurio 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, 'No mostrar esta mensagem novamente.', @ChecarEstadoCheckBox); end; end

Você também pode gostar