MessageDlg - como faço para colocar o focus no botão desej.
03/12/2003
0
tudo bem amigos...?
gostaria de saber como faço para colocar o o focus no botão desejado.
Ex.: if MessageDlg(´Deseja atualizar o estoque e a situação de clientes ?´,mtConfirmation,
[mbYes, mbNo],0) = mrYes then
o que acontece é que quando é mostrado a menssagem o boão Yes fica com o focus, gostaria que o botão No é que ficasse, como faço isso...
Obrigado....
gostaria de saber como faço para colocar o o focus no botão desejado.
Ex.: if MessageDlg(´Deseja atualizar o estoque e a situação de clientes ?´,mtConfirmation,
[mbYes, mbNo],0) = mrYes then
o que acontece é que quando é mostrado a menssagem o boão Yes fica com o focus, gostaria que o botão No é que ficasse, como faço isso...
Obrigado....
Edgriffo
Curtir tópico
+ 0
Responder
Posts
04/12/2003
Deus
Com a função MessageDlg, não há com você fazer isso. Entretanto, você pode criar a sua própria caixa de diálogo, e dizer qual o botão que você quer focalizado. Eu desenvolvi um exemplo, e se você realmente quiser uma caixa de diálgo com essas propriedades, não vai ser tão chato assim implementar. :)
Primeiro, um detalhe: como nós vamos mudar o foco do botão, e ele só pode acontecer após o form estar ativo, teremos que criar um procedimento e uma função no form, chamados
Depois de escrever estas duas linhas dentro do [i:c0f63be738]Type[/i:c0f63be738] no Form, pressione [b:c0f63be738]Shift + Ctrl + C[/b:c0f63be738] para criar as duas funções dentro do Form. O corpo delas então fica:
Criados o procedimento e a função, agora é só chamar como você chamaria uma MsgDlg normal, sendo que com um parâmetro a mais: o caption do botão que você gostaria focalizado. Usando o exemplo que você mesmo deu, ficaria:
Espero que não tenha sido muito difícil para você entender o que eu quis dizer. Se ainda houver quaisquer dúvidas a respeito do meu código, pode perguntar que eu respondo. ;)
Espero ter ajudado! ;D Abraços, dEUS!
Primeiro, um detalhe: como nós vamos mudar o foco do botão, e ele só pode acontecer após o form estar ativo, teremos que criar um procedimento e uma função no form, chamados
procedure setaFocoBotao(Sender: TObject); function MinhaMessageDlg(sMensagem: String; mtTipo: TMsgDlgType; mbBotoes: TMsgDlgButtons; sBtnFocus: String): TModalResult;
Depois de escrever estas duas linhas dentro do [i:c0f63be738]Type[/i:c0f63be738] no Form, pressione [b:c0f63be738]Shift + Ctrl + C[/b:c0f63be738] para criar as duas funções dentro do Form. O corpo delas então fica:
procedure TForm1.setaFocoBotao(Sender: TObject); var i: Integer; begin for i := 0 to Pred((Sender as TForm).ComponentCount) do if ((Sender as TForm).Components[i] is TButton) and (((Sender as TForm).Components[i] as TButton).Tag = 1) then ((Sender as TForm).Components[i] as TButton).SetFocus; end; function TForm1.MinhaMessageDlg(sMensagem: String; mtTipo: TMsgDlgType; mbBotoes: TMsgDlgButtons; sBtnFocus: String): TModalResult; var FormDlg: TForm; begin try FormDlg := CreateMessageDialog(sMensagem, mtTipo, mbBotoes); FormDlg.OnShow := setaFocoBotao; TButton(FormDlg.FindComponent(sBtnFocus)).Tag := 1; TButton(FormDlg.FindComponent(sBtnFocus)).Default := True; FormDlg.ShowModal; Result := FormDlg.ModalResult; finally FormDlg.Free; end; end;
Criados o procedimento e a função, agora é só chamar como você chamaria uma MsgDlg normal, sendo que com um parâmetro a mais: o caption do botão que você gostaria focalizado. Usando o exemplo que você mesmo deu, ficaria:
if MinhaMessageDlg(´Deseja atualizar o estoque e a situação de clientes ?´, mtConfirmation, [mbYes, mbNo], ´No´) = mrYes then
Espero que não tenha sido muito difícil para você entender o que eu quis dizer. Se ainda houver quaisquer dúvidas a respeito do meu código, pode perguntar que eu respondo. ;)
Espero ter ajudado! ;D Abraços, dEUS!
Responder
04/12/2003
Michel
Colega essa funcao da certinho pra vc !
:o
function CaixaDeDialogo(const Msg: string; DlgType: TMsgDlgType;
Buttons: TMsgDlgButtons; Captions: array of string): Integer;
var
aMsgDlg: TForm;
i: Integer;
dlgButton: TButton;
CaptionIndex: Integer;
begin
aMsgDlg := CreateMessageDialog(Msg, DlgType, Buttons);
captionIndex := 0;
for i := 0 to aMsgDlg.ComponentCount - 1 do
begin
if (aMsgDlg.Components[i] is TButton) then
begin
dlgButton := TButton(aMsgDlg.Components[i]);
if CaptionIndex > High(Captions) then Break;
dlgButton.Caption := Captions[CaptionIndex];
Inc(CaptionIndex);
end;
end;
Result := aMsgDlg.ShowModal;
end;
:o
function CaixaDeDialogo(const Msg: string; DlgType: TMsgDlgType;
Buttons: TMsgDlgButtons; Captions: array of string): Integer;
var
aMsgDlg: TForm;
i: Integer;
dlgButton: TButton;
CaptionIndex: Integer;
begin
aMsgDlg := CreateMessageDialog(Msg, DlgType, Buttons);
captionIndex := 0;
for i := 0 to aMsgDlg.ComponentCount - 1 do
begin
if (aMsgDlg.Components[i] is TButton) then
begin
dlgButton := TButton(aMsgDlg.Components[i]);
if CaptionIndex > High(Captions) then Break;
dlgButton.Caption := Captions[CaptionIndex];
Inc(CaptionIndex);
end;
end;
Result := aMsgDlg.ShowModal;
end;
Responder
Clique aqui para fazer login e interagir na Comunidade :)