1102
.pdf-Начните новый проект.
-Сохраните новый проект. При сохранении проекта создайте новую папку и назовите ее, например Калькулятор. Файлу мо
дуля присвойте имя U C alc, а файлу проекта - C alc .
- Измените свойство Caption формы на заголовок Калькулятор. -Измените свойство B o r d e r S ty le на b s S in g le (запреща
ем изменение размеров окна).
-Запретите кнопку максимизации окна формы (измените значение свойства B o r d e r - > Ico n sb iM a x im iz e).
-Запустите приложение и убедитесь, что размеры окна изме нить нельзя, кнопка максимизации окна стала недоступной.
-Расположите |
на форме 3 компонента T E d it |
из страницы |
||
S ta n d a r d палитры |
компонентов и назовите |
их соответственно |
||
e d O p e ra n d l, ed O p e ran d 2 |
и e d R e s u lt. |
|
|
|
-Очистите содержимое |
свойства T e x t |
этих |
компонентов. |
Для этого выберите все три компонента T E d it вместе, нажав кла вишу S h i f t и нажимая каждое из трех окон редактирования по следовательно.
-Д л я компонента e d R e s u lt измените свойство R eadonly на tr u e .
-Запустите программу и убедитесь, что компонент edR e s u l t недоступен для редактирования.
- Измените цвет текста, который будет отображаться внутри поля e d R e s u lt, настроив свойство F o n t компонента. Изменить цвет можно двумя способами, выбрав его из списка или из диало гового окна, которое появляется после нажатия кнопки с тремя точками.
-Расположите компонент T B itB tn из страницы |
A d d i |
t i o n a l палитры компонентов и измените свойство K ind |
компо |
нента на b k C lo s e .
Изменение свойства K in d компонента на b k C lo se приводит к тому, что после нажатия пользователем этой кнопки приложение закрывается. Это действие кнопки C lo s e задано по умолчанию (если свойство K in d компонента T B itB tn равно b k C lo se).
-Н а странице A d d i t i o n a l палитры компонентов нажмите на изображение компонента T S p e e d B u tto n , удерживая клавишу
S h i f t .
Изображение компонента T S p e e d B u tto n будет выбрано в постоянном режиме, что позволит вам поместить несколько ком понентов того же самого вида без нажатия каждый раз на изобра жение компонента из палитры. Кнопка изображения компонента будет выглядеть не только нажатой, но также вокруг изображения появится рамка, указывающая на постоянный режим работы (ре жим залипания).
-Расположите 4 компонента T S p e e d B u tto n , предназначен ных для выполнения арифметических операций.
-Вернитесь в нормальный режим работы, для этого нажмите
кнопку & на палитре компонентов.
- Назовите эти компоненты sbA dd, sb S u b , sbM ul, sb D iv .
-Измените свойство C a p tio n этих компонентов для вывода
соответствующих знаков арифметических операций. |
|
|
||
- Измените свойства H e ig h t и W id th компонентов на 25. |
|
|||
-Расположите компонент |
T S p e e d B u tto n , |
назовите |
его |
|
s b C le a r и свойству C a p tio n |
присвойте значение C le a r . |
|
||
-Свойству H e ig h t компонента |
присвойте |
значение |
25, |
|
свойству W id th - значение 75. |
|
|
|
|
-Расположите компонент T L a b e l |
из страницы S t a n d a r t , |
назовите его lb O p e ra to r и свойству C a p tio n присвойте значение?.
-Расположите компонент T B ev e l (страница A d d i t io n a l) , свойству S t y l e компонента присвойте значение b s R a is e d .
Процесс конструирования формы на этом закончился, настало время написания программного кода.
2.2. Написание программного кода
Вначале обеспечим поддержку арифметических операций.
- Нажмите дважды на кнопку sbA dd. В ответ на это С-н-Builder создаст заданный по умолчанию обработчик события O n C lic k для этой кнопки.
Дело в том, что функция S t r T o F lo a t не может преобразо вать в число пустую строку. Для продолжения выполнения про
граммы следует нажать кнопку C o n tin u e .
- Измените обработчик события OnClick для кнопки sbAdd:
void __fastcall T F o rm l: : s b A d d C lic k (T O b je c t * S en d er)
{
double o p l , o p 2 ;
if (e d O p e ra n d l-> T e x t!="" && ed O p eran d 2 -> T ex t!="")
{
o p l = |
S t r T o F l o a t ( e d O p e r a n d l - > T e x t ) ; |
op2 = |
S t r T o F l o a t( e d O p e r a n d 2 - > T e x t ) ; |
e d R e s u lt - > T e x t = F l o a t T o S t r ( o p l + o p 2 ) ; l b O p e r a t o r - > C a p t i o n = "+";
}
}
-Аналогичным образом создайте обработчики событий для поддержки операций вычитания, умножения и деления.
- Запустите приложение и проверьте правильность его работы. -Напишите обработчик события O n C lic k для поддержки
кнопки s b C le a r .
void __fastcall T F o rm l: : s b C le a r C l i c k ( T O b je c t *S e n d er)
{
e d O p e r a n d l - >Text |
= |
e d O p e ra n d 2 - >Text |
= |
e d R e s u lt - > T e x t = |
|
lb O p e r a t o r - > C a p t i o n = e d O p e r a n d l - > S e tF o c u s ( ) ;
}
Метод S e tF o c u s передает фокус компоненту e d O p e ra n d l, т.е. активизирует его.
Обратите внимание, что если вы находитесь в процессе вы полнения вычислений и хотите вернуться и изменить значение од ного из операндов, старый результат все еще показан в окне
e d R e s u lt . Поскольку это может запутать пользователя, который может не понять, правильный это результат или нет, следует обес печить средство автоматической очистки поля результата всякий раз, когда один из операндов изменяется.
-Выберите компонент e d O p e ra n d l.
-Переключите инспектор объектов на страницу E v e n ts .
Появится список событий, на которые может реагировать компонент T E d it. Первое из этих событий называется OnChange и возникает каждый раз при изменении содержимого окна редак тирования. Для этого события Вам и нужно написать обработчик.
- Дважды щелкните во втором столбце инспектора объектов в строке напротив события OnChange для генерации кода обработ чика события. Сгенерированный обработчик события будет назван e d O p e ra n d lC h a n g e по имени компонента, для которого он предназначен.
-Поскольку вы будете использовать один и тот же обработ чик события для обоих компонентов, измените его имя в инспек торе объектов на более общее edO perandC hange.
-Введите следующий код в обработчик edO perandC hange:
void __fastcall T F o rm l::e d O p eran d C h a n g e(T O b je ct * S e n d e r )
{
e d R e s u lt - > T e x t =
l b O p e r a t o r - > C a p t i o n = "?" ;
}
Для компонента edO perand2 выполните следующие дейст
вия:
-Выберите компонент edO perand2.
-В инспекторе объектов для события OnChange этого ком
понента выберите из списка обработчик события e d O p e ran d
Change.
-Запустите приложение и проверьте правильность его работы.
Теперь |
и при внесении изменений в компоненте |
e d O p e ran d 2 |
будет также вызываться обработчик события edO p- |
e ra n d C h a n g e .
Отметим некоторые недостатки нашего калькулятора:
1. Он позволяет вводить не только цифры, но также буквы и другие символы.
2. Попробуйте сложить два числа, например 1.2 и 2.3, в ре зультате вы получите сообщение об ошибке.
В последнем случае при вводе вещественного числа вместо десятичной точки необходимо использовать запятую, так как функции S t r T o F lo a t и S t r T o I n t не распознают точку. В соот ветствии с последними замечаниями доработаем наш калькулятор.
Для ограничения ввода необходимо использовать событие O n K ey P ress, которое происходит при каждом нажатии клавиши. В данном случае удобно задать символы, которые могут быть вве дены в компонентах e d O p e ra n d l и e d O p e ra n d 2 .
- Напишите обработчик события OnKeyPress для компонента edOperandl.
v°id __fastcall T F o r m l: : e d O p e r a n d l K e y P r e s s ( T O b je c t * S e n d e r, c h a r &Key)
{
switch(Key)
{
case '0 ' case '1 ' case '2 ' case '3 ' case '4 ' case '5 '
case '6 ' case .7 ,
case '8 ' case '9 ' case / case VK BACK
break; |
|
|
case |
1 Key |
= |
break; |
= 0; |
|
default: Key |
}
}
Обратите внимание, что обработчику события передается до полнительный параметр Key, который соответствует нажатой кла више. В обработчике события этот параметр можно изменить. Та ким образом, после написания обработчика в компоненте edOp- e r a n d l мы можем вводить цифры, точку или запятую и использовать клавишу B a c k sp a c e (VK_BACK). Причем точка бу дет заменена запятой.
Если вводится недопустимый символ, то код нажатой клави ши заменяется на 0, и символ не выводится в окно редактирова ния.
-Самостоятельно ограничьте ввод для компонента edO p er-
an d 2 .
-Запустите приложение и проверьте правильность его работы.
Вопросы для самоконтроля
1.Назначение и основные свойства компонента T E d it.
2.В чем сходство и отличие компонентов T B u tto n и T B it-
Btn ?
3.Как запретить изменение размеров формы?
4.Как запретить кнопку максимизации окна?
5.Как изменить одновременно свойства у нескольких компо нентов?
6.Назначение функций S tr T o F lo a t и F lo a tT o S tr .
7.Назначение метода S e tF o c u s .
8.Как создать обработчик для события O nC lick?
9.Когда возникает событие OnChange компонента T E d it.
Как создать обработчик для этого события?
10. Как изменить имя обработчика события?
11.Как для нескольких компонентов обеспечить одинаковую реакцию для события?
12.Как ограничить ввод для компонента T E d it?
Упражнения
1. Усовершенствуйте программу, для этого добавьте исполь зование в калькуляторе стандартных математических функций
(s in , co s, exp и т.д.);
2.Напишите калькулятор, выполняющий 5 целочисленных арифметических операций в десятичной системе счисления.
3.Напишите калькулятор, выполняющий 5 целочисленных арифметических операций в шестнадцатеричной системе счисле ния.
4.Напишите калькулятор, выполняющий 5 целочисленных арифметических операций в двоичной системе счисления.
-Начните новый проект.
-Сохраните проект. При сохранении проекта создайте новую
папку и назовите ее, например Т ек сто в ы й р е д а к т о р . Файлу модуля присвойте имя M ainForm , а файлу проекта - E d i to r .
- Измените свойство C a p tio n формы на заголовок Т е к с т о вый р е д а к т о р .
-Расположите на форме компонент ТМешо из страницы S ta n d a r d палитры компонентов и назовите его Memo.
- Очистите содержимое свойства L in e s этого компонента.
-Д л я свойства S c r o l l B a r s компонента Memo выберите из
списка значение s s V e r t i c a l .
- Задайте свойству A lig n значение a l C l i e n t .
-Запустите приложение и проверьте, меняет ли компонент Memo свои размеры при изменении размеров окна приложения.
3.2. Создание меню приложения
Для создания главного меню в приложениях C++Builder ис пользуется компонент TMainMenu.
- Расположите на форме компонент TMainMenu.
Редактор меню позволяет быстро разрабатывать меню любой структуры. Главное меню представлено компонентом T M ain Menu, контекстное меню - компонентом TPopupM enu. Каждый
пункт меню, в свою очередь, является компонентом T M enuItem .
Обратите внимание, что компонент TM ainM enu имеет очень мало свойств и одно событие O nC hange. Дело в том, что работа меню полностью определяется компонентами T M enuItem .
После установки компонента TM ainM enu на форму необхо димо создать пункты меню. Для этого следует дважды щелкнуть мышью по компоненту, либо нажать на нем правую кнопку и вы брать Menu D e s ig n e r
Для создания пунктов (опций) меню перейдите в окно ин спектора объектов и введите название пункта меню в строке С ар -