Разработка визуальных компонентов для среды С++ 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 WindowsLibrary).
Программист создает законченноеприложение посредством интерактивного взаимодействия с интегрированнойвизуальной средой 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 PACKAGETRaedit: public TCustomEdit
Добавим необходимые свойства всозданный класс.
__propertybool TimerEnabled = {read=FTimerEnabled, write=SetTimerEnabled, default =false};
Свойство TimerEnabled отвечает завключение и отключение таймера, а следовательно и за смену текста в текстовомполе.
__propertybool Random = {read=FRandom, write=FRandom, default = true};
Свойство Random определяетпорядок смены текста: случайно или последовательно.
__propertyAnsiString Text1 = {read = FText1,write = SetFText1};
__propertyAnsiString Text2 = {read = FText2, write = SetFText2};
__propertyAnsiString Text3 = {read = FText3, write = SetFText3};
Свойства Text1-Text3 будутопределять дополнительные текстовые поля компоненты.
__propertyint TimerInterval = {read = FTimerInterval, write = SetTimerInterval, default =1000};
Свойство TimerIntervalустанавливает задержку при смене текста в милесекундах.
__propertyint TextIndex = {read = FTextIndex, write = SetTextIndex, default = 1};
Свойство TextIndex возвращаетномер активной строки или устанавливает строку как активную.
Для регистрации компоненты напалитре компонентов среды разработки C++Builder добавим функцию Register в файлRaedit.cpp:
namespace Raedit
{void __fastcallPACKAGE Register()
{ TComponentClassclasses[1] = {__classid(TRaedit)};
RegisterComponents(«USATU»,classes, 0); }
 
Инсталляциякомпоненты
При инсталляции новой компонентыили при выполнении команды Component | Rebuild Library, Библиотека ВизуальныхКомпонент перестраивается, и C++Builder создает временный файл CMPLIB32.CPPисходных текстов VCL. Чтобы сохранить этот файл, с помощью команды Options |Environment | Library необходмо открыть диалог опций и установить флаг SaveLibrary Source Code.
Далее, необходимо произвестикомпиляцию проекта, что выполняется нажатием кнопки Compile или сочетаниемклавиш Alt-F9. После компиляции, выполняется инсталляция компоненты на палитру.
/>
Рис3. Открытый файлпроекта компоненты в C++ Builder
Компонента Raeditпосле установки появится на вкладке USATU:
/>
Рис 4.Палитра компонентов C++ Builder6
 
Тестированиекомпоненты
Для тестирования компонентыразработано тестовое приложение, которое позволяет изменить все оригинальныесвойства компоненты. На форме приложения расположено два экземпляра компоненты,для каждой из них помещены управляющие элементы позволяющие изменять:
— активность таймера;
— порядок изменения текста;
— интервал таймера;
— текст по индексу строки;
— текст всех полей.
В тестовом приложении постоянноотображается текущий активный текст компоненты, а так же выводится список строкв той последовательности, в которой компонента изменяет текст.
/>
Рис. 6Форма программы тестирования
Заключение
В данной курсовой работе, былирассмотрены возможности визуальных компонентов среды C++ Builder, а так жеразработан новый визуальный компонент Raedit,представляющий из себя текстовое поле с возможностью случайной смены текстасодержащегося в нескольких текстовых полях компоненты. Для созданной компонентыбыли определены свойства, необходимые для нормального её функционирования.Компонента была отлажена, и установлена на палитру. Для проверкиработоспособности компоненты было создано тестовое приложение.
Списокиспользуемой литературы
1)  Теллес,М. BORLAND C++ BUILDER: библиотека программиста .— СПб: Питер, 1998 .— 512с.
2)  Архангельский,А. Я. Язык C++ в C++Builder: справочное и методическое пособие / А. Я.Архангельский .— М.: Бином, 2008 .— 942 с.
3)  Романов,В.Ю. Программирование на языке C++: Практ. подход .— М.: Компьютер, 1993 .—157с.
4)  Конспектлекций УГАТУ по предмету объектно-ориентированное программирование.