MessageDlg foco no botao NO

13/12/2005

if MessageDlg(´Permite alterar padrão de quem fatura: ´, mtConfirmation, [mbYes,mbNo], 0) = mrYes then

Tenho essa msg, e gostaria que o foco ficasse sempre no No, e nao no Yes, como esta fazendo


No aguardo


Evandro


Evandro_araujo

Respostas

13/12/2005

Rafmattos

O Mesmo Problema que eu tive eu procurei em varios lugares e não achei, a minha unica solução foi fazer uma caixa de dialogo personalizada...


Responder Citar

13/12/2005

Martins

Nesse caso é só usar o MessageBox.

MessageBox (Handle, Messagem, Caption, Botoes)


  MessageBox(0, Pchar(´Testando o MessageBox!´), ´Teste´, MB_YESNO+MB_DEFBUTTON2+
                     MB_ICONQUESTION);


Espero q ajude!!!

Boa Sorte!!!


Responder Citar

14/12/2005

Adriano Santos

Nesse caso é só usar o MessageBox.
MessageBox (Handle, Messagem, Caption, Botoes)
  MessageBox(0, Pchar(´Testando o MessageBox!´), ´Teste´, MB_YESNO+MB_DEFBUTTON2+
                     MB_ICONQUESTION);
Espero q ajude!!! Boa Sorte!!!


O Mesmo Problema que eu tive eu procurei em varios lugares e não achei, a minha unica solução foi fazer uma caixa de dialogo personalizada...



Bom amigo, Eu sempre dou a mesma dica. Se quiseres usar MessageDlg então deve criar sua própria função MessageDlg, se este não for o problema use o MessageBox como recomendado pelo meu camarada [b:c93a91e124]Martins[/b:c93a91e124]. Logo abaixo confira um algoritimo que criei para fazer minha MessageDlg personalizada:

function Dc_MessageDlg(Msg: string; AType: TMsgDlgType; AButtons:
  TMsgDlgButtons; IndiceHelp: LongInt; DefButton: TMOdalResult = mrNone;
  Portugues: Boolean = True): Word;
var
  I: Integer;
  Mensagem: TForm;
begin
  Mensagem := CreateMessageDialog(Msg, AType, Abuttons);
  Mensagem.HelpContext := IndiceHelp;
  with Mensagem do
  begin
    for i := 0 to ComponentCount - 1 do
    begin
      if (Components[i&93; is TButton) then
      begin
        if (TButton(Components&91;i&93;).ModalResult = DefButton) then
        begin
          ActiveControl := TWincontrol(Components&91;i&93;);
        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;
  Result := Mensagem.ShowModal;
  Mensagem.Free;
end;



Dá pra fazer a festa com isso. :D


Responder Citar

14/12/2005

Martins

Muito bom esse algoritimo bolado por vc [b:7b511f54d6]Adriano[/b:7b511f54d6], tem a opção de um botão default, blz mesmo. Mandou bem novamente.

Postei o MessageBox por parecer ser uma solução mais imediata, mas seu código tá show!!

:D


Responder Citar

14/12/2005

Adriano Santos

Muito bom esse algoritimo bolado por vc [b:6486f02dd8]Adriano[/b:6486f02dd8], tem a opção de um botão default, blz mesmo. Mandou bem novamente. Postei o MessageBox por parecer ser uma solução mais imediata, mas seu código tá show!! :D



Obrigado velhinho. Na verdade tenho ainda outra solução para os mais ´avançadinhos´. Um MessageDlg com CheckBox, esse é bem legal.

Isso mata também um problema na tradução dos botões que todo mundo tenta fazer e sempre dá uns olés nos iniciantes.

Se liga a solução com o CheckBox:

function Dc_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&93; is TButton) then
      begin
        if (TButton(Components&91;i&93;).ModalResult = DefButton) then
        begin
          ActiveControl := TWincontrol(Components&91;i&93;);
        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 <> nil then
    if Check.Checked then
      Funcao;
  Mensagem.Free;
end;



[b:6486f02dd8]Use assim[/b:6486f02dd8]

procedure TForm1.Button1Click(Sender: TObject);
  procedure MostraMensagem;
  begin
    ShowMessage(´Clicou´);
  end;
begin
  Dc_MessageDlgCheck(´Clique no CheckBox.´, mtInformation, [mbYes, mbNo&93;, 0, mrNo, True, False, ´Clique neste CheckBox´,
    @MostraMensagem);
end;



Responder Citar

14/12/2005

Martins

Blz Velhinho !!!

Mandou bem outra vez, realmente essa é pro pessoal q tá mais acostumado com o Delphi, mas dá para usar na boa.

T+


Responder Citar

15/12/2005

Evandro_araujo

como ficaria a chamada da funcao acima???


Responder Citar