Создание модуля компонента
Перед началом работы по созданию нового компонента нужно создать отдельный каталог для модуля и других файлов компонента. После этого можно приступить к созданию компонента.
Чтобы начать работу над новым компонентом, надо активизировать процесс создания нового приложения (команда File › New › Application), в меню Component выбрать команду New Component и в поля диалогового окна New Component (рис. 6.1) ввести информацию о создаваемом компоненте.

Рис. 6.1. Начало работы над новым компонентом
В поле Ancestor type надо ввести базовый тип создаваемого компонента. Для разрабатываемого компонента базовым компонентом является стандартный компонент Edit (поле ввода-редактирования). Поэтому базовым типом разрабатываемого компонента является тип TEdit.
В поле Class Name необходимо ввести имя класса разрабатываемого компонента (например, TNkEdit). Вспомните, что в C++ Builder принято соглашение, согласно которому имена типов должны начинаться буквой т. В поле Palette Page нужно ввести имя вкладки палитры компонентов, на которую будет помещен значок компонента. Название вкладки палитры компонентов можно выбрать из раскрывающегося списка. Если в поле Palette Page ввести имя еще не существующей вкладки палитры компонентов, то непосредственно перед добавлением компонента вкладка с указанным именем будет создана.
В поле Unit file name находится автоматически сформированное имя файла модуля создаваемого компонента. C++ Builder присваивает модулю компонента имя, которое совпадает с именем типа компонента, но без буквы т. Щелкнув на кнопке с тремя точками, можно выбрать каталог, в котором должен быть сохранен модуль компонента.
В результате щелчка на кнопке ОК будет сформирован модуль компонента, состоящий из двух файлов: файла заголовка (листинг 6.1) и файла реализации (листинг 6.2).
Листинг 6.1. Файл NkEdit.h.
#ifndef NkEditH
 <strong>#</strong> define NkEditH
 <strong>#</strong> include <SysUtils.hpp>
#include <Classes.hpp>
 <strong>#</strong> include <Controls.hpp>
<strong>#</strong> include <StdCTRLs.hpp>
class PACKAGE TNkEdit: public TEdit {
private: protected: public:
__fastcall TNkEdit(TComponent* Owner);
__published:
};
#endif
Листинг 6.2. Файл NkEdit.cpp.
<strong>#</strong> include <vcl.h>
 <strong>#</strong> pragma hdrstop
 <strong>#</strong> include "NkEdit.h"
#pragma package(smart_init)
static inline void ValidCtrCheck(TNkEdit *) {
new TNkEdit(NOLL); }
__fastcall TNkEdit::TNkEdit(TComponent* Owner)
: TEdit(Owner) { }
namespace NkEdit {
void __fastcall PACKAGE Register()
{
TComponentClass classes[l] = {__classid(TNkEdit)};
RegisterComponents("Samples", classes, 0); } }
