
- •Часть II
- •Главные составные части среды программирования
- •Формы, модули
- •Интеллектуальный редактор
- •Палитра Компонент
- •Дополнительные элементы
- •Структура проекта
- •Структура модуля
- •Проект Delphi
- •Стандартные компоненты
- •Свойства формы
- •События формы
- •Создание форм разного вида
- •Конструирование меню
- •Компоненты
- •Общие принципы создания меню
- •Пункты меню
- •TMainMenu - компонент
- •Основные свойства tMainMenu
- •Основные методы tMainMenu
- •События tMainMenu
- •TMenuItem - класс
- •Основные свойства tMenuItem
- •Основные методы tMenuItem
- •События tMenuItem
- •Рисование и закраска Графические компоненты
- •Свойство объектов Canvas
- •Полный список методов tCanvas
- •Основные события tCanvas
- •Объект tPaintBox
- •TImage - компонент
- •TShape - компонент
- •Файлы и устройства ввода/вывода
- •Использование файловых переменных. Типы файлов
- •Операции ввода/вывода
- •Процедуры и функции для работы с файлом
- •Контроль ошибок ввода/вывода
- •Атрибуты файла. Поиск файла
- •Базовые классы tStream и tHandleStream
- •Свойства и методы класса Tstream
- •Класс tFileStream
- •Класс tMemoryStream
- •Класс tStringStream
- •Оповещение об изменениях в файловой системе
- •Компоненты, используемые для создания баз данных
- •Открытие и закрытие DataSet
- •Работа с Данными
- •Использование SetKey для поиска в таблице
- •Использование фильтров для ограничения числа записей в DataSet
- •Теория ole
- •Ole Контейнер Основные свойства и методы компонента OleContainer.
- •Работа с ms Office в Delphi.
- •Объекты ms Word
- •Свойства и методы объекта Selection
- •Коллекция объектов Shapes
- •Объекты ms Excel
- •Создание объекта ExceLApplication, запуск и визуализация окна приложения
- •Работа с листами рабочей книги
- •Программирование диаграмм Excel в Delphi
- •Коллекция Charts, размещение диаграммы и исходных данных
- •Тип диаграммы
Базовые классы tStream и tHandleStream
В основе иерархии классов потоков лежит класс Tstream. Он обеспечивает выполнение основных операций потока безотносительно к реальному носителю информации. Основными из них являются чтение и запись данных. Класс Tstream порожден непосредственно от класса TObject.
Потоки также играют важную роль в чтении/записи компонентов из файлов ресурсов (DFM). Большая группа методов обеспечивает взаимодействие компонента и потока, чтение свойств компонента из ресурса и запись значений свойств в ресурс.
Свойства и методы класса Tstream
property Position: Longint; Определяет текущую позицию в потоке
property Size: Longint; Определяет размер потока в байтах
function CopyFrom(Source: TStream; Count: Longint): Longint; Копирует из потока Source Count байты, начиная с текущей позиции. Возвращает число скопированных байтов.
function Read(var Buffer; Count: Longint): Longint; virtual; abstract; Абстрактный класс, перекрываемый в наследниках. Считывает из потока Count байты в буфер Buffer. Возвращает число скопированных байтов.
procedure ReadBuffer(var Buffer; Count: Longint);Считывает из потока Count байты в буфер Buffer. Возвращает число скопированных байтов.
function Seek(Offset: Longint; Origin: Word): Longint; virtual; abstract; Абстрактный класс, перекрываемый в наследниках. Смещает текущую позицию в реальном носителе данных на Offset байтов в зависимости от условия Origin.
function Write(const Buffer; Count: Longint): Longint; virtual; abstract; Абстрактный класс, перекрываемый в наследниках. Записывает в поток Count байты из буфера Buffer. Возвращает число скопированных байтов.
procedure WriteBuffer(const Buffer; Count: Longint); Записывает в поток Count байты из буфера Buffer. Возвращает число скопированных байтов.
function ReadComponent(Instance: TComponent): TComponent; Передает данные из потока в компонент Instance, заполняя его свойства значениями.
function ReadComponentRes(Instance: TComponent): TComponent; Считывает заголовок ресурса компонента instance и значения его свойств из потока.
procedure ReadResHeader; Считывает заголовок ресурса компонента из потока.
procedure WriteComponent(Instance: TComponent);Передает в поток значения свойств компонента Instance.
procedure WriteComponentRes(const ResName: string; Instance: TComponent);Записывает в поток заголовок ресурса компонента instance и значения его свойств.
Итак, в основе операций считывания и записи данных в потоке лежат методы Read и Write. Именно они вызываются для реального выполнения операции внутри методов ReadBuffer и WriteBuffer, ReadComponent и writeComponent. Так как класс TStream является абстрактным, то методы Read и write также являются абстрактными. В классах-наследниках они перекрываются, обеспечивая работу с конкретным физическим носителем данных.
Метод seek используется для изменения текущей позиции в потоке. "Точка отсчета" позиции зависит от значения параметра origin:
soFromBeginning — смещение должно быть положительным и отсчитывается от начала потока;
soFromCurrent — смещение относительно текущей позиции в потоке;
soFromEnd — смещение должно быть отрицательным и отсчитывается от конца потока.
Группа методов обеспечивает чтение и запись из потока ресурса компонента. Они используются при создании компонента на основе данных о нем, сохраненных в формате файлов ресурсов. Для чтения ресурса используется метод ReadComponentRes, в котором последовательно вызываются:
метод ReadResHeader — для считывания заголовка ресурса компонента из потока;
метод ReadComponent — для считывания значений свойств компонента.
Для записи ресурса в поток применяется метод writeComponentRes.
Класс THandiestream инкапсулирует поток, связанный с физическим носителем данных через дескриптор.
Для создания потока используется конструктор
constructor Create(AHandle: Integer); в параметре которого передается дескриптор. Впоследствии доступ к дескриптору осуществляется через свойство: property Handle: Integer;