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

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

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

-Начните новый проект.

-Сохраните новый проект. При сохранении проекта создайте новую папку и назовите ее, например Калькулятор. Файлу мо­

дуля присвойте имя 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

Для создания пунктов (опций) меню перейдите в окно ин­ спектора объектов и введите название пункта меню в строке С ар -