Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ВВЕДЕНИЕ В ОБЪЕКТНО Ориентированное программиро...docx
Скачиваний:
31
Добавлен:
29.08.2019
Размер:
1.01 Mб
Скачать

Инсталляция и деинсталляция компонента

Перед тем, как использовать компонент во время визуального конструирования его надо инсталлировать. После этого он появится на палитре компонентов. Команды меню: Component/Install/Component.

При необходимости компонент можно удалить из палитры компонентов. Если компонент был добавлен в уже существующий пакет, то его удаляют из соответствующего файла пакета. Команды: File/Open/(*.dpk)/выбор компонента/Remove, Если компоненты были добавлены в новый пакет, можно удалить весь пакет: Project/Options/Packages/ выбор пакета/Remove,

Создание свойств, событий и методов компонентов Работа со свойствами

Согласно определению, свойства отражают текущее состояние объекта. При написании компонента следует:

· сделать возможным установку значений свойств как во время работы программы, так и в процессе визуальной разработки программы, объявляя их published;

· предусмотреть значения свойств «по умолчанию», которые наиболее типичны для компонента и потребовали бы возможно меньших изменений в процессе визуальной разработки приложения;

· обеспечить контроль значений свойств на допустимость и, в случае неправильной установки, автоматическое исправление значений.

При декларации свойства можно определить для него значение по умолчанию. Delphi использует значение по умолчанию, чтобы определить, сохранять ли значение свойства в файле формы. Сохраняется значение в том случае, если оно отличается от значения по умолчанию и директива stored установлена в true. Если не определить для свойства значение по умолчанию, то оно сохраняется всегда, когда Stored = true. Для свойств с областью видимости published значение stored по умолчанию = true. Если при перекрытии свойства оно теряет значение по умолчанию, то должна использоваться директива nodefault.

Важно отметить, что не происходит автоматической установки свойства в значение по умолчанию. Эта установка должна выполняться в конструкторе компонента. Например:

Если для компонента на форме установлено значение, отличное от значения по умолчанию, то оно сохраняется в файле формы и будет установлено формой при загрузке проекта в Delphi или запуске приложения.

Delphi сохраняет форму и ее компоненты в файле формы (.dfm). Файл формы - это бинарное представление свойств формы и ее компонент. Когда компонент добавляется на форму, он должен быть способен записать свои свойства в файл формы при сохранении. Соответственно, при загрузке в Delphi или выполнении приложения, компонент должен восстановить сам себя из файла формы.

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

Если компоненту нужна еще какая-либо инициализация, кроме установки значения свойств, то следует перекрыть виртуальный метод Loaded, который вызывается сразу после установки значений свойств и перед отрнсовкой компонента. Первое действие этого метода - вызов перекрытого метода предка.

Методы

Методы могут быть использованы только во время выполнения программы для доступа к

элементам компонента, выполнения специфических действий и т.п.

При создании методов рекомендуется соблюдать следующие общие принципы:

1. избегать внутренних взаимозависимостей;

2. выбирать названия методов;

3. защищать методы.

Рассмотрим эти принципы более подробно.

Отсутствие внутренних взаимозависимостей позволяет встраивать компоненты в свое приложение не задумываясь о их реализации, что является одним из основных преимуществ компонентов. Поэтому, новые компоненты также следует создавать так, чтобы они корректно функционировали в любой ситуации без необходимости проверки каких-либо дополнительных предусловий или написания какого-либо дополнительного кода. И при написании компонента следует стараться, чтобы не было каких-либо особых условий при его использовании. Следует избегать того, чтобы:

· методы должны были вызываться в определенном порядке;

· было необходимо вызвать методы, чтобы использовать компонент;

· методы могли установить компонент в неверное состояние

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

При выборе названий методов рекомендуется следовать некоторым правилам:

· следует делать имена методов содержательными, например PasteFromClipboard содержательнее, чем РFС;

· рекомендуется использовать глаголы в именах методов;

· имена функций должны отражать природу возвращаемых значений, например GetHorisontalPosition.

Требование защиты методов сводится к тому, что при разработке компонента его методам следует назначить соответствующие области видимости:

· любые методы, которые разработчик приложений может вызывать, должны быть объявлены public;

· конструктор и деструктор всегда должны быть public;

· любые методы, которые служат для реализации функциональности компонента, но вызываются не из приложения, а из других методов не должны быть public. Они могут быть private или protected. Если предполагается их вызов из методов классов потомков, то protected;

· методы чтения и записи свойств должны быть объявлены как protected.

При разработке компонентов возможно:

· создание новых методов, которые будут реализовать полностью новые, как по назначению, так и по реализации, функциональные возможности компонента;

· перекрывать виртуальные и динамические методы предка - изменяя тем самым реализацию методов предка. Существенно, что, в отличии от обычных классов, компонент не должен иметь абстрактных методов.

При разработке методов не следует также забывать, что большинство из них будут вызываться из обработчиков событий, поэтому они не должны связывать системные ресурсы или переводить Windows в состояние, когда она не сможет реагировать на действия пользователя.