Общий вопрос для почтовых ящиков - PullRequest
0 голосов
/ 09 февраля 2009

окно сообщения (дескриптор, «вы действительно хотите выйти?», «Вы уверены?», 1);

в этой кнопке есть две вещи, которые может сделать пользователь. хорошо и отмени. Какой код я должен написать, что кнопка закрывает программу в «ОК» и завершает диалог при нажатии кнопки отмены?

Ответы [ 2 ]

3 голосов
/ 09 февраля 2009

Сначала убедитесь, что кнопки в окне сообщения соответствуют тексту. Так что, если текст «Вы действительно хотите выйти?» тогда кнопки должны быть «Да» и «Нет».

Во-вторых, используйте соответствующие константы, чтобы потом было легче читать ваш код. Это было бы:

var
  Res: integer;

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

Результатом будет либо IDYES, либо IDNO. Предполагая, что вызов находится внутри метода вашей основной формы, вы должны использовать его следующим образом:

if Res = IDYES then
  Close;

Если вы позвоните из другого места, вы также можете позвонить

if Res = IDYES then
  Application.Terminate;

Редактировать: Пожалуйста, ознакомьтесь также с Руководствами по пользовательскому интерфейсу Vista для диалоговых окон , в которых указано:

Ненужные подтверждения раздражают

2 голосов
/ 09 февраля 2009

Delphi предлагает лучшие решения для отображения окна сообщений. Я должен использовать функцию MessageDlg. Возвращаемое значение функции MessageDlg (и MessageBox) указывает выбор пользователя. Таким образом, когда вы помещаете кнопку «Да» в MessageDlg, возвращаемое значение будет равно «Да», когда пользователь нажимает кнопку «Да». Итак, ваш код будет выглядеть так:

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

Вы также хотите закрыть приложение, если пользователь выберет Да. Когда у вас есть нормальное приложение Delphi VCL, вы можете реализовать событие CloseQuery вашей главной формы, событие CloseQuery выполняется при попытке закрыть вашу основную форму (например, нажав кнопку закрытия) и имеет переменную CanClose. Если для параметра CanClose задано значение True, значит, что MainForm можно закрыть, а значение false - закрытие основной формы:

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