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

Поток не, учитывает специфику хранящихся в файле данных, т. е. по существу работает с данными, как если бы хранились в не типизированном файле.


В следующем примере файл с именем, хранящимся в Editl.Text, копируется В файл Edit2. Text.

procedure TFormI.CopyFileClick(Sender:TObject);
var
Streami, Stream2: TStream;
begin
Streami:=TFileStream.Create(Editi.Text,
fmOpenRead or fmShareDenyWrite);
try
Stream2:=TFileStream.Create(Edit2.Text,
fmOpenCreate or fmShareDenyRead);
try
Stream2.CopyFrom(Streami, Streami.Size);
finally
Stream2.Free;
finally
Stream1.Free
end;


Абстрактный класс т Stream лишь декларирует ключевые методы Read и write, которые перекрываются в его наследниках для специализации операций:

· TFileStream - обмен данными с файлом;

· TStringStream - обмен данными с длинной строкой (в памяти);

· TMemoryStream - обмен данными с памятью;

· TBLOBStream - чтение/запись полей данных типаBLOB (Binary Large Object - большой двоичный объект;

· TWinsocketStream - обмен данными с сокетным подключением;

· TOLEStream - обмен данными в формате OLE.


Любой наследник получает в свое распоряжение метод copyFrom, с помощью которого он может прочитать содержимое другого потока. Таким способом можно, например, файловые данные расположить в памяти или наоборот - содержимое памяти записать в дисковый файл.

очно так же от TStream наследуются множество других полезных методов, в том числе:

· Seek - пропускает нужное количество байт от текущей позиции потока;

· ReadBuffer - читает из буфера в поток нужное количество байт;

· Readcomponent - читает свойства компонента из потока;

· WriteBuffer - записывает в поток содержимое буфера заданной длины;

· WriteComponent - записывает в поток свойства компонента.


Следующий обработчик bbRunciick выведет в редактор mmOutput свойства кнопки bbRun:

procedure TfmExample.bbRunClick(Sender: TObject);


var
MemSourceStream, MemDestStream: TMemoryStream;
begin
MemSourceStream:= TMemoryStream.Create;
try
MemDestStream:= TMemoryStream.Create;
try
MemSourceStream.WriteComponent(bbRun);
MemSourceStream.Seek(0, soFromBeginning);
ObjectBinaryToText(MemSourceStream, MemDestStream);
MemDestStream.Seek(0, soFromBeginning);
mmOutput.Lines.LoadFromStream(MemDestStream) finally
MemDestStream.Free
end;
finally
MemSourceStream.Free
end;
end;

Комментарий к программе

Вначале свойства компонента записываются в поток MеmSourceStream. Чтобы полученным таким образом двоичным данным придать "читабельный" вид, используется процедура ObjectBinaryToText, которая преобразует данные из MemSourceStream и помещает иx в MemDestStream. Содержимое этого второго потока и выводится

В окне mmOutput. Вид окна работающей программы представлен на рис. 11.2.

Рис. 11.2. Свойства компонента bbRun

Модули

Стандартный Паскаль не предусматривает механизмов раздельной компиляции частей программы с последующей их сборкой перед выполнением. Более того, последовательное проведение в жизнь принципа обязательного описания любого объекта перед его использованием делает фактически невозможной разработку разнообразных библиотек прикладных программ. Точнее, такие библиотеки в рамках стандартного Паскаля могут существовать только в виде исходных текстов, и программист должен сам включать в программу подчас весьма обширные тексты различных поддерживающих процедур, таких как процедуры матричной алгебры, численного интегрирования, математической статистики и т. п.

Вполне понятно поэтому стремление разработчиков коммерческих компиляторов Паскаля включать в язык средства, повышающие его модульность. Чаще всего таким средством является разрешение использовать внешние процедуры и функции, тело которых заменяется стандартной директивой External. Разработчики Object Pascal пошли в этом направлении еще дальше, включив в язык механизм так называемых модулей.

Модуль - это автономно компилируемая программная единица, включающая в себя различные компоненты интерфейсного раздела (типы, константы, переменные, процедуры и функции) и, возможно, некоторые исполняемые операторы инициирующего раздела. Появление объектов в интерфейсной части делает их доступными для других модулей и основной программы. Тела процедур и функций располагаются в исполняемой части модуля, которая может быть скрыта от пользователя.

Роль модулей в Delphi не исчерпывается только механизмом раздельной компиляции. Delphi связывает с каждым включаемым в программу окном собственный модуль и таким способом локализует все свойства окна в отдельной программной единице. Как мы уже выяснили (см. п. 5.2), основная программа (файл проекта dpr) весьма специфична: она содержит перечень всех используемых в программе модулей и несколько исполняемых операторов, обеспечивающих создание нужных окон и связь программы с Windows. Вся основная работа программы управляется кодом, содержащимся в модулях.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: