Новости

Створення власних компонент

  1. Створення власних компонент
  2. Додавання нових об'єктів в VCL
  3. Заготівля для нового компонента
  4. Угоди за найменуваннями
  5. вибір предка
  6. Приклад створення компонента

Створення власних компонент

зміст

огляд

Оскільки Delphi є відкритим середовищем і дозволяє не тільки використовувати об'єкти з Бібліотеки Візуальних Компонент (VCL) в своїй програмі, але і створювати нові об'єкти. Причому, нічого іншого, крім Delphi, для цього не потрібно. Створення нового об'єкта в Delphi не є дуже складним завданням, хоча для цього і потрібне знання Windows API, об'єктно-орієнтованого програмування і ієрархії класів в VCL.

Може виникнути питання; якщо в Delphi вже є своя бібліотека, то навіщо ще створювати якісь об'єкти? Відповідь проста: не можна створити бібліотеку на всі випадки життя і на всі смаки. Нові компоненти, по-перше, дозволяють розширити сферу застосування Delphi: наприклад, за допомогою бібліотек об'єктів третіх фірм розробляти програми для роботи в Internet. По-друге, дозволяють доповнити або налаштувати для себе наявні в VCL об'єкти (наприклад, перевизначити значення властивостей, що встановлюються за замовчуванням).

Додавання нових об'єктів в VCL

Припустимо, що у вас з'явився вже готовий компонент. Як його додати в VCL? Для цього виберіть пункт меню Options | Install Components: З'явиться діалог, як на рис.1

Рис.1: Діалог установки нового компонента

Натисніть "Add" і вкажіть модуль, що містить процедуру реєстрації, натисніть "OK" і після успішної перекомпіляції новий об'єкт з'явиться в палітрі.

Заготівля для нового компонента

У середовищі Delphi є спеціальний експерт, що створює заготовку для нового компонента. Викликати його можна в пункті меню File | New Component: (див рис.2)

Рис.2: Експерт для створення нового компонента

У діалозі потрібно вказати ім'я нового класу (наприклад, TMyButton), предка класу (TButton) і сторінку палітри, куди помістити новий компонент (Samples). Якщо натиснути "OK", то експерт створить модуль - заготовку для нового компонента:

unit Unit1; interface uses SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TMyButton = class (TButton) private {Private declarations} protected {Protected declarations} public {Public declarations} published {Published declarations} end; procedure Register; implementation procedure Register; begin RegisterComponents ( 'Samples', [TMyButton]); end; end.

Модуль містить декларацію нового класу і процедуру його реєстрації в палітрі Компонент. У процедурі RegisterComponents перший параметр - ім'я сторінки (можна вказати своє ім'я - з'явиться нова сторінка); другий параметр - безліч об'єктів для реєстрації.

Тепер модуль потрібно зберегти під новим ім'ям (наприклад, NEW_BTN.PAS) і приступити до дописування нових властивостей і методів. Після того, як ця робота закінчена і новий компонент налагоджений, можна додати його в Палітру (див. Попередню главу). Але перед цим бажано створити файл ресурсів, в якому буде лежати піктограма для подання даного об'єкта в палітрі Компонент. Файл ресурсів можна створити за допомогою програми Resource Workshop, називатися він повинен точно так же, як модуль реєстрації компонента і мати розширення .DCR (тобто, якщо об'єкт реєструється в модулі NEW_BTN.PAS, то тоді ім'я файлу ресурсів буде NEW_BTN.DCR ). У файлі ресурсів повинен знаходитися ресурс типу BITMAP - картинка розміром 28x28 точки (можна менше), назва картинки має збігатися з ім'ям класу (в нашому випадку TMYBUTTON).

Угоди за найменуваннями

Якщо ви розглядали вихідні тексти VCL, то могли бачити, що вони слідують декільком простим угодами при визначенні нових класів. Delphi цього не вимагає, імена методів, властивостей і т.п. можуть бути будь-якими, компілятору це байдуже. Але якщо слідувати цим угодам, то розробка нових компонентів і читання вихідних текстів стане значно простіше.

Отже:

  • Всі декларації типів починаються на букву T. Ще раз, Delphi не вимагає цього, але це робить очевидним, що "TEdit", наприклад, є визначення типу, а не змінна або поле класу.
  • Імена властивостями потрібно давати легко читаються і інформативні. Потрібно пам'ятати, що користувач буде їх бачити в інспектор об'єктів. І ім'я на кшталт "TextOrientation" багато зручніше, ніж "TxtOr". Те ж саме відноситься до методів. Методи, доступні користувачеві, повинні мати зручні назви.
  • При створенні властивостей типу Event, ім'я такого властивості має починатися з "On" (наприклад, OnClick, OnCreate і т.д.).
  • Ім'я методу для читання властивості повинен починатися зі слова "Get". Наприклад, метод GetStyle повинен виконувати читання для властивості Style.
  • Ім'я методу для запису властивості повинен починатися зі слова "Set". Наприклад, метод SetStyle повинен виконувати запис в властивість Style.
  • Внутрішнє поле для зберігання даних властивості має носити ім'я, що починається з букви "F". Наприклад, властивість Handle могло б зберігатися в полі FHandle.

Звичайно ж, є винятки з правил. Іноді буває зручніше їх порушити, наприклад, клас TTable має властивості типу Event, які називаються BeforePost, AfterPost і т.п.

вибір предка

Перш, ніж приступити до написання коду, потрібно визначитися, хоча б приблизно, що за компонент ви збираєтеся робити. Далі, виходячи з його передбачуваних властивостей, визначте клас-предок. У VCL є кілька базових класів, рекомендованих для наслідування:

  • TObject - Можна використовувати в якості предка, якщо з цим компонентом не потрібно працювати під час дизайну. Це може бути, наприклад, клас, що містить значення змінних середовища (environment) або клас для роботи з INI файлами.
  • TComponent - Відправна точка для багатьох невидимих компонент. Даний клас має вбудовану можливістю зберігати / зчитувати себе в потоці під час дизайну.
  • TGraphicContro l - Використовуйте цей клас для створення видимих компонент, яким не потрібен handle. Такі компоненти малюють прямо на своїй поверхні і вимагають мало ресурсів Windows.
  • TWinControl - Базовий клас для компонент, які мають вікно. Дане вікно має свій handle, його використовують при доступі до можливостей Windows через API.
  • TCustomControl - Нащадок TWinControl, вводить поняття канви (Canvas) і метод Paint () для кращого контролю за прорисовкой компонента. Саме цей клас використовується в якості базового для побудови більшості видимих ​​компонент, що мають віконний handle.
  • TXxxxx - Клас начебто TEdit або TButton. Використовуються з метою довизначення їх властивостей і методів або перевизначення значення властивостей, прийнятих за замовчуванням.

Приклад створення компонента

Для прикладу створимо новий клас, мутант TButton, в якому змінимо значення за замовчуванням властивості ShowHint на True і додамо нову властивість - лічильник натискань на кнопку. Заготівля модуля для створення нового компонента вже є (див. Пункт Заготівля для нового компонента ). Тепер вихідний текст виглядає так:

unit New_btn; interface uses SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TMyButton = class (TButton) private {Private declarations} FClickCount: Longint; protected {Protected declarations} public {Public declarations} constructor Create (AOwner: TComponent); override; procedure Click; override; property ClickCount: Longint read FClickCount write FClickCount; published {Published declarations} end; procedure Register; implementation constructor TMyButton.Create (AOwner: TComponent); begin inherited Create (AOwner); ShowHint: = True; FClickCount: = 0; end; procedure TMyButton.Click; begin Inc (FClickCount); inherited Click; end; procedure Register; begin RegisterComponents ( 'Samples', [TMyButton]); end; end.

Для того, щоб перевизначити початкове значення властивості при створенні об'єкта, потрібно переписати конструктор Create, в якому і привласнити цій властивості потрібне значення (не забувши перед цим викликати конструктор предка).

Нове властивість для підрахунку натискань на клавішу називається ClickCount. Його внутрішнє поле для збереження значення - FClickCount має тип Longint, ємності поля вистачить надовго.

назад | зміст | вперед

Може виникнути питання; якщо в Delphi вже є своя бібліотека, то навіщо ще створювати якісь об'єкти?
Як його додати в VCL?

Уважаемые партнеры, если Вас заинтересовала наша продукция, мы готовы с Вами сотрудничать. Вам необходимо заполнить эту форму и отправить нам. Наши менеджеры в оперативном режиме обработают Вашу заявку, свяжутся с Вами и ответят на все интересующее Вас вопросы.

Или позвоните нам по телефонам: (048) 823-25-64

Организация (обязательно) *

Адрес доставки

Объем

Как с вами связаться:

Имя

Телефон (обязательно) *

Мобильный телефон

Ваш E-Mail

Дополнительная информация: