Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

C++Builder. Учебный курс

.pdf
Скачиваний:
14
Добавлен:
15.11.2022
Размер:
9.54 Mб
Скачать

4.3.2. Диалоговые окна

Основные отличия диалоговых окон от обычных окон прило­ жения:

-отсутствует строка меню;

-размер диалогового окна обычно изменить нельзя (свойству

B o r d e r S t y l e

формы необходимо присвоить значение

b s D ia lo g ) .

Операционная система Windows поддерживает 2 типа диало­ говых окон - модальные и немодальные.

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

Show и Show M odal.

Метод Show отображает форму как немодальную, при этом другие формы могут быть активизированы, пока данная форма ви­ дима.

Метод Show M odal отображает форму модально. Модальная форма должна быть закрыта для продолжения работы с приложе­ нием.

Пример 4.3

-Создайте новое приложение.

-Разместите на форме компонент T B u tto n (будет использо­ ваться для вывода диалогового окна).

-Добавьте в приложение новую форму:

F ile -> N e w -> F o rm C ++B uilder.

Примечание. После выполнения этой команды новая форма автоматически добавляется в проект. Для управления проектом (добавления и удаления файлов из проектов) можно использовать

кнопки

на панели инструментов C++Builder. Например,

после нажатия

tf'i

_

на кнопку “

будет выведено диалоговое окно

(рис. 4.11), в котором можно выбрать файлы, которые при нажатии на кнопку ОК будут удалены из проекта.

-Д л я свойства B o r d e r S ty le второй формы выберите из списка значение b s D ia lo g .

- Создайте обработчик события для кнопки B u tto n l.

void __fastcall T F orm l: :B u tto n lC lic k (T O b je c t ♦ S en d er)

{

Form2- >ShowModal( );

}

- В файл модуля первой формы (U n itl.c p p ) добавьте ко­ манду препроцессора.

# in c lu d e " U n it2 . h"

Файл модуля после добавления команды препроцессора будет иметь следующий вид.

# in c lu d e

< v c l.h >

#pragm a

h d rs to p

#in c lu d e " U n i tl . h"

#in c lu d e "U n it2 . h"

/ / ----------------------------------------------------------------------------------------

 

#pragm a

p ackage (sm a rt_ _ in it)

#pragm a

re s o u rc e "*.dfm "

TForml

*Form l;

/ / ----------------------------------------------------------------------------------------

 

__fastcall T Form l: : TForml(TComponent* Owner) TForm(Owner)

{

}

/ / ----------------------------------------------------------------------------------------

void __fastcall T Form l: : B u tto n lC lick (T O b je c t *Sender)

{

Form2- >ShowModal() ;

}

Указание. При разработке приложений стандартные заголо­ вочные файлы необходимо подключать перед командой препро­

цессора #pragm a h d r s to p , заголовочные файлы пользователя подключаются после этой команды.

-Запустите приложение и проверьте правильность его работы.

-Измените приложение таким образом, чтобы вторая форма отображалась немодально.

-Запустите приложение и проверьте правильность его работы.

Вопросы для самоконтроля

1.Какими файлами представлена форма приложения?

2.Как добавить новую форму в проект?

3.Сколько форм может включать приложение?

4.Как изменить главную форму приложения?

5.На какие части делится область окна приложения Windows?

6.Какие элементы относятся к неклиентской области?

7. Отличие свойств H e ig h t и C l i e n t H e i g h t?

8.Отличие свойств W id th и C lie n tW id th ?

9.В чем заключаются основные отличия диалоговых окон от обычных окон приложения?

10.Как создать диалоговое окно приложения?

11.В чем заключается разница между модальными и немо­ дальными диалоговыми окнами?

12.Какой метод используется для отображения модального диалогового окна?

13.Какой метод используется для отображения немодального диалогового окна?

14.Почему при запуске приложения нельзя изменить размер диалогового окна?

15.Объясните, для чего необходимо указывать команду пре­

процессора # i n c l u d e " U n i t2 . h"?

16. Перечислите порядок создания и отображения диалоговых

окон.

T B itB tn ,

Упражнения

1.Создайте приложение с основным и двумя диалоговыми окнами, в котором при нажатии на одну кнопку отображается пер­ вое диалоговое окно, а при нажатии на другую - второе окно. Обе кнопки расположены на основной форме приложения.

2.Создайте приложение с основным и двумя диалоговыми окнами, в котором при нажатии на кнопку, расположенной на ос­ новной форме отображается первое диалоговое окно, а при нажа­ тии на кнопку, расположенную на первом диалоговом окне, ото­ бражается второе окно.

4.4. Основы работы с кнопками

Библиотека VCL содержит несколько типов кнопок, которые можно использовать в приложениях: T B u tto n ,

T S p e e d B u tto n .

Эти кнопки имеют следующие особенности:

-кнопки не имеют свойства C o lo r, т.е. цвет кнопок изменя­ ется вместе с изменениями палитры Windows.

-д л я кнопки T B u tto n шрифт надписи может менять стиль и размер, но игнорируется изменение цвета.

Кнопки T B u tto n и T B itB tn имеют характерные только для

них свойства C a n c e l, D e f a u lt и M o d a lR e su lt. Свойства

C a n c e l и D e f a u lt используется для создания кнопок по умолча­ нию, свойство M o d a lR e s u lt может использоваться для закрытия форм, отображаемых методом ShowModal.

Компоненты-кнопки имеют только один метод, представ­ ляющий интерес: метод C lic k , который имитирует щелчок мы­ ши. Когда вызывается метод C lic k кнопки, выполняется обра­ ботчик события O n C lic k , как если бы пользователь щелкнул по этой кнопке.

Что касается событий, то обычно используется только одно событие O n C lic k .

4.4.1. Компонент TButton

Компонент T B u tto n

(страница S ta n d a r d ) - это самая про­

стая из кнопок. Кнопки

T B u tto n широко используются для

управления программами. Связанный с кнопкой алгоритм управ­ ления реализуется в обработчике события O n C lic k .

В отличие от большинства других видимых компонентов, кнопка T B u tto n является компонентом самой Windows и поэтому не может изменять свой цвет произвольным образом. Она его ме­ няет вместе с изменением палитры Windows. Кнопка всегда имеет системный цвет c lB tn F a c e и не имеет свойства C o lo r . Шрифт надписи на кнопке может менять свой стиль и размер, но компо­ нент игнорирует изменение его цвета.

4.4.2. Компонент TBitBtn

Компонент T B itB tn (страница A d d i t i o n a l ) - это кнопка с изображением, имеет несколько дополнительных свойств по срав­ нению с компонентом T B u tto n . Все вместе эти свойства управ­ ляют изображением на кнопке, а также взаимным расположением значка и текста кнопки, основными из которых являются свойства

K in d и G lyph .

Свойство G lyph представляет собой растровое изображение (глиф), помещаемое на кнопку. Сам глиф состоит из одного или более растровых изображений, которые соответствуют четырем возможным состояниям кнопки: отжата, нажата, недоступна или зафиксирована в нажатом положении. Глифы должны составлять полосу растровых изображений в следующем порядке: кнопка от­ жата, недоступна, нажата, зафиксирована в нажатом состоянии. Стандартные глифы кнопок, поставляемые с С-и-Builder, имеют размер 16x16 пикселов.

Примечание. Изображения для кнопок можно загружать из папки

C :\P ro g r a m F iles\C om m on F ile s \C o d e G e a r S h a r e d \ Image s \ B u t t o n s

Свойство K ind позволяет выбрать один из нескольких пре­ допределенных видов кнопок. По умолчанию свойство Kind име­ ет значение bkCustom , т.е. вы сами будете определять глиф и другие свойства кнопки. При изменении свойства Kind будут также изменены следующие свойства: Glyph, C ancel, D e fa u lt, C a p tio n и M o d alR e su lt.

4.4.3. Компонент TSpeedButton

Кнопка T S p eed B u tto n (страница A d d itio n a l) использу­ ется для создания инструментальных панелей, а также в случаях, когда требуется кнопка с фиксацией нажатого состояния. Отлича­ ется от кнопок T B u tto n и T B itB tn тем, что не является компо­ нентом оконного типа. Это означает, что кнопка быстрого доступа не может получить фокус ввода, и на нее нельзя переключиться клавишей Tab.

Свойство G lyph кнопки используется также для вывода рас­ тровых изображений.

У кнопок быстрого доступа имеются специфичные свойства. Свойство G ro u p ln d ex позволяет сгруппировать кнопки.

В этом случае кнопки будут вести себя подобно радиокнопкам: при нажатии одной из кнопок в группе, она фиксируется в нажа­ том положении, а кнопка, которая была нажата ранее, «выскакива­ ет», достаточно присвоить одно и то же значение свойству G ro u p ln d e x всех кнопок группы, чтобы сгруппировать кнопки быстрого доступа. По умолчанию это значение равно нулю, указы­ вающее на то, что кнопка не входит ни в одну группу.

Для создания кнопки, которая будет играть роль переключа­ теля, необходимо использовать свойство A llow A llU p. По умол­ чанию, одна из кнопок группы должна быть всегда нажата. Можно изменить это правило, если установить для свойства A llow A llU p значение tr u e . Установка этого значения у одной из кнопок ав­ томатически изменяет значение свойства A llow A llU p для ос­

тальных кнопок группы на t r u e . Теперь вы можете выбрать лю­ бую кнопку в группе или не выбирать никакую кнопку вообще.

Иногда удобно иметь кнопку быстрого доступа, которая дей­ ствует как переключатель. Кнопка-переключатель используется для включения и выключения какого-либо режима, при этом она не будет входить в группу. Чтобы сделать из отдельной кнопки быстрого доступа кнопку-переключатель, необходимо установить для ее свойства G roup I n d e x отличное от нуля значение и одно­ временно t r u e для свойства A llo w A llU p .

Свойство Down для кнопки, входящей в группу, имеет значе­ ние t r u e , если кнопка нажата, и f a l s e - в противном случае. Нажатие на кнопку изменяет значение свойства Down. Запись зна­ чения в свойство Down можно использовать для перевода кнопки в нажатое или отжатое положение. Нажатие на кнопку изменяет значение свойства Down.

Примечание. Если кнопка не входит в группу, то значение свойства Down всегда равно f a l s e .

Свойство F l a t кнопки можно использовать, чтобы сделать кнопку плоской.

4.4.4. Свойство Default

Windows имеет стандартный механизм работы с диалоговыми окнами. Одно из правил работы этого механизма заключается в следующем: если фокус ввода с клавиатуры находится в элементе управления, который не является кнопкой, и пользователь нажал клавишу E n te r , диалоговое окно будет вести себя так, как если была бы нажата кнопка по умолчанию. Обычно это кнопка ОК.

Свойство D e f a u l t используется для определения заданной по умолчанию кнопки формы. По умолчанию свойство D e f a u lt

кнопки имеет значение f a l s e . Чтобы сделать кнопку заданной по умолчанию, необходимо для свойства D e f a u l t установить значе­ ние t r u e .

Если специально не устанавливать свойство D e f a u lt ни для одной кнопки, форма не будет закрываться при нажатии клавиши

E n te r .

Таким образом, если пользователь закрывает форму, нажимая клавишу E n te r , то перед закрытием формы будет вызван обра­ ботчик события O n C lic k для кнопки по умолчанию (если такая

существует).

4.4.5. Свойство Cancel

Свойство C a n c e l работает с клавишей E sc так же, как свой­ ство D e f a u l t работает с клавишей E n te r .

Если пользователь закрывает диалоговое окно, нажимая кла­

вишу E sc , то

метод ShowM odal возвратит

значение свойства

M o d a lR e s u lt

той кнопки, для которой свойство C an cel уста­

новлено в t r u e .

 

 

По умолчанию свойство C an cel кнопки имеет значение f a ls e .

Если не устанавливать свойство C a n c e l

в t r u e ни для од­

ной из кнопок, то форма не будет закрываться при нажатии кла­ виши E sc .

Обычно свойство C a n c e l устанавливается в t r u e для кно­ пок, свойство M o d a lR e s u lt которых равен mrNo или

m rC a n c e l.

Для кнопок T B itB tn при установке свойства K ind в b k C a n c e l или bkNo свойство C a n c e l становится равным tr u e .

Если форма закрывается щелчком на системной кнопке за­

крытия окна или нажатием A lt+ F 4 , то ShowModal

возвращает

значение m rC a n c e l.

 

Пример 4.4

 

Демонстрирует использование свойств D e f a u lt

и C an cel

кнопки T B u tto n (или T B itB tn ) в диалоговых окнах.

-Создайте приложение с двумя формами, одна из которых является диалоговой (рис. 4.13).