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


Edgriffo

Edgriffo

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

    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;


Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar