Pergunta

messagebox (punho, 'você realmente deseja sair?', 'Você tem certeza?', 1);

neste botão, há duas coisas, o que o usuário pode fazer. OK e Cancelar. o código que eu tenho que escrever, que o botão fecha o programa em "ok" e termina o diálogo, ao pressionar cancelar?

Foi útil?

Solução

Delphi fornece as melhores soluções para mostrando um messagebox. I deve usar a função MessageDlg. O valor de retorno da função MessageDlg (e MessageBox) indica a escolha usuários. Então, quando você colocar um botão sim na MessageDlg, o valor de retorno será mrYes quando o usuário pressiona o botão Sim. Portanto, o seu código seria assim:

var
  ShouldClose: Boolean;
begin
  if MessageDlg('Do you really want to quit?', mtConfirmation, 
      [mbYes, mbNo], 0) = mrYes then
    ShouldClose := True
  else
    ShouldClose := False;
end;

Você também quer encerrar a sua aplicação se os usuários escolhe Sim. Quando você tem uma aplicação normal Delphi VCL você pode implementar o evento CloseQuery de vocês Mainform, o evento CloseQuery é executado quando você tenta fechar sua mainform (como clicar no closebutton) e tem um CanClose variável. Definir CanClose a meios Verdadeiros o MainForm é OK para fechar, definindo-a como falsa irá impedir o seu mainform de fechar:

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  CanClose := MessageDlg('Do you really want to quit?', mtConfirmation, 
    [mbYes, mbNo], 0) = mrYes;
end;

Outras dicas

Em primeiro lugar, certifique-se de que os botões na caixa de mensagem com o texto. Então, se o texto é "Você realmente deseja sair?" em seguida, os botões devem ser "Sim" e "Não".

Em segundo lugar, usar as constantes apropriadas, de modo que seu código é mais fácil de ler mais tarde. Isso seria:

var
  Res: integer;

Res := Application.MessageBox('Do you really want to exit?', 'Are you sure?',
  MB_ICONQUESTION or MB_YESNO);

O resultado será, então, quer IDYES ou IDNO. Assim, supondo que a chamada está dentro de um método do seu formulário principal, você iria utilizá-lo como:

if Res = IDYES then
  Close;

Se você chamar isso de outro lugar, você também pode chamar

if Res = IDYES then
  Application.Terminate;

Editar: Por favor, também visite a Vista Usuário Diretrizes Inteface em caixas de diálogo qual estado:

confirmações desnecessários são irritantes

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top