книги / C++Builder. ╨г╤З╨╡╨▒╨╜╤Л╨╣ ╨║╤Г╤А╤Б
.pdfti 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 .