Иллюстрированный самоучитель по Турбо Паскалю
Методы Put и Get
Чтобы поместить объект в
поток, нужно обратиться к методу Put, передав ему в качестве параметра
инициированный экземпляр объекта. Например:
var
MyStream:
TBufStream;{Экземпляр потока}
MyWindow:
TMyWindow;{Экземпляр объекта}
.....
MyStream.Put(MyWindow);{Помещаем объект в поток}
Предварительно объект
должен быть зарегистрирован обращением к RegisterType, а поток - инициирован с
помощью TXXXStream.Init.
Метод Put вначале
отыскивает объект в регистрационном списке, создаваемом процедурой RegisterType,
и получает из этого списка регистрационный номер объекта и адрес его метода
Store. Затем в поток записывается регистрационный номер и вызывается метод
Store, который делает остальное, т.е. копирует в поток все поля объекта.
По такой же схеме работает
и метод Get: вначале он считывает из потока регистрационный номер объекта, затем
отыскивает его в регистрационном списке и вызывает соответствующий конструктор
Load. Конструктор размещает в динамической памяти экземпляр считываемого объекта,
а затем считывает из потока все его поля. Результатом работы Get является
нетипизированный указатель на вновь созданный и инициированный объект. Например:
type
MyStream:
TBufStream;{Экземпляр потока}
PWindow:
PMyWindow;{Указатель на экземпляр объекта}
.....
PWindow :=
MyStream.Get;{Получаем объект из потока}
Заметим, что количество
считываемых из потока данных и тип ТВМ, который назначен вновь созданному
объекту, определяется не типом PWindow (см. выше), а регистрационным номером,
полученным из потока. Вы можете ошибочно поместить в левой части оператора
присваивания указатель на объект другого типа и Turbo Vision не сможет
предупредить Вас об этом!
Методы Put и Get позволяют
автоматически сохранять в потоке и получать из него сложные объекты (группы).
Эта возможность реализуется внутри методов Store и Load.