Общий вопрос для ящиков сообщений
-
22-08-2019 - |
Вопрос
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 для диалоговых окон какое государство:
Ненужные подтверждения раздражают