функция/процедура | Описание |
ShowMessage(const Msg:string); | Простое диалоговое окно с кнопкой |
InputBox (const Acaption, APromt, ADefault:string): string | Диалоговое окно с заголовком Acaption, с предложением APromt, окном редактирования ADefault |
CreateMessageDialog (const Msg:string; DlgType; Buttons: TmsgDlgButtons): Tform | Окно сообщения Msg типа DlgType с кнопками Buttons в виде объекта формы |
SelectDirectory (const Caption: string; const Root: WideString; out Directory: string;): Boolean; overload; | Вызывает стандартный диалог Windows для поиска каталога. Задается root – корневой каталог, Directory – выбранный каталог |
InputQuery(const Acaption, APromt:string; var Value:string):Boolean | Диалоговое окно с заголовком Acaption, с предложением APromt, окном редактирования в котором загружено Value |
MessageDlg(const Msg:string; AType:TMsgType; AButtons: TmsgDlgButtons; HelpCtx:Longint): Word | Окно сообщения Msg типа DlgType с набором кнопок Buttons, и системой справки HelpCtx |
ShowMessageFmt(const Msg:string; Params: array of const) | Отображает простое окно сообщения, формируемого из параметров Params строкой форматирования Msg |
TAplication.MessageBox (Text, Caption:PChar; Flags:Longint): Integer | Создает диалоговое окно сообщения Text с заголовком Caption. Параметр Flags определяет пиктограмму, набор кнопок и другие характеристики |
Функции MessageDlg и MessageDlgPos отображают окна, в которых пользователю задается вопрос и анализируется ответ. Различия между MessageDlg и MessageDlgPos заключается в том, что MessageDlg отображает окно в центре экрана, а MessageDlgPos – в позиции X,Y от левого верхнего угла. Вид отображаемого окна задается параметром Atype:
mtWarning | Окно замечаний |
mtError | Окно ошибок |
mtInformation | Информационное окно |
mtConfirmation | Окно подтверждения |
mtCustom | Окно без значка |
Параметр Abuttons определяет, какие кнопки будут присутствовать:
Значение | надпись на кнопке |
mbYes | Yes |
mbNo | No |
mbOK | OK |
mbCancel | Cancel |
mbHelp | Help |
mbAbort | Abort |
mbRetry | Retry |
mbIgnore | Ignore |
mbAll | All |
Список кнопок заключается в [], поскольку параметр Abuttons является множественным. Пример: mbYesNoCancel.
Пример окна, которое иллюстрирует диалог окончания приложения:
If MessageDlg (‘Закончить приложение?’, mtConfirmation, [mbYes, mbNo],0) = mrYes then
Begin
MessageDlg (‘работа приложения окончена’, mtConfirmation,[mbOk],0);
Close;
End;
Пример: В теле процедуры запишем
Begin
…
if MessageDlg('Yo!',mtWarning,[mbYes, mbNo],0)=mrYes
then close;
end.
Получим:
Задания для самостоятельной работы:
Задача 1
Используя диалоговые окна (соответствующие процедуры и функции) составить программу перевода фунтов в килограммы.
Ниже в качестве примера приведена инструкция, используя которую можно получить исходные данные для программы пересчета веса из фунтов в килограммы.
s:=InputBox('Фунты-килограммы','Введите вес в фунтах','0');
Если во время работы программы пользователь введет строку и щелкнет на кнопке ОК, то значением функции inputBox будет введенная строка. Если будет сделан щелчок на кнопке Cancel, то значением функции будет строка, переданная функции в качестве параметра значение.
Следует еще раз обратить внимание на то, что значение функции inputBox строкового (string) типа. Поэтому если программе надо получить число, то введенная строка должна быть преобразована в число при помощи соответствующей функции преобразования. Например, фрагмент программы пересчета веса из фунтов в килограммы, обеспечивающий ввод исходных данных из окна ввода, может выглядеть так:
s:= InputBox('Фунты-килограммы','Введите вес в фунтах',''); funt:= StrToFloat(s);
Окна сообщений используются для привлечения внимания пользователя. При помощи окна сообщения программа может, к примеру, проинформировать об ошибке в исходных данных или запросить подтверждение выполнения необратимой операции, например, удаления файла.
В результате выполнения инструкции:
ShowMessage('Введите вес в фунтах.');
получим
Следует обратить внимание на то, что в заголовке окна сообщения, выводимого процедурой ShowMessage, указано название приложения, которое задается на вкладке Application окна Project Options. Если название приложения не задано, то в заголовке будет имя исполняемого файла.
Функция MessageDig более универсальная. Она позволяет поместить в окно с сообщением один из стандартных значков, например "Внимание", задать количество и тип командных кнопок и определить, какую из кнопок нажал пользователь.
r:=MessageDlg('Файл '+ FName + ' будет удален.', mtWarning, [mbOk,mbCancel], 0);
Значение функции MessageDlg — число, проверив значение которого, можно определить, выбором какой командной кнопки был завершен диалог.
В общем виде обращение к функции MessageDig выглядит так:
Выбор: = MessageDlg(Сообщение, Тип, Кнопки, КонтекстСправки)
где:
- Сообщение — текст сообщения;
- Тип — тип сообщения. Сообщение может быть информационным, предупреждающим или сообщением о критической ошибке. Каждому типу сообщения соответствует определенный значок. Тип сообщения задается именованной константой (табл. 1.8);
На рисунке изображено диалоговое окно программы пересчета веса из фунтов в килограммы. Окно содержит два компонента Label. Компонент Label1 обеспечивает вывод информационного сообщения, компонент Label2 — вывод результата работы программы.
Label2 предназначено для вывода результата работы программы
Свойство Caption символьного типа. Поэтому для того, чтобы во время работы программы вывести в поле метки числовое значение, нужно преобразовать число в строку, например, При при помощи функции FloatToStr или IntToStr.
Ниже в качестве примера приведена инструкция из программы пересчета веса из фунтов в килограммы, которая используется для вывода результата расчета.
Label2.Caption:= FloatToStr(kg)+' кг';
Задача 2
Создание программы-калькулятора для вычисления суммы и произведения двух чисел с использованием диалогового окна (модальной формы).
Вначале необходимо создать отдельную папку для сохранения всех файлов данной работы. Затем, после запуска Delphi и создания нового проекта необходимо сохранить в созданную папку главный модуль под именем Main Unit.pas (вместо предлагаемого Delphi имени Unit 1.pas), а проект под именем Lab.dpr (вместо Projectl.dpr). После этого можно начинать заполнять главную форму необходимыми компонентами в соответствии с рисунком.
Значения основных устанавливаемых свойств компонентов главной формы | ||
Свойство | Значение | Комментарий |
MainForm: TMainForm | ||
Name | MainForm | Имя переменной для ссылки на форму |
Caption | Калькулятор | Заголовок формы |
BorderStyle | bsDialog | Запрещается растяжение формы |
Label1: TLabel | ||
Caption | 1-е число: | Комментарий к 1-му введенному числу |
Label2: TLabel | ||
Caption | 2-е число: | Комментарий ко 2-му введенному числу |
Label3: TLabel | ||
Caption | Сумма: | Комментарий к выводимому значению |
Label4: TLabel | ||
Caption | Произведение: | Комментарий к выводимому значению |
LabelSum: TLabel | ||
Caption | Значение суммы по умолчанию | |
LabelProduct: TLabel | ||
Caption | Значение произведения по умолчанию | |
Buttonlnput: TButton | ||
Caption | Ввод чисел... | Текст на кнопке |
ButtonExit: TButton | ||
Caption | Выход | Текст на кнопке |
Cancel | True | Указывается, что нажатие клавиши Esc в любом месте формы трактовалось как нажатие на эту кнрпку |
Теперь создадим вторую (вспомогательную) форму для ввода двух чисел. Для этого необходимо выбрать в меню команду File|New Form. В результате будет создана новая форма с соответствующим программным модулем. Модуль необходимо сохранить (командой File|Save) в рабочем каталоге Lab в файл Input.pas.
Значения основных устанавливаемых свойств компонентов второй формы | ||
Свойство | Значение | Комментарий |
InputForm: TInputForm | ||
Name | InputForm | Имя переменной для ссылки на форму |
Caption | Ввод чисел | Заголовок формы |
BorderStyle | bsDialog | Запрещается растяжение формы |
Labell: TLabel | ||
Caption | 1-е число: | Приглашение для ввода 1-го числа |
Label2: TLabel | ||
Caption | 2-е число: | Приглашение для ввода 2-го числа |
Edit1, Edit2: TEdit | ||
Text | Вводимые значения по умолчанию | |
ButtonOk: TButton | ||
Caption | Ввод чисел... | Текст на кнопке |
Default | True | Указывается, что нажатие клавиши Enter в любом месте формы, кроме кнопок, трактуется как нажатие на эту кнопку |
ButtonCancel: TButton | ||
Caption | Выход | Текст на кнопке |
Cancel | True | Указывается, что нажатие клавиши Esc в любом месте формы трактуется как нажатие на эту кнопку |
ModalResult | mrCancel | Указывается, что при нажатии на эту кнопку форма закрывается с возвратом указанного значения в одноименном свойстве формы ModaiResult |
Теперь можно заполнить созданную вспомогательную форму необходимыми компонентами в соответствии с рисунком.
После того как обе формы спроектированы, необходимо написать соответствующие обработчики событий для связи форм друг с другом.
В Delphi вспомогательные окна можно выводить на экран в двух режимах с помощью методов формы Show и ShowModal соответственно.
- Метод Show открывает «немодальное» окно, которое появляется на экране и работает одновременно с вызвавшим его окном. Управление программой передается оператору, стоящему за оператором вызова метода Show. Этот режим обычно не используется для ведения диалога с пользователем. Примером такого рода окон являются окна Редактора кода и Инспектора объектов в Delphi.
Замечание
Вывод диалоговых окон (модальных форм) на экран удобен, если они появляются по центру экрана. Для этого необходимо установить значение свойства Position формы равным psScreenCenter.
- Метод ShowModal открывает «модальное диалоговое» окно, которое полностью берет на себя дальнейшее управление программой. Модальные окна требуют от пользователя принятия какого-то решения. Для тoro чтобы пользователь мог сообщить о принятом решении, в модальное окно вставляются необходимые интерфейсные элементы. Чаще всего это стандартные кнопки (с надписями «ОК», «Отмена», «Да», «Нет»), которые автоматически выполняют действия закрытия модального окна и помещения значения результата диалога (информации о нажатой кнопке) в свойство формы ModalResult. Свойство ModalResulz может иметь значения mrNone, mrOk, mrCancel, mrYes, mrNo и другие. Вызывающая программа получает это значение после выполнения метода ShowModal и может анализировать его для определения нужного направления своей дальнейшей работы.
Нам необходимо создать обработчик событий в ответ на нажатие кнопки ButtonInput («Ввод чисел...») главной формы, который бы вызывал вспомогательную форму в модальном режиме