Создание модуля компонента
Перед началом работы по созданию нового компонента нужно создать отдельный каталог для модуля и других файлов компонента. После этого можно приступить к созданию компонента.
Чтобы начать работу над новым компонентом, надо активизировать процесс создания нового приложения (команда 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); } }