- •341000, Мариуполь, пер. Республики,7 Утверждаю
- •С.В. Щербаков
- •Общие требования к выполнению и оформлению лабораторных работ
- •Лабораторная работа №1
- •Лабораторная работа № 2
- •2.1 Общие сведения
- •Лабораторная работа № 3
- •3.1 Общие сведения
- •Лабораторная работа № 4 тема: специализированные списки drivelistbox, filelistbox, valuelisteditor. Расширенные возможности
- •4.1 Общие сведения
- •Лабораторная работа № 5 тема: разработка элементов субд
- •Общие сведения
- •Основные команды языка sql
- •Задание
- •Требования к оформлению отчета
- •Контрольные вопросы
- •Лабораторная работа № 6
- •6.1 Общие сведения
- •6.3 Требования к оформлению отчета
- •Лабораторная работа № 7
- •7 Общие сведения
- •Создание дистрибутивов с помощью InstallShield Express
- •Лабораторная работа № 8
- •8.1 Общие сведения
- •Понятие компонента
- •Программирование компонента
- •Добавление родительских и новых свойств
- •Тестирование компонента
- •Инсталляция компонента
- •Задание
- •Перечень ссылок
Лабораторная работа № 8
ТЕМА: РАЗРАБОТКА ВИЗУАЛЬНЫХ КОМПОНЕНТОВ (VCL) В СРЕДЕ BORLAND C++ BUILDER
ЦЕЛЬ: ОСВОИТЬ ЭТАПЫ СОЗДАНИЯ, ТЕСТИРОВАНИЯ И РЕГИСТРАЦИИ (УСТАНОВКИ) КОМПОНЕНТОВ В МЕНЮ IDE C++ BUILDER .
8.1 Общие сведения
Компоненты – одна из наиболее важных частей С++Builder. Они позволяют создавать приложения путем перетаскивания их на форму и на ходу менять свойства. Компоненты лежат в основе С++Builder и придают гибкость самой среде разработке. Примерами стандартных компонент являются компоненты TEdit, TLabel, TButton и др.
Понятие компонента
Компоненты – это особые объекты, которые являются строительными кирпичиками визуальной среды разработки и приспособлены к визуальной установке свойств. Другими словами компонент – это объединение данных и методов. У компонентов могут быть (хотя это не является обязательным) свойства и методы. Свойства – это хранилища данных в компоненте. Методы – это видимые возможности компонента.
Класс нового компонента никогда не разрабатывается с нуля, а наследуется либо от одного из существующих классов VCL (Visual Component Library), тогда ваш компонент расширяет возможности существующего в библиотеке компонента. Либо, если необходимо создать совершенно новый компонент, то в качестве предка выбирается один из следующих абстрактных классов С++Builder:
TComponent, если создается невизуальный компонент;
TCustomControl, если создается визуальный компонент, то есть способный содержать другие компоненты или получать фокус ввода;
TGraphControl, если создается другой визуальный компонент.
Компоненты существуют в двух режимах:
Режим разработки
В режиме периода разработки компонент отображаются в форме редактора форм CBuilder. Компоненты (имеются в виду объекты компонентов) в периоде разработки не могут вызывать свои методы, не могут взаимодействовать конкретно с конечным пользователем, и им просто не надо проявлять все свои возможности. Обычно (но не всегда) компоненты периода разработки отрисовывают себя в соответствии с заданными для них свойствами. От них при этом не требуется выглядеть так же, как и во время исполнения. Например, формы отличаются своим видом во время разработки, так же как и многие другие компоненты. Но несмотря на то что объекты компонента могут быть видимыми во время во время проектирования. Они могут быть невидимыми во время исполнения (например компонент TTimer).
Режим исполнения
Во время исполнения компонент функционирует в работающем приложении. В это время он должен правильно отрисовывать себя, обрабатывать вызовы его методов и корректно взаимодействовать с другими компонентами.
Программирование компонента
Для получения нового компонента необходимо выполнить следующие шаги:
Создать новый модуль и определить в нем класс компонента и родителя разрабатываемого класса.
Определить в компоненте свойства, методы и события, наследуемые от класса-родителя или (и) новые;
Определить функцию регистрации модуля.
Для того чтобы на практике научиться создавать компоненты, создадим компонент для отображения текста. Допустим мы хотим создать компонент как Label (TLabel) и чтобы текст еще и мигал с заданной частотой . Назовем этот компонент TFlashingLabel.
Для компонента необходимо выбрать базовый класс. Выбор базового класса влияет на свойства доступные вам при написании компонента. Все компоненты как было сказано выше должны быть потомками по крайней мере TComponent – базового класса все компонентов VCL, который не предоставляет почти никаких возможностей. От выбора класса зависит какую работу будете делать вы, а какая уже будет реализована в классе потомке.
Для создания компонента TFlashingLabel нас интересует компонент компонент, который бы обладал возможностями TLabel. То есть базовым классом будет TLabel.
Для создания нового компонента выберете в главном меню File → New и в появившемся окне выберете компонент см. рис. 1.
Рисунок 1 - Создание компонента.
После этого появиться окно следующего вида:
Рисунок 2 - Определение нового компонента
В поле Ancestor type (Класс предок) выберете TLabel.
В поле Class Name введите имя класса вашего компонента TFlashingLabel.
Поле Palette Page выберете страницу на палитре компонентов, где будет отображаться ваш компонент.
Поле Unit file name укажите путь …..
Затем нажмите кнопку “OK”. В результате будет создан программный модуль, содержащий скелет компонента.
Файл TFlashingLabel.h
/---------------------------------------------------------------------------
#ifndef AngleTextH
#define AngleTextH
//---------------------------------------------------------------------------
#include <SysUtils.hpp>
#include <Controls.hpp>
#include <Classes.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------
class PACKAGE TFlashingLabel : public TLabel
{
private:
protected:
public:
__fastcall TFlashingLabel (TComponent* Owner);
__published:
};
//---------------------------------------------------------------------------
#endif
Файл TFlashingLabel.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "TFlashingLabel.h"
#pragma package(smart_init)
//---------------------------------------------------------------------------
// ValidCtrCheck is used to assure that the components created do not have
// any pure virtual functions.
//
static inline void ValidCtrCheck(TAngleText *)
{
new TFlashingLabel(NULL);
}
//---------------------------------------------------------------------------
__fastcall TFlashingLabel::TFlashingLabel (TComponent* Owner)
: TCustomControl(Owner)
{
}
//---------------------------------------------------------------------------
namespace FlashingLabel
{
void __fastcall PACKAGE Register()
{
TComponentClass classes[1] = {__classid(TFlashingLabel)};
RegisterComponents("Samples", classes, 0);
}
}
//---------------------------------------------------------------------------
Проанализируем содержание файла TFlashingLabel.cpp.
namespace FlashingLabel
{
void __fastcall PACKAGE Register()
{
TComponentClass classes[1] = {__classid(TFlashingLabel)};
RegisterComponents("Samples", classes, 0);
}
}
namespace (пространство имен) – это элемент С++, позволяющий различать блоки кода по именам. Пространство имен используется для отделения данной функции Register
