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

Примечание

Файл исходного текста компонента назван DDHNOTH.PAS. Как и имена классов компонентов, так и имена модулей должны также быть уникальными. В результате два различных пакета (используемые в данном проекте) не могут содержать модуль с тем же самым именем. Префикс DDH используется для имен файлов, чтобы избежать коллизий с именами модулей других компонентов, которые могли быть установлены ранее. В Delphi 3, при помещении компонента в пакет, если файл DCR доступен, редактор пакета генерирует в исходном файле пакета соответствующую директиву $R для подключения компонента. Однако это работает не всегда. Если это случилось, попробуйте удалить и вставить в пакет модуль компонента или отредактировать исходный текст пакета вручную (объяснение этого будет представлено в следующей главе).

Совет

Чтобы установить битовый образ компонента, можно просто включить в модуль компонента директиву {$R *.DCR}. Так как файл ресурса обычно имеет то же самое имя, что и файл модуля (хотя это не обязательно), эта директива будет работать для любого написанного вами компонента. Именно этот подход использовался в книге.

Примечание

Важно называть поля, методы доступа и свойства в соответствии со стандартом, определенным фирмой Borland и описанным в руководстве Component Writer's Guide. Основной руководящий принцип: используйте для свойств содержательные имена, добавляйте f к именам полей, соответствующих свойствам, и называйте методы доступа, как Get или Set плюс имя свойства (как В SetStatus И SetColor).

Как только компонент TDdhNothing построен, можно попробовать его использовать. При размещении этого компонента в форме видно, что по умолчанию высота и ширина имеют значение в один пиксель. При простом размещении компонента в среде Delphi сразу возникает проблема. Чтобы устранить проблему, нужно заместить конструктор, устанавливающий размеры компонента, и изменить объявления свойств высоты Height и ширины Width:

type

TDdhNothing = class(TGraphicControl)

public

constructor Create(Owner: TComponent); override;

published

property Width default 50;

property Height default 50;

property Align;

Примечание

He забудьте добавить ключевое слово override в объявление конструктора, иначе библиотека визуальных компонент VCL никогда не вызовет вашу версию конструктора!

Вот реализация конструктора TDdhNothing.

constructor TDdhNothing.Create(Owner: TComponent);

begin

// Сначала вызов конструктора родительского класса

inherited Create(Owner);

// Установка размера

Width := 50;

Height := 50;

end;

Так как значения этих свойств по умолчанию устанавливаются в конструкторе, их нужно отразить при объявлении свойства (повторно определив), добавляя ключевое слово default и определяя значения, используемые в конструкторе.

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

Чтобы показать класс компонента TDdhNothing, построен пример, отображающий всплы­вающие подсказки (не производя других визуальных действий) на пустых областях формы, т.е. подсказку для компонента образа Image и другую подсказку для отдельных областей образа. Чтобы сделать это, компоненты Nothing помещены с обеих сторон образа и над частью изображения, чтобы создать «горячую» зону (область, отображающую различные подсказки и специальные сообщения при ее нажатии).

Вот сокращенное описание формы, показывающее только свойства, связанные с этим примером:

object Form1: TForml

BorderStyle = bsDialog

Caption = 'Nothing component Demo'

ClientHeight = 448

ClientWidth = 632

ShowHint = True

object Imagel: TImage

Left =89

Top = 0

Width = 423

Height = 448

Hint = 'Not a mouse'

Align = alClient

Picture.Data =(...)

OnClick = ImagelClick '

end

object DdhNothingl: TDdhNothing

Left = 0

Top =0

Width =89

Height =448

Hint = 'Move right...'

Align = alLeft end

object DdhNothfng2: TDdhNothing

Left = 512

Top = 0

Width = 120

Height = 448

Hint = 'Move left...'

Align = alRight end

object DdhNothing3: TDdhNothing

Left = 168

Top = 280

Width =313

Height = 169

Hint = 'Mouse ! ! ! '

OnClick = DdhNothingSClick

end

end

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