2. Структура класу компонента
Заготовка модуля компонента, створена в результаті вказаних раніше дій, має наступний вигляд.
Файл EditLetNum.h:
#ifndef EditLetNumH
#define EditLetNumH
//
#include <SysUtils.hpp>
#include <Controls.hpp>
#include <Classes.hpp>
#include <Forms.hpp>
#include <StdCtrls. hpp>
//
class PACKAGE TEditLetNum : public Edit
{
private:
protected:
public:
__fastcall TEditLetNum(TComponent* Owner);
__published:
};
#endif
Файл EditLetNum.cpp:
#include <vcl.h> #pragma hdrstop
#include "EditLetNum.h"
#pragma package(smart init)
// ValidCtrCheck is used to assure // that the components created do not have
// any pure virtual functions.
// (Функція ValidCtrCheck використовується для перевірки того
// що компонент не містить чистих віртуальних функцій)
static inline void ValidCtrCheck{TEditLetNum *)
{
new TEditLetNum(NULL);
}
_fastcall TEditLetNum::TEditLetNum(TComponent* Owner) : TEdit(Owner)
{
}
namespace Editletnum
{
void _fastcall PACKAGE Register()
{
TComponentCIass classes[1] = { classid(TEditLetNum)};
RegisterComponents("Мої компоненти", classes, 0);
}
}
Власне кажучи, в цій заготівлі доки тільки каркас класу майбутнього модуля. Файл EditLetNum.cpp містить три процедури: ValidCtrCheck, конструктор TEditLetNum і Register. Процедура ValidCtrCheck носить допоміжний характер і вводиться, щоб перевіряти, чи не містить компонент чистих виртуальних функцій. Тіло конструктора TEditLetNum доки порожнє. А процедуру Register, реєструючу компонент на заданій сторінці бібліотеки, давайте розглянемо детальніше.
Код реєстрації компонента починається з оператора namespace. Ключове слово namespace встановлює локальність імен цієї процедури реєстрації. Після цього ключового слова слідує ім'я файлу, що містить компоненти. Ім'я пишеться символами в нижньому регістрі, окрім першої заголовної букви.
У процедурі реєстрації Register перший оператор створює масив реєструємих компонентів classes тнпа TComponentClass і заносить в нього реєструємий компонент. Якби ви створили два компоненти (нехай ім'я другого з них TEdit2), реєстрованих на одній сторінці бібліотеки, ви моглн би занести їх в масив оператором:
TComponentClass classes[2] = {__classid(TEditLetNum)
__classid(TEdit2)};
Наступний оператор процедури реєстрації реєструє функцією RegisterComponents компоненти, занесені в classes (другий параметр функції) на сторінці Мої компоненти (перший параметр). Останній параметр є по-следним індексом масиву реєстрованих компонентів.
Розглянемо коротко опис класу в заголовному файлі EditLetNum.h. Ви бачите у ньому розділи private, protected, public і published. Вони визначають чотири варіанти доступу до змінних, процедур і функцій:
private (закриті) - процедури і функції, визначені таким чином, доступні тільки в межах цього модуля.
рrotected (захищені) - процедури і функції, визначені таким чином, доступні в класах нащадків.
public (відкриті) - ці процедури і функції доступні скрізь.
рublished (опубліковані) - процедури і функції доступні скрізь і мають зв'язок з середовищем розробки C++Builder, що забезпечує виведення на екран в Інспекторові Об'єктів сторінок інформації про властивості і події.