Главная » Delphi » Работа с потоками данных непубликуемых компонентов

0

В главе 11, “Разработка компонентов VCL”, отмечалось, что интегрированная сре да  разработки  Delphi   автоматически  записывает  и  считывает  публикуемые (published) свойства компонента из файла  DFM. Что  же делать,  если в файле DFM не обходимо сохранять и непубликуемые данные?  К счастью, компоненты Delphi  содер жат механизм, позволяющий записывать и считывать определенные программистом данные  из файла  DFM.

Определение свойств

Первым шагом определения сохраняемых непубликуемых свойств  является переоп ределение метода  DefineProperties() компонента. Этот  метод  каждый  компонент наследует от класса TPersistent, в котором он определяется следующим образом:

procedure DefineProperties(Filer: TFiler); virtual;

По умолчанию данный метод управляет чтением и записью публикуемых  свойств  в файл  DFM. Этот метод можно  переопределить и, после вызова  унаследованного (inherited)  метода,   вызвать  определенные  в  компоненте  TFiler методы   De- fineProperty() или  DefineBinaryProperty() —   один   раз  для  каждой   порции данных, которые нужно  поместить в файл  DFM. Определение таких  методов приво дится ниже.

procedure DefineProperty(const Name: string; ReadData: TReaderProc; WriteData: TWriterProc; HasData: Boolean); virtual;

procedure DefineBinaryProperty(const Name: string;

ReadData, WriteData: TStreamProc;

HasData: Boolean); virtual;Функция  DefineProperty() используется для того,  чтобы  сделать  сохраняемыми такие  стандартные типы  данных, как строковые, целые, логические, символьные ти пы,  числа  с плавающей точкой и перечислимые типы.  Метод  DefineBinaryProp- erty() используется для обеспечения доступа к необработанным бинарным данным (графическим или звуковым), записанным в файл DFM.

В обеих  этих  функциях параметр Name идентифицирует имя  свойства, которое должно  быть  записано в файл  DFM. Оно  может  и не совпадать с внутренним именем поля,  содержащего эти  данные. Параметры  ReadData и  WriteData функции  De- fineProperty() отличаются от соответствующих параметров функции DefineBi- naryProperty() по типу, но предназначены для одного  и того  же: они  вызываются для  записи или  считывания данных  из  файла  DFM. (Подробнее  рассмотрим их  не сколько  позже.) Параметр HasData определяет, имеет  ли свойство данные, которые необходимо сохранить.

Параметры ReadData и WriteData функции DefineProperty() имеют типы TRead- erProc и TWriterProc соответственно. Эти типы определены следующим образом:

type

TReaderProc = procedure(Reader: TReader) of object;

TWriterProc = procedure(Writer: TWriter) of object;

Классы  TReader и TWriter (специализированные потомки класса TFiler) имеют дополнительные методы  чтения и записи своих  типов.  Методы  этих  типов  “наводят мосты” между публикуемыми данными компонента и файлом DFM.

Параметры ReadData и WriteData метода DefineBinaryProperty() имеют  тип

TStreamProc, определенный так:

type

TStreamProc = procedure(Stream: TStream) of object;

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

Источник: Тейксейра, Стив, Пачеко, Ксавье.   Borland Delphi 6. Руководство разработчика. : Пер.  с англ. — М. : Издательский дом “Вильямс”, 2002. —  1120 с. : ил. — Парал. тит. англ.

По теме:

  • Комментарии