Pergunta geral para messageboxes
-
22-08-2019 - |
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?
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