|
|
---|
    TStream - это общий абстрактный объект, обеспечивающий полиморфический ввод-вывод в/на устройство. Переопределяя виртуальные методы GetPos, GetSize, Read, Seek, Truncate и Write, вы можете создать собственные производные потоковые объекты. Сама ObjectWindows делает это, строя производные объекты TDosSteram и TEmsStream. Для буферизированных производных потоков вы должны также переопределить TStream.Flush.
    Status указывает текущее состояние потока, используя одну из
констант stXXXX: stOk, stError, stInitError, stReadError,
stWriteError, stGetError или stPutError.
    Если Status не равно stOk, то все операции с потоком
приостанавливаются до вызова Reset.
    См. также: константы stXXXX.
    ErrorInfo содержит дополнительную информацию, когда Status
не равно stOk. Для значений Status stError, stInitError,
stReadError и stWriteError ErrorInfo содержит код ошибки DOS или
EMS (если он доступен). Когда Status имеет значение stGetError,
ErrorInfo содержит идентификатор объектного типа (поле ObjType в
TStreamRec) незарегистрированного типа объекта. Когда Status
равно stPutError, ErrorInfo содержит смещение сегмента данных
таблицы виртуальных методов (поле VmLink в TStreamRec)
незарегистрированного типа объекта.
    Ниже описываются методы, определенные в данном объекте.
    Копирует Count байт из потока S в объект потока. Например:
    { создать копию всего потока }
NewStream := New(TEmsStream, Init(oldStream^.GetSize));
OldStream^.Seek(0);
NewStream^.CopyFrom(OldStream, OldStream^.GetSize);
    См. также: TStream.GetSize, TObject.Init.
    Вызывается, когда происходит ошибка потока. По умолчанию
TStream.Error сохраняет Code и Info в полях Status и ErrorInfo, а
затем, если глобальная переменная StreamError не равна nil,
вызывает процедуру, на которую указывает StreamError. Если происходит
ошибка, все операции с потоком приостанавливаются до вызова
Reset.
    См. также: TStream.Reset, переменную StreamError.
    Сбрасывает все буферы путем очистки буфера чтения или записи
буфера записи (или обоих). По умолчанию TStream.Flush ничего не
делает и должна переопределяться в наследующих типах, где
реализуются буферы.
    См. также: TBufStream.Flush.
    Считывает объект из потока. Объект должен быть
предварительно записан в поток методом TStream.Put. Get сначала считывает
из потока идентификатор объектного типа (слово). Затем она
находит соответствующий объектный тип, сравнивая идентификатор с
полем ObjType всех зарегистрированных объектных типов (см. тип
TStreamRec), и наконец вызывает конструктор Load этого объектного
типа для создания и загрузки объекта. Если считываемый из потока
объектный тип равен 0, Get возвращает указатель nil. Если
указатель объектного типа не зарегистрирован (с помощью RegisterType),
Get вызывает TStream.Error и возвращает указатель nil. В
противном случае Get возвращает указатель на вновь созданный объект.
    См. также: TStream.Put, RegisterType, TStreamRec, методы
Load.
    Возвращает значение текущей позиции потока. Это абстрактный
метод, который должен переопределяться.
    См. также: TStreamSeek.
    Возвращает общий размер потока. Это абстрактный метод,
который должен переопределяться.
    Записывает объект в поток. Позднее объект может считываться
из потока с помощью TStreamGet.Get. Put сначала находит запись
регистрации типа объекта, сравнивая смещение таблицы виртуальных
методов объекта с полем WmtLink всех зарегистрированных объектных
типов (см. тип TStreamRec), затем записывает в поток
идентификатор тип объекта (поле ObjType записи регистрации) и, наконец,
вызывает метод Store этого объектного типа для записи объекта. Если
передаваемый в Put аргумент имеет значение nil, то Put записывает
в поток слово, содержащее 0. Если объектный тип P не
зарегистрирован (с помощью RegisterType), Put вызывает TStreamError и с
потоком ничего не делает.
    См. также: методы TStreamGet, RegisterType, TStreamRec,
Store.
    Считывает из потока Stream Count байт и продвигает текущую
позицию потока на Count байт. В случае ошибки Read вызывает Error
и заполняет Buf Count нулевыми байтами. Это абстрактный метод,
который должен переопределяться в наследующих типах.
    См. также: TStream.Write, TStream.Error.
    Считывает строку из текущей позиции в потоке, возвращая
указатель PString. TStream.ReadStr для выделения для строки Length
+ 1 байт вызывает GetMem.
    См. также: TStream.WriteStr.
    Сбрасывает для потока любой ошибочное условие, устанавливая
Status и ErrorInfo в 0. Этот метод позволяет вам продолжить
работу с потоком после исправления условия ошибки.
    См. также: TStream.Status, TStream.ErrorInfo, коды ошибок
stXXXX.
    Устанавливает текущую позицию в Pos байт от начала потока.
Начальной позицией потока является 0. Это абстрактный метод,
который должен переопределяться во всех потомках.
    См. также: TStream.GetPos.
    Считывает из потока строку с завершающим нулем, считывая
сначала длину строки, а затем заданное число символов. Возвращает
указатель на прочитанную строку с завершающим нулем.
    См. также: TStream.StrWrite.
    Записывает в поток строку с завершающим нулем, записывая
сначала длину строки, а затем заданное число символов.
    См. также: TStream.StrWrite.
    Удаляет все данные из потока от текущей позиции до конца.
Это абстрактный метод, который должен переопределяться во всех
потомках.
    См. также: TStream.GetPos, TStream.Seek.
    Записывает Count байт из Buf в потоки продвигает текущую
позицию в потоке на Count байт. В случае ошибки Write вызывает
Error. Это абстрактный метод, который должен переопределяться во
всех потомках.
    См. также: TStream.Read, TStream.Error.
Поля
Status: Integer;
ErrorInfo (чтение/запись)
ErrorInfo: Integer;
Методы
CopyFrom
procedure CopyFrom(var S: TStream; Count: Longint);
Error (иногда переопределяется)
procedure Error(Code, Info: Integer); virtual;
Flush (иногда переопределяется)
procedure Flush; virtual;
Get
function Get: PObject;
GetPos (всегда переопределяется)
function GetPos: Longint; virtual;
GetSize (всегда переопределяется)
function GetSize: Longint; virtual;
Put
procedure Put(P: PObject);
Read (всегда переопределяется)
procedure Read(var Buf; Count; Word); virtual;
ReadStr
function ReadStr: PString;
Reset
procedure Reset;
Seek (всегда переопределяется)
procedure Seek(Pos: Longint); virtual;
StrRead
function StrRead: PChar;
procedure StrWrite(P: PChar);
Truncate (всегда переопределяется)
procedure Trancate: virtual;
Write (всегда переопределяется)
procedure Write(var Buf; Count: Word); virtual;