Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
delphi.pdf
Скачиваний:
191
Добавлен:
24.02.2016
Размер:
6.84 Mб
Скачать

Глава 9. Окна диалога

Все мы любим иногда поболтать. Это человеческое свойство передалось программам, и они частенько у вас что-то спрашивают, а вы им что-то отвечаете, иногда невпопад. “Беседа”, правда, идет текстом, а не голосом. Так вот, разговор между программой и пользователем называется диалогом. Организация диалога — важнейшая часть любой программы. Ваша прямая обязанность сделать этот диалог приятным. По форме диалог прост — появляется окно с некоторым сообщением, полем для ввода вашего ответа и кнопкой OK. Вы внимательно читаете сообщение, набираете строку-ответ и нажимаете кнопку OK. Вот и все. Создатели среды Delphi предусмотрели все возможные типы диалогов и создали для вас ряд великолепных “домашних заготовок”.

9.1. Понятие окна диалога

В основе диалога между пользователем и компьютером лежит окно диалога (dialog box) — форма, содержащая компоненты для ввода данных: кнопки, текстовые поля, флажки, переключатели, списки и др. С помощью этих компонентов пользователь просматривает и вводит данные. В среде Delphi окно диалога создается на основе обычной формы.

Окна диалога могут работать в одном из двух режимов, монопольном (иногда говорят модальном, от англ. modal) и немонопольном (немодальном,

от англ. modeless).

Монопольное окно диалога не дает пользователю возможности переключиться на другие окна программы до тех пор, пока работа с ним не будет завершена. Сразу заметим, что это не мешает пользователю переключаться на другие программы, например, с помощью панели задач Windows или нажатием комбинации клавиш Alt+Tab. Большинство окон диалога работает в монопольном режиме.

Немонопольные окна диалога предоставляют пользователю свободу выбора, позволяя вводить данные сразу в нескольких окнах.

9.2. Окно "About"

9.2.1. Подготовка формы

Простейшим примером окна диалога является окно About ("О программе"). Как правило, оно открывается по команде меню Help | About... , работает в

425

монопольном режиме и служит лишь для информирования пользователя. В предыдущей главе мы рассматривали программу PicView, там как раз не достает окна About. Исправим это упущение и на практике познакомимся с созданием простейших окон диалога.

Шаг 1. Запустите среду Delphi и откройте проект PictureViewer. Добавьте в главное меню пункт Help (программный идентификатор HelpMenuItem) с командой About... (программный идентификатор AboutMenuItem). По команде About... (рисунок 9.1) будет вызываться окно диалога About, которое мы дальше разработаем.

Рисунок 9.1. Пункт меню для вызова окна About

Шаг 2. Добавьте в проект новую форму, переименуйте ее в AboutForm и сохраните модуль под именем About.pas. Придайте форме нужные размеры и установите ее заголовок (свойство Caption) в значение About Picture Viewer. Далее сделаем из этой формы окно диалога.

Шаг 3. Обычная форма имеет много "фитюлек", которые совсем не нужны окну диалога, например раздвижную границу, меню управления окном, кнопки сворачивания и разворачивания окна. Чтобы их убрать, установите свойство BorderStyle в значение bsDialog (рисунок 9.2).

Рисунок 9.2. Превращение формы в окно диалога

426

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

у пользователя не будет возможности изменить размеры формы;

у формы не будет кнопок сворачивания и разворачивания;

в управляющем меню будут лишь два пункта: Move и Close.

Шаг 4. Большинство монопольных окон диалога появляются в центре экрана. За это у формы отвечает свойство Position. Изначально оно равно poDesigned — форма появляется точно в том же месте, где она находится во время разработки. Чтобы центрировать форму на экране, установите свойство Position в значение poScreenCenter. Заметим, что другие значения свойства Position позволяют центрировать форму относительно главной формы, относительно формы-владельца или вообще не центрировать (см. параграф 7.3.4).

С формой разобрались, займемся компонентами. Окно About обычно содержит красивый рисунок, название программного продукта, замечания по поводу авторских прав или что-нибудь в этом роде и, конечно же, кнопку OK. Начнем с того, что добавим в форму кнопку.

9.2.2. Кнопка

Разрабатывая окно диалога, прежде всего необходимо обеспечить для пользователя возможность завершения диалога по окончание ввода данных. Вот тут как раз и нужны кнопки (buttons). В простейшем окне диалога, каким является окно About, достаточно всего одной кнопки (она обычно называется OK или Close). В более сложных окнах может понадобиться несколько кнопок. Например, в том случае, когда окно диалога принимает от пользователя данные, в него помещают кнопки OK и Cancel, которые позволяют пользователю подтвердить или отменить результат диалога.

Обычная кнопка создается с помощью компонента Button, расположенного в палитре компонентов на вкладке Standard.

Рисунок 9.3. Компонент Button

Характерные свойства этого компонента кратко описаны в таблице 9.1.

427

Свойство

Описание

Action

Команда, хранящаяся в компоненте ActionList и выполняемая при нажатии кнопки.

Cancel

Если равно значению True, то кнопка срабатывает при нажатии клавиши Esc.

Caption

Текст на кнопке.

Default

Если равно значению True, то кнопка срабатывает при нажатии клавиши Enter.

Исключением является ситуация, когда в окне диалога активна другая кнопка — в этом

 

случае срабатывает она.

При нажатии кнопки значение этого свойства копируется в одноименное свойство ModalResult формы, что приводит к закрытию монопольного окна диалога. Однако для этого

значение свойства должно отличаться от mrNone.

WordWrap Если равно значению True, то работает перенос слов.

Таблица 9.1. Важнейшие свойства компонента Button

Текст на кнопке определяется значением свойства Caption. В тексте может присутствовать символ &, который не пишется на кнопке, а обеспечивает подчеркивание следующего за ним символа. Нажатие подчеркнутого символа на клавиатуре в комбинации с клавишей Alt вызывает срабатывание кнопки. Например, если свойство Caption содержит строку &Yes, то на кнопке будет написано Yes, и для нажатия кнопки можно воспользоваться комбинацией клавиш Alt+Y.

Пользователи, привыкшие работать с клавиатурой, знают, что одна из кнопок в окне диалога срабатывает при нажатии клавиши Enter. Это происходит при условии, что кнопка содержит значение True в свойстве Default. Такая кнопка, как правило, содержит текст OK и внешне отличается от остальных наличием жирной рамки.

Одна из кнопок окна диалога может срабатывать при нажатии клавиши Esc. Это происходит, если кнопка содержит значение True в свойстве Cancel. Как правило, такая кнопка подписывается текстом "Отмена" (Cancel).

Когда пользователь нажимает кнопку, в компоненте Button происходит событие OnClick. В обработчике этого события вы можете завершить диалог. Завершение немонопольного диалога выполняется вызовом метода Close у объекта формы. Завершение монопольного окна диалога выполняется установкой ненулевого значения в свойстве ModalResult формы. Впрочем, без этого можно обойтись, если воспользоваться свойством ModalResult компонента Button (мы не ошиблись, это свойство имеет и форма, и кнопка). Свойство ModalResult компонента Button устанавливается в окне свойств и по умолчанию равно значению mrNone. Если вы выберите другое значение, то нажатие кнопки будет вызывать

428

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]