Разработка визуальных компонентов для среды С++ Builder

Уфимский Государственный Авиационный Технический Университет

Министерство образования Российской Федерации

















Курсовая работа

по предмету: Объектно-Ориентированное Программирование

на тему: Разработка визуальных компонентов для среды С++ Builder







Выполнил:

студент ФИРТ



Проверил:















Уфа-2008


Оглавление



Задание на курсовую работу. 

Введение. 

Свойства компонентов

События

Методы

VCL компоненты в среде C++ Builder. 

Разработка компоненты TRaedit. 

Заключение

Список используемой литературы


Задание на курсовую работу



Разработать поле Edit, которое содержит 3 дополнительных текстовых поля, с функцией случайной смены текста с течением времени. Создать установочный пакет и тестовое приложение с использованием разработанного компонента. 


Введение



C++ Builder представляет собой SDI-приложение, главное окно которого содержит настраиваемую инструментальную панель и палитру компонентов. Помимо этого, по умолчанию при запуске C++ Builder появляются окно инспектора объектов и форма нового приложения. Под окном формы приложения находится окно редактора кода. 

Формы являются основой приложений C++ Builder. Создание пользовательского интерфейса приложения заключается в добавлении в окно формы элементов объектов C++ Builder, называемых компонентами. Компоненты C++ Builder располагаются на палитре компонентов, выполненной в виде многостраничного блокнота. Важная особенность C++ Builder состоит в том, что он позволяет создавать собственные компоненты и настраивать палитру компонентов, а также создавать различные версии палитры компонентов для разных проектов. 

Компоненты разделяются на видимые (визуальные) и невидимые (невизуальные). Визуальные компоненты появляются во время выполнения точно так же, как и во время проектирования. Примерами являются кнопки и редактируемые поля. Невизуальные компоненты появляются во время проектирования как пиктограммы на форме. Они никогда не видны во время выполнения, но обладают определенной функциональностью (например, обеспечивают доступ к данным, вызывают стандартные диалоги Windows и др.) 

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

Каждый компонент C++ Builder имеет три разновидности характеристик: свойства, события и методы. 

Если выбрать компонент из палитры и добавить его к форме, инспектор объектов автоматически покажет свойства и события, которые могут быть использованы с этим компонентом. В верхней части инспектора объектов имеется выпадающий список, позволяющий выбирать нужный объект из имеющихся на форме. 


Свойства компонентов



Свойства являются атрибутами компонента, определяющими его внешний вид и поведение. Многие свойства компонента в колонке свойств имеют значение, устанавливаемое по умолчанию (например, высота кнопок). Свойства компонента отображаются на странице свойств (Properties). Инспектор объектов отображает опубликованные (published) свойства компонентов. Помимо published-свойств, компоненты могут и чаще всего имеют общие (public), опубликованные свойства, которые доступны только во время выполнения приложения. Инспектор объектов используется для установки свойств во время проектирования. Список свойств располагается на странице свойств инспектора объектов. Можно определить свойства во время проектирования или написать код для видоизменения свойств компонента во время выполнения приложения. 

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



События



Страница событий (Events) инспектора объектов показывает список событий, распознаваемых компонентом (программирование для операционных систем с графическим пользовательским интерфейсом предполагает описание реакции приложения на те или иные события, а сама операционная система занимается постоянным опросом компьютера с целью выявления наступления какого-либо события). Каждый компонент имеет свой собственный набор обработчиков событий. В C++ Builder следует писать функции, называемые обработчиками событий, и связывать события с этими функциями. Создавая обработчик того или иного события, вы поручаете программе выполнить написанную функцию, если это событие произойдет. 

Для того чтобы добавить обработчик событий, нужно выбрать на форме с помощью мыши компонент, которому необходим обработчик событий, затем открыть страницу событий инспектора объектов и дважды щелкнуть левой клавишей мыши на колонке значений рядом с событием, чтобы заставить C++ Builder сгенерировать прототип обработчика событий и показать его в редакторе кода. При этом автоматически генерируется текст пустой функции, и редактор открывается в том месте, где следует вводить код. Курсор позиционируется внутри операторных скобок { ... }. Далее нужно ввести код, который должен выполняться при наступлении события. Обработчик событий может иметь параметры, которые указываются после имени функции в круглых скобках. 



Методы



Метод является функцией, которая связана с компонентом, и которая объявляется как часть объекта. Создавая обработчики событий, можно вызывать методы, используя следующую нотацию: ->, например: 

Edit1->Show();

При создании формы связанные с ней модуль и заголовочный файл с расширением *.h генерируются обязательно, тогда как при создании нового модуля он не обязан быть связан с формой (например, если в нем содержатся процедуры расчетов). Имена формы и модуля можно изменить, причем желательно сделать это сразу после создания, пока на них не появилось много ссылок в других формах и модулях. 


VCL компоненты в среде C++ Builder



Библиотека Визуальных Компонент позволяет программистам визуально создавать программные приложения, не прибегая более к кодированию классов "вручную", или кодированию в рамках стандартных библиотек MFC (Microsoft Foundation Class), или OWL (Object Windows Library). 

Программист создает законченное приложение посредством интерактивного взаимодействия с интегрированной визуальной средой C++Builder, используя компоненты VCL для создания интерфейса программы с пользователем и с другими управляющими элементами: обслуживания баз данных, контролируемого ввода параметров и т.д. Характерная для C++Builder методика визуального стиля разработки программного обеспечения не применяется множеством других систем программирования.

С точки зрения прикладного программиста компонентный объект представляет собой законченную конструкцию, содержащую свойства, методы и события. В отличие от разработчика компонент, пользователю компонент безразлично, от какого класса произведена данная компонента.

Любая компонента может находиться во владении (ownership) других компонент, но не все компоненты могут являться владельцами. Свойство компоненты Owner (Владелец) содержит ссылку на компоненту, которая ею владеет. Рис. 1. показывает иерархию владения некоторой формы.

Владелец ответствен за освобождение тех компонент, которыми владеет, когда сам разрушается. Так в процессе конструирования формы, она автоматически становится владельцем всех компонент, размещенных на ней, даже если часть их размещена на другой компоненте, такой как TPanel. Владение применимо не только к видимым, но и к невидимым (Ttimer, DataSource) компонентам. 






Рис. 1. Пример иерархии владения.



Определение класса в языке C++ содержит инкапсуляцию членов данных и методов, оперирующих с данными и определяющих поведение объекта. Эта концепция всех систем ООП принята в VCL.

VCL позволяет манипулировать видом и функциональным поведением компонент не только с помощью методов (как это делается с обычными классами), но и посредством свойств и событий, присущих только классам компонент.

Свойства представляют собой расширение понятия членов данных. Разрешены любые типы свойств, за исключением файлового типа. В отличие от члена данных, свойство не хранит данные, однако его методы чтения и записи позволяют получить доступ к защищенному члену данных объекта.

C++Builder использует ключевое слово _property для идентификации свойств. Синтаксис описания свойства имеет вид:

property <тип свойства> <имя свойства> = {<список атрибутов>} ;

где список атрибутов содержит перечисление следующих атрибутов свойства:

write = < член данных или метод записи >;

read = < член данных или метод чтения >;

default = < булева константа, управляющая сохранением значения>;

stored = < булева константа или функция, сохраняющая значение >.

Рис. 2. показывает ключевые классы в иерархической структуре, от которых произведены все компоненты VCL. Каждый объект представляет некоторый набор методов, событий и свойств и имеет специальное назначение. Подобно тому как TObject является базовым классом для всех порождаемых классов, TComponent является базовым классом для всех порождаемых компонент. 

Невидимые компоненты произведены от класса TComponent. Графические компоненты, не ассоциированные с оконными элементами управления, произведены от класса TGraphicControl. 

Являясь оконными элементами, компоненты стандартного управления произведены непосредственно от класса TWinControl, а оригинальные компоненты - косвенно от класса TCustomControl, восходящего к TWinControl. Именно на уровне TWinControl и вводится "оконный дескриптор" (window handle).





Рис.2. Иерархия ключевых базовых классов VCL.


Разработка компоненты TRaedit



Процесс разработки компоненты TRaedit проходит через выполнение следующих этапов:

1. Создание модуля для новой компоненты.

2. Наследование производного класса от существующего базового компонентного класса.

3. Добавление нужных свойств, событий и методов.

4. Регистрация компоненты в C++Builder.

5. Отладка.

6. Инсталляция компоненты на Палитру.

7. Сохранение файлов компоненты.

Программный модуль состоит из двух файлов Raedit.срр и Raedit.h, которые компилируются в объектный файл с расширением Raedit.obj. C++Builder использует модули в различных целях - каждая форма и большинство компонент (или их логических групп) имеют свой собственный модуль.

Так как, нет необходимости создавать новый класс, можно воспользоваться уже существующим и модифицировать его. Для этой цели был выбран абстрактный компонентный класс TCustomEdit.

class PACKAGE TRaedit : public TCustomEdit

Добавим необходимые свойства в созданный класс. 

__property bool TimerEnabled = {read=FTimerEnabled, write=SetTimerEnabled, default = false};

Свойство TimerEnabled отвечает за включение и отключение таймера, а следовательно и за смену текста в текстовом поле. 

__property bool Random = {read=FRandom, write=FRandom, default = true};

Свойство Random определяет порядок смены текста: случайно или последовательно.

__property AnsiString Text1 = {read = FText1,write = SetFText1};

__property AnsiString Text2 = {read = FText2, write = SetFText2};

__property AnsiString Text3 = {read = FText3, write = SetFText3};

Свойства Text1-Text3 будут определять дополнительные текстовые поля компоненты. 

__property int TimerInterval = {read = FTimerInterval, write = SetTimerInterval, default = 1000};

Свойство TimerInterval устанавливает задержку при смене текста в милесекундах. 

__property int TextIndex = {read = FTextIndex, write = SetTextIndex, default = 1};

Свойство TextIndex возвращает номер активной строки или устанавливает строку как активную.

Для регистрации компоненты на палитре компонентов среды разработки C++Builder добавим функцию Register в файл Raedit.cpp:

namespace Raedit

{void __fastcall PACKAGE Register()

{ TComponentClass classes[1] = {__classid(TRaedit)};

RegisterComponents("USATU", classes, 0); }



Инсталляция компоненты



При инсталляции новой компоненты или при выполнении команды Component | Rebuild Library, Библиотека Визуальных Компонент перестраивается, и C++Builder создает временный файл CMPLIB32.CPP исходных текстов VCL. Чтобы сохранить этот файл, с помощью команды Options | Environment | Library необходмо открыть диалог опций и установить флаг Save Library Source Code.

Далее, необходимо произвести компиляцию проекта, что выполняется нажатием кнопки Compile или сочетанием клавиш Alt-F9. После компиляции, выполняется инсталляция компоненты на палитру. 





Рис3. Открытый файл проекта компоненты в C++ Builder



Компонента Raedit после установки появится на вкладке USATU: 





Рис 4. Палитра компонентов C++ Builder 6



Тестирование компоненты



Для тестирования компоненты разработано тестовое приложение, которое позволяет изменить все оригинальные свойства компоненты. На форме приложения расположено два экземпляра компоненты, для каждой из них помещены управляющие элементы позволяющие изменять:

- активность таймера;

- порядок изменения текста;

- интервал таймера;

- текст по индексу строки;

- текст всех полей.

В тестовом приложении постоянно отображается текущий активный текст компоненты, а так же выводится список строк в той последовательности, в которой компонента изменяет текст. 





Рис. 6 Форма программы тестирования


Заключение



В данной курсовой работе, были рассмотрены возможности визуальных компонентов среды C++ Builder, а так же разработан новый визуальный компонент Raedit, представляющий из себя текстовое поле с возможностью случайной смены текста содержащегося в нескольких текстовых полях компоненты. Для созданной компоненты были определены свойства, необходимые для нормального её функционирования. Компонента была отлажена, и установлена на палитру. Для проверки работоспособности компоненты было создано тестовое приложение. 


Список используемой литературы



	Теллес, М. BORLAND C++ BUILDER: библиотека программиста .— СПб : Питер, 1998 .— 512с. 

	Архангельский, А. Я. Язык C++ в C++Builder : справочное и методическое пособие / А. Я. Архангельский .— М. : Бином, 2008 .— 942 с.

	Романов, В.Ю. Программирование на языке C++: Практ. подход .— М. : Компьютер, 1993 .— 157с.

	Конспект лекций УГАТУ по предмету объектно-ориентированное программирование.

2