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

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

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

ti o n . Нажмите E n te r - пункт меню создан, и можно переходить к созданию следующего пункта или подпункта (подопций) меню. Редактор меню всегда оставляет пустой пункт в конце каждого всплывающего меню и справа от строки меню. Они используются только в Редакторе меню для ввода вновь создаваемого пункта и не отображаются при выполнении программы.

Каждый пункт главного меню может раскрываться в список подпунктов или содержать конечную команду. Для создания под­ пунктов щелкните мышью по строке ниже пункта меню и введите первую подопцию. Продолжайте ввод, пока не будет создан весь список подпунктов, после чего щелкните по пустому прямоуголь­ нику справа от первого пункта меню и введите второй пункт и т.д.

Ниже приводятся основные приемы, используемые при соз­ дании меню приложения:

-Название пункта (подпункта) меню задается в свойстве

C a p t i o n .

- В названиях опций можно указать символ перед тем символом, который определит клавишу быстрого выбора опции (в терминологии Windows такие клавиши называются акселерато­ рами). Например, на рис. 3.1 показан пункт Файл, который можно выбрать сочетанием клавиш A l t +Ф. При создании меню эта опция в строке C a p tio n инспектора объектов содержала текст &Файл.

-Е сли вы захотите вставить

разделительную черту, отде­

ляющую группы подопций, задайте свойству C a p t i o n

очередного

элемента значение

(минус). Так, например, создана черта, от­

деляющая опции С о х р а н и т ь к а к

. . . и П ечать

Мно­

готочие в опциях принято ставить, если предполагается, что при выборе данной опции откроется какое-то диалоговое окно.

-Д л я создания разветвленных меню, т.е. таких, у которых подопции вызывают новые списки подопций, щелкните по подоп­ ции и нажмите C t r l +- >. Такого же эффекта можно добиться по­ сле щелчка правой кнопкой мыши на подопций и выборе продол­ жения C re a te Submenu.

-Свойство S h o r t c u t

используется для назначения горячих

клавиш пунктам меню.

 

-Д л я вставки пункта

меню используется клавиша I n s e r t ,

для удаления - клавиша D e le te .

Рекомендация. Делайте свои меню по возможности ближе к стандартным. Используйте те же подчеркнутые символы, что и в

других программах Windows. Помните также, что многоточие . . .

в пункте меню означает, что выбор данного пункта приведет к от­ крытию диалогового окна.

- Создайте пункт меню Файл. В нем создайте подпункты, по­ казанные на рис. 3.2 (например, свойству C a p tio n первого под­

пункта меню присвойте

значение Новый, а для свойства S h o r t -

C ut выберите из списка комбинацию клавиш C trl+ N ).

 

 

Новый

Ctrl+N

 

 

 

 

Открыть ...

Ctrl+O

 

 

 

 

Сохранить

Ctrl+S

 

 

 

 

 

Сохранить к а к ..

 

 

 

 

 

 

Печать ...

Ctrl+P

 

 

 

 

 

Выход

 

 

 

 

 

 

Рис. 3.2. Подпункты меню Файл

 

 

- Свойству

Name

пункта меню

Файл

присвойте

значение

F ile M e n u ,

а подпунктам - соответственно

значения

F ileN ew ,

F ile O p e n ,

F ile S a v e ,

F ile S a v e A s ,

F i l e P r i n t ,

F i l e E x i t .

- Создайте

пункт

меню П равка,

в котором

создайте под­

пункты, показанные на рис. 3.3.

 

 

 

 

Отменить

Ctrl+Z

Вырезать

Ctrl+X

Копировать

Ctrl-к:

Вставить

Ctrl+V

Удалить

Del

Выделить все

Ctrl+A

Время и дата

F5

Рис. 3.3. Подпункты меню Правка

- Свойству Name пункта меню П равка присвойте значение

E d i t Menu, а подпунктам - соответственно значения E d it Undo,

E d itC u t, E d itC o p y ,

E d itP a s te ,

E d itD e le te ,

E d it-

S e l e c t A l l ,

E d itT im e.

 

 

 

- Создайте пункт меню Формат. В этом пункте создайте под­

пункты П ерен ос

по сл о вам и Шрифт

 

 

- Свойству Name пункта меню Формат присвойте значение

F orm atM enu,

а

подпунктам - соответственно

значения

Form atW ordW rap и F o rm a tF o n t.

 

 

-С оздайте пункт меню Вид. В этом

пункте создайте под­

пункт С тр о ка

со с то я н и я .

 

 

- Свойству Name пункта меню Вид присвойте значение

ViewM enu, а подпункту -

V ie w S ta te .

 

 

- Создайте пункт меню С правка. В нем создайте подпункт

О п рограм м е.

-Свойству Name пункта меню С правка присвойте значение

H elpM enu, а подпункту - H elpA bout.

-Запустите программу и обратите внимание, что пока ни один из пунктов меню не поддерживается.

3.3.Поддержка пунктов меню Файл

Вэтом разделе создаются обработчики событий для подпунк­ тов пункта меню Файл.

-Новый;

-Открыть;

-Сохранить;

-Сохранить как ...

-Д ля поддержки подпунктов меню расположите на форме

компонент T O p en D ia lo g и T S a v e D ia lo g со страницы

D ia lo g s палитры компонентов.

- Измените свойство Name этих компонентов соответственно на O p e n D ia lo g и S a v e D ia lo g .

3.3.1.Создание нового файла

-Для написания обработчика подпункта меню Новый выбе­ рите в Редакторе меню этот подпункт, выполните двойной щелчок мышью и введите следующий код:

void __fastcall T F o r m l: : F il e N e w C l i c k ( T O b je c t *S e n d e r )

{

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

/ /

Создание н ового ф айла.

Перед этим

п р о ве р к а

/ /

необходимости

сох р ан ен и я

текущ его

файла

/ /

if------------------------------------------------------------------------------------------(M emo->M odified)

 

 

 

 

 

 

 

 

{

 

 

 

 

 

 

 

int

r e s u l t

=

A p p lic a tio n - > M e s s a g e B o x (

 

 

"Сохранить

и зм енения

в д о к у м е н т е ? ",

 

 

"Текстовый

р е д а к т о р " ,

MB_YESNOCANCEL |

 

MB_ICONWAENING);

 

 

 

 

if

( r e s u l t

==

IDYES)

F i l e S a v e C l i c k ( S e n d e r ) ;

 

if

( r e s u l t

==

IDCANCEL)

r e t u r n ;

 

}

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

/ / Стирание ст р о к в ком поненте Memo,

/ /

если они присутствую т

 

/ /

----------------------------------------------------------------------------------------

 

 

 

/ /

М еш о->С1еаг( ) ;

 

 

----------------------------------------------------------------------------------------

 

 

 

/ /

У стан овка

св о й с т в а

для FileName диалога

/ /

S a v e D ia lo g

зн ачен ия

"пустая

строка"

/ /

Это б удет

о з н а ч а т ь ,

что файл

еще не был сохранен.

/ /

----------------------------------------------------------------------------------------

 

 

 

 

S a v e D ia lo g - > F ile N a m e

=

 

}

 

 

 

 

 

Компонент TMemo имеет свойство M o d ifie d , которое имеет

значение f a l s e , если документ не изменялся, и значение tr u e ,

если документ был изменен. Свойство M o d ifie d доступно только при выполнении программы.

Метод M essageB ox выводит диалоговое окно и возвращает в качестве результата значение IDYES, если пользователь нажал кнопку Да. Значение IDNO, если нажата кнопка Нет, и значение

IDCANCEL при нажатии кнопки Отмена.

 

-Д л я проверки правильности работы приложения создайте

обработчики для

подпунктов меню Сохранить и Сохранить

к а к

, добавив в них пустые строки комментария.

v o i d

__ f a s t c a l l

T F o rm l: : F ile S a v e C lic k (T O b je c t

♦ S e n d e r)

 

{

/ /

}

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

3.3.2.Открытие файла

-Создайте обработчик подпункта меню Открыть.

-Введите следующий код для обработчика пункта меню:

void __fastcall T F o r m l: : F i l e O p e n C l i c k ( T O b j e c t

♦ S e n d e r)

{

int

r e s u l t ;

 

 

 

 

 

/ /

-----------------------------------------------------------------------------------

 

 

 

 

 

 

 

/ /

Открытие

ф айла. Перед

этим

п р о ве р к а

/ /

необходим ости

со х р ан ен и я текущ его файла

/ /

-----------------------------------------------------------------------------------

 

 

 

 

 

 

 

if (M emo->M odified)

 

 

 

{

r e s u l t

= A p p lic a tio n - > M e s s a g e B o x (

 

 

"Сохранить

и зм енения

в

д о к у м е н т е ? ",

 

"Текстовый

р е д а к т о р " ,

MB__YESNOCANCEL |

 

MB_ICONWARNING) ;

 

 

 

 

if

( r e s u l t

==

IDYES)

F i l e S a v e C l i c k ( S e n d e r ) ;

}

if

( r e s u l t

==

IDCANCEL)

return;

 

 

 

 

 

 

 

 

/ /

---------------------------------------------------------------------------------------

 

 

 

 

 

 

 

/ /

Вызов

д и а л о г а

F ile O p e n

 

 

/ /

---------------------------------------------------------------------------------------

 

 

 

 

 

 

 

O p e n D ia lo g -> F ile N a m e =

" " ;

 

if ( O p e n D ia lo g - > E x e c u te ())

 

{

if (M em o ->L ines->C ount

> 0)

M em o -> C lea r( ) ;

 

 

M e m o - > L in e s - > L o a d F ro m F ile (O p e n D ia lo g - > F ile N a m e );

 

S a v e D ia lo g - > F ile N a m e

=

O p e n D ia lo g - > F ile N a m e ;

}

 

 

 

 

 

 

 

 

}

 

 

 

 

 

 

 

 

 

Для вывода диалогового окна используется метод E x e c u te

(см. H elp ). Если

пользователь,

выбрав файл, нажимает кнопку

О ткры ть, метод возвращает значение t r u e , если кнопку О тме­ на, то - f a l s e . После выполнения диалога имя выбранного файла сохраняется в свойстве F ile N am e компонента O p e n D ia lo g .

- Настройте вид диалогового окна открытия документа: вве­ сти в свойство F i l t e r компонента O p en D ialo g маски файлов, показываемых по умолчанию (рис. 3.4).

Filter Editor

Piter Name

|piter

УЧ

Все файлы (*. *)

* ж

 

Текстовы е файлы (*.txt)

*.txt

 

Программы C+ + (*.qpp)

* Ф Р

 

OK

Cancel

Help

Рис. 3.4. Настройка свойства F i l t e r компонента O penDialog

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

3.3.3.Сохранение файла

-Настройте вид диалогового окна сохранения документа (из­

мените свойство F i l t e r компонента S av eD ialo g ).

- Введите следующий код для обработчика пункта меню:

void __fastcall T F o rm l: : F il e S a v e C li c k ( T O b j e c t ♦ S e n d e r )

{

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

/ /

Если имя файла уже было

введено, нет

 

/ /

необходим ости вызывать

диалог F ile S a v eA s .

/ /

Д остаточн о

сохранить

файл

с помощью

метода

/ /

S a v e T o F ile

с в о й ств а

L in e s

компонента

ТМешо

/ /

if----------------------------------------------------------------------------------------(S a v e D ia lo g -> F ile N a m e

 

 

 

 

!=

"" )

 

{

M e m o - > L in e s - > S a v e T o F ile (S a v e D ia lo g - > F ile N a m e );

 

M em o->M odified

=

false;

 

}

 

 

/ /

else

 

 

------------------------------------------------------------------------------------------

 

 

/ /

Если имя файла

не

было у к а з а н о ,

/ /

выполнение пункта

Сохранить как

/ /

F-------------------------------------------------------------------------------------------i l e S a v e A s C l i c k ( S e n d e r ) ;

 

}

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

3.3.4. Написание обработчика для пункта меню

 

 

 

 

Сохранить как

 

 

- Введите следующий код для обработчика пункта меню С о ­

х р а н и т ь к а к :

 

 

 

 

void __fastcall

T F o rm l: : F ile S a v e A s C lic k ( T O b je c t

* S en d er)

 

 

 

 

 

{

 

 

 

 

 

 

/ /

-------------------------------------------------------------------------------------------

 

 

 

 

 

/ /

Вызов

д и а л о га

F ile S a v e A s для

сохранени я ф айла.

/ /

У становка

с в о й с т в а M o d if ie d

в

f a l s e ,

/ /

т . к .

файл

уже

со х р а н е н .

 

 

/ /

-------------------------------------------------------------------------------------------

 

 

 

 

 

 

S a v e D i a l o g - > T i t l e = "Сохранение

д о к у м е н та ";

 

if ( S a v e D ia lo g - > E x e c u te ())

 

 

 

{

 

 

 

 

 

M e m o - > L in e s - > S a v e T o F ile (S a v e D ia lo g - > F ile N a m e ); M em o->M odified = false;

}

}

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

3.4.Поддержка подпунктов меню Правка

-Напишите обработчик для подпункта меню Отмена:

void __fastcall T F o rm l: :E d itU n d o C lic k (TO bject ♦ S e n d e r)

{

Memo->Undo( ) ;

}

- Напишите обработчик для подпункта меню В ы р езать:

void __fastcall T F o rm l: : E d itC u tC lic k (T O b je c t ♦ S en d er)

{

M e m o - > C u tT o C lip b o a rd ();

}

- Напишите самостоятельно обработчики для подпунктов ме­ ню К о п и р о в а т ь , В с т а в и т ь , У да ли ть и В ыделить в с е .

Указание. При написании обработчиков используйте сле­

дующие методы компонента ТМешо:

C opyT oC lipboard,

P a s te F ro m C lip b o a rd , C le a r S e le c tio n ,

S e le c tA ll.

- Напишите обработчик для подпункта меню Время и д ата .

void __fastcall T F o rm l: :E d itT im eC lick { T O b je ct

♦ S e n d e r)

 

{

 

Memo- > L in e s - >Add (D a te T o S tr (Date () ) + '

+

T im e T o S tr (Time () ) ) ;

 

}

 

Для добавления строк в текстовый редактор используется ме­ тод Add свойства L in e s компонента ТМето. Функции D ate () и T im e () возвращают соответственно текущую дату и текущее время. Функции D a te T o S tr и T im e T o S tr преобразуют соответ­ ственно дату и время в строку.

3.5.Поддержка подпунктов меню Формат

-Напишите самостоятельно обработчик для подпункта меню

П ерен ос по с л о в ам .

- Напишите самостоятельно обработчик для подпункта меню

Шрифт.

3.6. Поддержка подпунктов меню Вид

Для создании в программе строки состояния обычно исполь­ зуется компонент T S ta tu s B a r .

Ниже

приведены

основные

свойства

компонента

T S ta tu s B a r и кратко описано их назначение.

Свойство

Описание

P a n e l s

Это свойство определяет отдельные панели.

 

Используется в строках состояния с несколь­

 

кими панелями

S im p l e P a n e l

Определяет, будет ли в строке состояния ото­

 

бражаться простая панель или несколько пане­

 

лей

S im p le T e x t

Содержит текст простой панели строки со­

 

стояния

S t a t u s B a r -

Содержит текст первой панели строки состоя­

> P a n e l s - >

ния

I t e m s [ 0 ] - > T e x t

-Поместите в форму компонент T S ta tu s B a r (страница

W in32). Строка состояния автоматически разместится внизу фор­

мы. Свойство

A lig n для

нее

по умолчанию

имеет значение

a lB o tto m .

 

 

 

 

-Измените

свойство

Name

компонента

на S ta tu s B a r .

Свойству S im p le P a n e l присвойте значение t r u e .