
БГУ Пособие - Программирование в C++ Builder
.pdf#endif
Для добавления в файл MyComp.cpp необходимо написать три функции для присваивания значений свойств соответствующим членам данных и наполнить конструктор компонента инструкциями для инициализации переменных. Ниже приводится листинг файла MyComp.cpp после внесения изменений:
//MyComp.cpp #include <vcl.h> #pragma hdrstop #include "MyComp.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(MyComp *)
{new MyComp(NULL); }
void __fastcall MyComp::SetOnOff(const bool Value) { FOnOff = Value;
Brush->Color= (FOnOff) ? FOnColor : FOffColor ;
}
void __fastcall MyComp::SetOnColor(const TColor OnColor) { FOnColor = OnColor;
Brush->Color = (FOnOff) ? FOnColor : FOffColor;
}
void __fastcall MyComp::SetOffColor(const TColor OffColor) { FOffColor = OffColor;
Brush->Color = (FOnOff) ? FOnColor : FOffColor;
}
//---------------------------------------------------------------------------
__fastcall MyComp::MyComp(TComponent* Owner)
:TShape(Owner)
{Width = 15; //ширина по умолчанию Height = 15; // высота по умолчанию
FOnColor = clLime; // зеленый, когда включен
FOffColor = clRed; // красный, когда выключен FOnOff = false; // выключен по умолчанию
Shape = stEllipse; //в форме эллипса по умолчанию Pen->Color = clBlack; // черный контур по умолчанию
Pen->Width = 2; // ширина контура по умолчанию
Brush->Color = FOffColor; // цвет заливки по умолчанию
}
namespace Mycomp
void __fastcall PACKAGE Register()
{
TComponentClass classes[1] = {__classid(MyComp)};
121
RegisterComponents("Samples", classes, 0);
}
}
//---------------------------------------------------------------------------
Установленные конструктором значения членов данных по умолчанию появятся в окне Инспектора объектов при создании объекта. Дейстительно, при помещении компоненты на форму конструктор вызывается автоматически. В результате появляется возможность менять значения свойств компонента не только во время выполнения программы, но и на стадии проектирования приложения.
4. Испытание компонента
С помощью команды File|Save All сохраните все сделанные добавления.
Выбрав вкладку MyCompForm.cpp в окне Редактора кода включите строку #include "MyComp. h" в заголовочный файл формы. Добавьте описание объекта:
MyComp* MyComp1;
Это можно сделать в разделе public в файле MyCompForm.h. Активизируйте форму Form1 и в окне Инспектора объектов дважды
щелкните мышью в графе значений события OnCreate. С помощью Редактора кода введите обработчик этого события в файл MyCompForm.cpp. Следующий код создаст компонент MyComp динамически (определяя ее родителя Parent и помещая в центре родительской формы) во время выполнения тестового приложения:
void__fastcall TForm1::FormCreate(TObject *Sender) {MyComp1 = new MyComp(this); MyComp1->Parent = this;
//Центрировать компонент по ширине формы
MyCompl->Left = (Width/2)-(MyCompl->Width/2);
//Центрировать компонент по высоте формы
MyCompl->Top = (Height/2)-(MyCompl->Height/2);
}
Чтобы кнопка управляла индикатором, дважды щелкните мышью в графе значений события OnClick объекта Button1 в окне Инспектора объектов. С помощью Редактора кода введите следующую инструкцию в тело обработчика события:
void __fastcall TForm1::Button1Click(TObject *Sender) (
MyComp1->OnOff = !MyComp1->OnOff;
}
Скомпилируйте и запустите тестовое приложение командой Run|Run.
122

Если компилятор не выдаст ошибок, то в центре формы тестового приложения появится красный индикатор в состоянии "выключен". Нажав кнопку, вы включите индикатор и он окрасится зеленым цветом.
Осталось создать битовый образ пиктограммы, которой новый компонент будет представлена в Палитре компонентов. Из меню редактора изображений, открывающегося по команде Tools|Image Editor, выберите
File|New|Resource File, a затем – Resource|New|Bitmap. В диалоге свойств битового образа установите размеры пиктограммы 24×24 и число цветов VGA (16 Colors). Переименуйте битовый образ компонента (MyComp) по команде Resourse|Rename и дважды щелкните мышью на выбранном имени в древовидном списке ресурсных файлов, чтобы нарисовать подходящую картинку индикатора (например, зеленый кружок). Командой File|Save As сохраните ресурсный файл MyComp.res в рабочем каталоге и закройте Редактор изображений.
5. Инсталляция компонента
Перед тем, как приступить к инсталляции нового компонента на Палитру компонентов, выполните еще раз команду File|Save All.
С помощью команды Component|Install Component откройте диалоговое окно инсталляции компонентов. Нажмите кнопку Add, которая открывает диалоговое окно добавления модуля. Найдите местоположение модуля MyComp.cpp, нажав на кнопку поиска Browse. Нажмите кнопку ОК и ждите окончания перестройки VCL и установки нового компонента на Палитру компонентов.
6. Проверка работы
Выполните команду File|Close All, а затем File|New Application. По-
местите новый компонент MyComp и кнопку TButton на форму. Снова определите обработчик события OnClick кнопки управления индикатором:
void __fastcall TForm1::Button1Click(TObject *Sender) { MyCompl->OnOff = !MyCompl->OnOff;
}
Выполните команду Run|Run и вы увидите, что компонент действительно работает (рис. 27).
Рис. 27. Работа компонента
123
Вопросы и упражнения
1.Опишите схему разработки собственных компонентов.
2.Как добавить свойства и события в проектируемый компонент ?
3.Как выполнить регистрацию компонента в среде C++Builder ?
4.Как выполняется предварительная отладка созданного компонен-
та ?
5.Как поместить разработанный компонент на Палитру компонен-
тов ?
6.Создайте усовершенствованный ползунок (базовый компонент TTrackBar с вкладки Win32 Палитры компонентов), в котором прорезь ползунка можно изобразить в виде тонкой линии. Добавить свойство, которое позволяет выводить ползунок как в привычной форме, так и с прорезью в виде тонкой линии.
Литература
1.Шамис, В.А. Borland C++Builder 6. Для профессионалов/В. А. Шамис.
СПб.:Питер, 2003
2.Архангельский, А.Я. Программирование в C++Builder 6/А. Я. Архангельский.
М.:ЗАО «Издательство БИНОМ», 2003
3.Глушаков, С.В. Программирование в среде Borland C++Builder 6/ С. В. Глуша-
ков, В. Н. Зорянский, С. Н. Хоменко. Харьков:Фолио, 2003
4.Сурков, К.А. Программирование в среде C++Builder/ К. А. Сурков, Д. А. Сур-
ков, А. Н. Вальвачев. Мн.:ООО»Попурри», 1998
124
|
СОДЕРЖАНИЕ |
|
ВВЕДЕНИЕ ............................................................................................... |
3 |
|
1. C++BUILDER И ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ |
|
|
|
ПРОГРАММИРОВАНИЕ .......................................................................... |
18 |
2. |
КОМПОНЕНТЫ БИБЛИОТЕКИ VCL ......................................................... |
27 |
3. |
СТРОКИ И ПОТОКИ ВВОДА/ВЫВОДА В С++BUILDER............................. |
40 |
4. |
ПОДДЕРЖКА ГРАФИКИ И ГРАФИЧЕСКИЕ КОМПОНЕНТЫ........................... |
65 |
5. |
РАБОТА С БАЗАМИ ДАННЫХ.................................................................. |
74 |
6. |
СЕТЕВЫЕ ПРОГРАММЫИ СОКЕТЫ |
96 |
7. |
СОЗДАНИЕ СОБСТВЕННЫХ КОМПОНЕНТОВ ......................................... |
112 |
8. |
ПРИМЕР РАЗРАБОТКИ ПРОСТОГО КОМПОНЕНТА.................................. |
118 |
125
Учебное издание
Романчик Валерий Станиславович Люлькин Аркадий Ефимович
ПРОГРАММИРОВАНИЕ В С++ BUILDER
Учебное пособие по курсу «МЕТОДЫ ПРОГРАММИРОВАНИЯ»
для студентов специальностей
G31 03 01 «Математика», G31 03 03 «Механика»
Редактор Технический редактор Корректор
Компьютерная верстка А.Е. Люлькин
Подписано в печать __.__.2006. Формат 60×84/16. Бумага офсетная. Печать офсетная. Усл.печ.л. ____. Уч.-изд.л. . Тираж 100 экз. Зак.
Белорусский государственный университет.
Лицензия на осуществление издательской деятельности №02330/0056804 от 02.03.2004. 220050, Минск, проспект Независимости,4.
Отпечатано с оригинала-макета заказчика. Издательский центр «Белорусского государственного университета».
Лицензия на осуществление полиграфической деятельности №02330/0056850 от 30.04.2006. 220030, Минск, ул. Красноармейская, 6.
126