Процедура MessageDlg

Также можно использовать стандартные сообщения типа MessageDlg, которые бывают следующих типов:

Ø информационный (mtInformation);

Ø вопросительный (mtConfirmation);

Ø сообщение об ошибке (mtError);

Ø сообщение типа «Внимание» (mtWarning),

Ø специальный диалог (mtCustom).

Общий вид диалогового сообщения выглядит следующим образом:

MessageDlg(const Msg:String, DlgType:TmsgDlgType, Buttons: TmsgDlgBtn, HelpCtx: Integer): Integer;

Const – текстовое сообщение, которое будет напечатано в диалоговом окне;

DlgType – тип диалога (описаны выше);

Buttons – множество кнопок, которое будет на форме диалога.

Обычно, для всех типов, кроме mtConfirmation и mtCustom, используется логически единственное множество [mbOk] (пользователь может только согласиться с текстом сообщения). Для остальных типов можно выбрать следующие кнопки: (mbYes, mbNo, mbOK,mbCancel,mbAbort,mbRetry,mbIgnore,mbAll,mbNoToAll,mbYesToAll, mbHelp), также возможно использовать вместо множественного типа следующие константы:

mbYesNo = [mbYes, mbNo];

mbYesNoCancel = [mbYes, mbNo, mbCancel];

mbYesAllNoAllCancel = [mbYes, mbYesToAll, mbNo, mbNoToAll, mbCancel];

mbOKCancel = [mbOK, mbCancel];

mbAbortRetryIgnore = [mbAbort, mbRetry, mbIgnore];

mbAbortIgnore = [mbAbort, mbIgnore].

HelpCtx – указывается, если есть, тема справки, обычно этот параметр равен нулю.

Например, для сообщений, показанных на рисунке 18, применены следующие функции:

MessageDlg('Ошибка!',mtError,[mbOk],0);

MessageDlg('Внимание!',mtWarning,[mbOk],0);

MessageDlg('Информационнный текст', mtInformation, [mbOk], 0);

MessageDlg('От пользователя требуется выбор'+#13+

'В конце сообщения обычно ставят знак вопроса

"?"',mtConfirmation,[mbYes, mbNo,mbCancel],0);

MessageDlg('Диалог Custom', mtCustom, mbAbortRetryIgnore, 0);

Рисунок 18 - Результаты выполнения команды MessageDlg

При нажатии пользователем любой кнопки, кроме Help, функция MessageDlg возвращает программе результат типа Integer, с помощью которого можно управлять дальнейшими действиями. Чтобы не запоминать все числа, соответствующие каждой кнопке, ввели тип данных TModalResult, который может принимать следующие значения: mrNone, mrOk, mrCancel, mrAbort, mrRetry, mrIgnore, mrYes, mrNo, mrAll, соответствующие нажатию кнопки с подобным типом (см. также работа с формой).

Пример 11. Рассмотрим часть программы, для которой необходимо ввести два числа и важно, чтобы одно было строго больше другого (например, ввод диапазона для расчета значений функции). Для решения данной задачи нам понадобится форма, на которой расположены два редактора и две кнопки (рисунок 19).

Рисунок 19 - Внешний вид формы

Для формы и кнопки написали следующий код:

procedure TForm1.Button1Click(Sender: TObject);

var

Mr:TModalResult;

a,b:real;

begin

a:=StrToFloat(Form1.Edit1.Text);

b:=StrToFloat(Form1.Edit2.Text);

if a>=b then

begin

Mr:=MessageDlg('Данные введены неверно.

Ввести заново?',mtConfirmation,

[mbYes, mbNo,mbCancel],0);

if Mr=mrYes then

Form1.FormShow(Sender);

exit;

end;

end;

procedure TForm1.FormShow(Sender: TObject);

begin

Form1.Edit1.Text:='';

Form1.Edit2.Text:='';

if Form1.Edit1.CanFocus then

Form1.Edit1.SetFocus;

end;

Теперь, при запуске программы, если пользователь ввел первое число меньше второго, появится диалоговое окно (рисунок 20). Если пользователь нажал на кнопку «Yes», то неверно введенные данные будут стерты (передается управление методу формы onShow), и пользователь сможет ввести данные заново, если пользователь выбрал другие кнопки, то программа просто «выйдет» из текущей процедуры.

Рисунок 20 - Результаты выполнения программы


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: