Вопрос

messagebox (дескриптор: "вы действительно хотите выйти?", "вы уверены?", 1);

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

Это было полезно?

Решение

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

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 выполняется при попытке закрыть вашу основную форму (например, нажав кнопку closebutton) и имеет переменную CanClose.Установка значения CanClose в значение True означает, что основную форму можно закрыть, установка значения false предотвратит закрытие основной формы:

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

Другие советы

Во-первых, убедитесь, что кнопки в окне сообщения соответствуют тексту.Итак, если текст звучит так: "Вы действительно хотите выйти?", то кнопки должны быть "Да" и "Нет".

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

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 для диалоговых окон какое государство:

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top