Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП / ООП_Лекции.doc
Скачиваний:
50
Добавлен:
08.06.2015
Размер:
1.03 Mб
Скачать

Компиляция компонентов

Когда для создания исходного файла нового компонента используется мастер Component Wizard, (или если он генерируется с нуля), и он не инсталлируется сразу же в пакет, обратите внимание, что Delphi отключает команды трансляции в меню Project. В Delphi компилируются и строятся проекты, а не исходные файлы.

Да, это верно, если не открыть исходный файл на языке Pascal. Если сохранить исходный файл, а затем нажать кнопку «Open» панели инструментов Project, чтобы заново открыть файл PAS, мож­но проверить синтаксис вашего модуля и скомпилировать его (с определением компонентов) в файл DCU. Конечно, если попытаться выполнить этот проект, то появится сообщение об ошибке.

Хотя этот подход вообще полезен, но имеет два несущественных недостатка. Во-первых, Delphi анализирует исходный файл так, будто это файл проекта в формате исходного текста. Например, Delphi перечислит все модули из различных строк uses (так что придется немного прокрутить экран до достижения действительного кода).

interface

uses

SysUtils,

WinTypes,

WinProcs,

Messages,

Classes,

Graphics,

...

Рис. 5.1. Фундаментальные классы компонентов библиотеки визуальных компонент VCL

Вторая проблема состоит в том, что Delphi создает файл ресурсов для одиночного файла, как для любого проекта с типичной пиктограммой проекта Delphi. К счастью, этот файл позже можно просто удалить. Кроме того, Delphi создает типичные файлы DOF и DSK для файла проекта, а эти файлы действительно могут быть полезны.

В действительности, это было проблемой только в Delphi 1 и Delphi 2. С появлением технологии пакетов в Delphi 3 можно просто инсталлировать ваш компонент в пакет, перетранслировать пакет, чтобы увидеть, правилен ли код, и инсталлировать компонент (возможно после дальнейших проверок). Основное различие заключается в том, что повторная компиляция пакета выполняется намного быстрее повторной компиляции всей библиотеки визуальных компонент VCL, что нужно было делать в предыдущих версиях Delphi.

Отладка компонентов

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

При написании сложного компонента нужно иметь в виду, что его инсталляция и использова­ние могут разрушить среду Delphi и привести к потере кода компонента, если он не был сохранен. Чтобы предотвратить появление проблемы, можно написать простую программу проверки с дина­мическим созданием компонента (например, в методе FormCreate) и возможностью редактирова­ния и проверки различных свойств кнопок, флажков, окон редактирования и полей со списком. Дописав некоторый дополнительный код, можно даже проверять события компонента.

Так как процесс тестирования неприятно раздражает, большинство программистов немедленно устанавливает компоненты в библиотеку визуальных компонент VCL и непосредственно используют среду Delphi для проверки новых компонентов. И только позже они начинают строить тестовую программу.

Однако нетрудно автоматически сгенерировать программу теста компонента, а некоторые инструменты нового поколения для генерации компонентов уже делают это. Одна из разновид­ностей этого подхода состоит в создании инспектора объектов этапа выполнения, использующего данные RTTI компонента (описанные в предыдущей главе), чтобы манипулировать свойствами нового компонента.

Построение простых компонентов

Демонстрация родительских свойств: компонент Nothing

Первый изучаемый компонент — это компонент, который ничего (nothing) не делает. Такой компонент можно описать следующим простым кодом:

type

TDdhNothing = class(TGraphicControl)

end;

Совет

Задание префикса имени компонента буквами Ddh станет стандартом нашей книги. Использо­вание мнемонических префиксов - обычный подход многих продавцов компонентов. Здесь это сделано потому, что нельзя установить два компонента Delphi с одним и тем же именем. Использование префикса - хороший способ делать имена класса уникальными. Использование собственного префикса защищает сообщество, программирующее в Delphi.

Небольшой код! Это, возможно, самый простой компонент, который можно создать, так как безоконный графический элемент управления (nonwindowed) не использует никаких ресурсов Windows. Однако этот, очевидно, бесполезный компонент наследует отдельные возможности от предков: TComponent, TControl и TGraphicControl. Эти классы определяют свойства позиции и размера, подсказки, события мыши и многие другие свойства. Некоторые из свойств делаются доступными из базовых классов. Другие можно делать доступными, просто переобъявляя их в разделе объявления класса published:

type

TDdhNothing = class{TGraphicControl)

published

property Align;

property ShowHint;

property Visible;

property Enabled;

property OnClick;

property OnDblClick;

property OnMouseDown;

property OrWouseUp;

property OnMouseMove;

property OnDragDrop;

property OnDragOver;

property OnEndDrag;

property OnStartDrag;

end;

Этот компонент можно было бы назвать THintArea или TClickArea и претендовать на то, что он полезен. Несмотря на данное ему имя, этот ужасно простой компонент в действитель­ности можно использовать для упомянутых выше целей, например, для подсказки при щелчке мышью на области, определяющей «горячее поле» образа.

Конечно, перед использованием компонента TDdhNothing, его нужно установить в библиотеку визуальных компонентов VCL Delphi. Так как этот компонент не содержит кода, он, по крайней мере, так же не содержит ошибок, как и родительский класс TGraphicControl. Следовательно, этот компонент не нужно отлаживать. При этом Delphi добавит код компонента в библиотеку и вызовет процедуру Register для каждого компонента, определенного в модуле. Процедура Register делает компонент доступным для среды проектирования Delphi и помещает его в отдельную страницу палитры:

procedure Register;

begin

RegisterComponents('DDHB', [TDdhNothing]);

end;

По умолчанию поместите все компоненты для этой книги на странице DDHB (Delphi Developer's Handbook) палитры компонентов.

В дополнение к созданию объявления класса и определения страницы палитры, вы также должны предоставить пиктограмму, которую Delphi будет использовать для этого компонента. Пиктограмма должна быть битовым образом 24 х 24 пикселя с тем же именем, что и класс ком­понента (но с использованием только прописных букв, например, TDDHNOTHING).

Соседние файлы в папке ООП