Диалоговые окна в Дельфи




функция/процедура Описание
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 соответственно.

  1. Метод Show открывает «немодальное» окно, которое появляется на экране и работает одновременно с вызвавшим его окном. Управление программой передается оператору, стоящему за оператором вызова метода Show. Этот режим обычно не используется для ведения диалога с пользователем. Примером такого рода окон являются окна Редактора кода и Инспектора объектов в Delphi.

Замечание

Вывод диалоговых окон (модальных форм) на экран удобен, если они появляются по центру экрана. Для этого необходимо установить значение свойства Position формы равным psScreenCenter.

  1. Метод ShowModal открывает «модальное диалоговое» окно, которое полностью берет на себя дальнейшее управление программой. Модальные окна требуют от пользователя принятия какого-то решения. Для тoro чтобы пользователь мог сообщить о принятом решении, в модальное окно вставляются необходимые интерфейсные элементы. Чаще всего это стандартные кнопки (с надписями «ОК», «Отмена», «Да», «Нет»), которые автоматически выполняют действия закрытия модального окна и помещения значения результата диалога (информации о нажатой кнопке) в свойство формы ModalResult. Свойство ModalResulz может иметь значения mrNone, mrOk, mrCancel, mrYes, mrNo и другие. Вызывающая программа получает это значение после выполнения метода ShowModal и может анализировать его для определения нужного направления своей дальнейшей работы.

Нам необходимо создать обработчик событий в ответ на нажатие кнопки ButtonInput («Ввод чисел...») главной формы, который бы вызывал вспомогательную форму в модальном режиме



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2019-06-03 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: