Написание своих компонентов для Delphi. Часть 2. Написание не визуального компонента с нуля

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

В подобных случаях лучшее решение – разработать «с нуля» собственный компонент, который будет содержать только необходимое, без посторонних функций, которые в силу специфики его назначения, скорее всего не будут использованы.

Рассмотрим пример создания «с нуля» не визуального компонента.

Создание каркаса компонента

В качестве примера разработаем не визуальный компонент, который будет создавать файл журнала (.log) и сохранять в нём различные записи.

При создании каркаса для компонента, разрабатываемого» с нуля в качестве базового должен быть выбран класс TComponent.

Выбор базового класса

В остальном процесс создания каркаса компонента ничем не отличается от того что было рассмотрено в первой части.

Ниже приведён готовый каркас не визуального компонента создаваемого «с нуля».

Разработка функционала компонента

Объявим следующие члены класса компонента:

Закрытые:

  • Поле fFilePath – (строка) для хранения пути к файлу;
  • Процедура WriteInFile – реализует непосредственно механизм записи в файл журнала. Принимает единственный параметр – строку с текстом записи журнала.

Открытые:

  • Свойство FilePath – для доступа к полю fFilePath;
  • Процедура WriteLog – для записи в файл журнала.

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

Члены класса, объявленные в секции published доступны для «визуального» редактирования в ObjectInspector. Именно поэтому свойство FilePathобъявлено именно в ней.

Процедура WriteInFile представляет собой обычный алгоритм записи строк в текстовый файл, но с учётом указания пути к файлу журнала (предусмотрено поведение по умолчанию).

Открытая процедура WriteLog всего лишь вызывает вышеприведённую процедуру.

С первого взгляда это может показаться совершенно бесполезной конструкцией. Но на самом деле подобное решение имеет смысл. Оно преследует две цели:

  1. Соблюдение принципа инкапсуляции;
  2. Возможность в будущем организовать обработку событий (об этом речь пойдёт в отдельной статье).

После написания всех процедур компонент готов. Его можно установить в Delphi или использовать без установки создавая его динамически.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *