Array
(
)

MessageDlg foco no botao NO

Evandro_araujo
   - 13 dez 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


Rafmattos
   - 13 dez 2005

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...


Martins
   - 13 dez 2005

Nesse caso é só usar o MessageBox.

#Código


MessageBox (Handle, Messagem, Caption, Botoes)


#Código

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


Espero q ajude!!!

Boa Sorte!!!


Adriano Santos
   - 14 dez 2005


Citação:
Nesse caso é só usar o MessageBox.

#Código


MessageBox (Handle, Messagem, Caption, Botoes)


#Código

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


Espero q ajude!!!

Boa Sorte!!!


Citação:

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 Martins. Logo abaixo confira um algoritimo que criei para fazer minha MessageDlg personalizada:

#Código

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] 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;
Result := Mensagem.ShowModal;
Mensagem.Free;
end;



Dá pra fazer a festa com isso. :D


Martins
   - 14 dez 2005

Muito bom esse algoritimo bolado por vc Adriano, 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


Adriano Santos
   - 14 dez 2005


Citação:
Muito bom esse algoritimo bolado por vc Adriano, 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:

#Código


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] 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 <> nil then
if Check.Checked then
Funcao;
Mensagem.Free;
end;



Use assim

#Código

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



Martins
   - 14 dez 2005

Blz Velhinho !!!

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

T+


Evandro_araujo
   - 15 dez 2005

como ficaria a chamada da funcao acima???