После того как определен родительский класс компонента, следует создать отдельный модуль компонента. В этом модуле должен объявляться новый компонентный класс и процедура его регистрации в Delphi.

СОВЕТ -

Вы можете в одном модуле объявить сколько угодно компонентных классов, однако эти классы должны быть взаимосвязанными. Если компонентный класс ТМуСотропе^ ссылается на некоторый промежуточный класс ТМуБиЬС^ББ, логично разместить объявления обоих классов в одном модуле.

Создать компонентный модуль можно двумя способами: вручную или с помощью эксперта создания компонента. Последний способ предпочтительнее, так как снижает объем ручного кодирования. Рассмотрим работу с экспертом на примере создания модуля для описанного в 5.1.1 компонента FarClock.

1. Выберите в главном меню Delphi команду Component ► New Component.

2. В поле Ancestor type диалогового окна нужно указать имя родительского класса. Введите символы TCustomL. Обратите внимание на динамическое изменение состояния поля по мере ввода текста - эксперт предлагает уже известные классы в качестве родительского. После ввода в поле появится надпись:

TCustoraLabel [QStdCtrls]

ВНИМАНИЕ -

Заметьте, что в Delphi версий 6 и 7 имеются две библиотеки компонентов: VCL и CLX. Обе содержат почти идентичные компоненты, но первая предназначена для работы компонентов под управлением Windows, а вторая - под управлением Linux. Класс TCustomLabel зарегистрирован в обеих библиотеках, но стоящее в квадратных скобках имя QStdCtrls свидетельствует о том, что этот класс будет выбран в CLX (модули этой библиотеки имеют префикс Q). Если оставить поле Ancestor type таким, будет создан компонент для Linux, и попытка разместить его на форме обычного проекта (для Windows) вызовет сообщение об ошибке. Чтобы этого не произошло (в этой книге рассматриваются только компоненты для Windows), удалите ссылку [QStdCtrls] из поля Ancestor type.

3. Поле Class name предназначено для указания имени вновь создаваемого компонентного класса. Введите в нем имя TFarClock.

4. В поле Palette page нужно ввести имя той вкладки Палитры компонентов Delphi, на которой будет располагаться новый компонент. Введите в нем имя Far - этой вкладки на Палитре нет, но она будет создана после регистрации компонента.

5. Окончательный вид окна эксперта показан на рис. 5.1. Щелкните на кнопке ОК.

В результате мы получим заготовку для модуля компонента, показанную в листинге 5.2.

Листинг 5.2. Заготовка модуля для компонента unit FarClock;

interface

uses

SysUtils, Classes, Controls, StdCtrls;
продолжение &

Листинг 5.2 (продолжение) type TFarClock = class(TCustomLabel) private { Private declarations } protected { Protected declarations } public

/ Public declarations } published

{ Published declarations } end;
procedure Register;

implementation

procedure Register;
begin
RegisterComponents(1 Far', [TFarClock]);
end;

end.

5.2. Создание модуля компонента

Рис. 5,1. Окно эксперта создания нового компонента

Как видим, эксперт проделал минимально возможную работу: создал заготовку для объявления класса и процедуру регистрации компонента. Тем не менее, если не использовать эксперт, а создать модуль вручную (выбрав команду File ► New ► Unit), нам пришлось бы почти весь этот текст кодировать заново. Замечу, что в версии Delphi 7 имеется утилита ModelMaker, которая в значительно большей степени автоматизирует процедуру создания нового класса. Описанию работы с этой утилитой посвящена глава 6.

5.1.5. Создание невизуальных компонентов || Оглавление || 5.3. Создание свойств, методов и событий


Искусство создания компонентов Delphi



Новости за месяц

  • Июль
    2020
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31