1. Поток. Иерархия классов потоков: Потоки – классы, предназначенные для хранения и последовательного ввода-вывода данных. Класс Описание Абстрактный поток. От него наследуются все остальные. Свойства и методы образуют базовый TStream интерфейс потоковых объектов. Дескрипторный поток. Хранит данные в файле. Для чтения-записи файла используется дескриптор (handle). THandleStream Дескриптор — это номер открытого файла в операционной системе. Его возвращают низкоуровневые функции создания и открытия файла. Файловый поток. Хранит данные в файле. Поток открывает-создает файл по имени, переданному в TFileStream конструктор. Хранит данные в оперативной памяти. Моделирует работу с файлом. Используется для хранения TMemoryStream промежуточных результатов, когда файловый поток не подходит из-за низкой скорости передачи данных. TResourceStream Обеспечивает доступ к ресурсам в Windows-приложении. TBlobStream Обеспечивает последовательный доступ к большим полям таблиц в базах данных. 2. Свойства и методы TStream: Свойства Position: Longint текущая позиция чтения-записи. Size: Longint текущий размер потока в байтах. Методы CopyFrom (Source: TStream; Count: копирует Count байт из потока Source в свой поток. Longint): Longint Read (var Buffer; Count: Longint): Longint читает Count байт из потока в буфер Buffer, продвигает текущую позицию на Count байт вперед и возвращает число прочитанных байт. (Если значение функции меньше значения Count, то в результате чтения был достигнут конец потока.) ReadBuffer (var Buffer; Count: Longint) читает из потока Count байт в буфер Buffer и продвигает текущую позицию на Count байт вперед. (Если выполняется попытка чтения за концом потока, то генерируется ошибка.) Seek (Offset: Longint; Origin: Word): продвигает текущую позицию в потоке на Offset байт относительно позиции, Longint заданной параметром Origin. Параметр Origin следующие значения: 0 – относительно начала потока; 1 – относительно текущей позиции в потоке; 2 – относительно конца потока. Write (const Buffer; Count: Longint): записывает в поток Count байт из буфера Buffer, продвигает текущую позицию на Longint Count байт вперед и возвращает реально записанное количество байт. (Если значение функции отличается от значения Count, то при записи была ошибка.) WriteBuffer (const Buffer; Count: Longint) записывает в поток Count байт из буфера Buffer и продвигает текущую позицию на Count байт вперед. (Если по какой-либо причине невозможно записать все байты буфера, то генерируется ошибка.) 3. Пример записи переменной string в поток: Var Stream: TStream; S: AnsiString; StrLen: Integer; begin Stream := TFileStream.Create('Sample.Dat', fmCreate); // Создание файлового потока StrLen := Length(S) * SizeOf(Char); // Запись в поток некоторой строки Stream.Write(StrLen, SizeOf(Integer)); // Запись длины строки Stream.Write(S, StrLen); // Запись символов строки Stream.Free; // Закрытие потока end; 1. Сериализация и десериализация: Сериализация – процесс сохранения состояния объекта во внешнюю среду. Десериализация – процесс восстановления состояния объекта из внешней среды. 2. Почему сериализация и десериализация требует использования потоков, почему нельзя работать с файлами через read и write: 3. Высокоуровневая и низкоуровневая сериализация: Низкоуровневая сериализация – это вид сериализации, при котором разработчик сам заботится о внедрении форматов и методах сохранения состояния объекта. Высокоуровневая сериализация производится стандартными средствами среды визуальной разработки. 4. Основное правило высокоуровневой сериализации: При сериализации может быть сохранена и восстановлена только та информация, что записана в read-write publishedсвойствах объекта или в псевдосвойствах. 5. Требования для сериализации иерархии классов стандартными методами Delphi. Пример: Унаследовать класс одного из сериализуемых объектов от TComponent. Создать поток и вызвать метод WriteComponent(Inst: TComponent). 6. GetChildren. Параметры и назначение: Используется для решения проблемы, возникающей при использовании высокоуровневой сериализации классов содержащих списки объектов. Автоматически вызывается, когда система сериализации хочет опросить компонент о том, какие еще компоненты нужно сохранить. Type TGetChildProc = procedure (Child: TComponent) of object; GetChildren(Proc: TGetChildProc; Root: TComponent); // Proc – процедура, в качестве аргумента которой указывается компонент который нужно сериализовать вместе с данным // Root – ссылка на объект, для которого был вызван метод Stream.WriteComponent 7. Основные свойства и методы TreeView: Свойства AutoExpand: Boolean = True – узлы открываются и сворачиваются одним кликом. ChangeDelay: Integer Время задержки генерации события OnChange. HideSelection: Boolean = True – выбранный узел высвечивается на экране как выбранный, если TreeView не в фокусе. HotTrack: Boolean = True – отображение узлов изменяется при проведении указателя. Images: TCustomImageList Элемент из массива основных иконок для объектов TTreeNode. Items: TTreeNodes Доступ к узлам дерева. ReadOnly: Boolean = True – запрещено редактирование узлов. Selected: TTreeNode Ссылка на текущий выбранный элемент. StateImages: TCustomImageList Элемент из массива иконок для узлов состояния. Методы FullColapse Сворачивает все узлы. FullExpand Разворачивает все узлы. OnChange: TTVChangedEvent Генерируется после каждого изменения текущего выбранного узла. OnChanging: TTVChangingEvent Генерируется при каждой попытке изменить выбранный узел. 8. Основные свойства и методы TTreeNodes: Свойства Count: Integer Количество узлов дерева. Item [Index: Integer]: TTreeNode Массив объектов TTreenode. Методы Add (Node: TTreeNode; const S: string): Добавляет TTreeNode в дерево (добавление в тот же уровень что и Node). TTreeNode AddChild (Node: TTreeNode, const S: Добавляет TTreeNode в дерево (добавление в конец дочерних узлов Node). string): TTreeNode Clear Удаляет все узлы. Delete (Node: TTreeNode) Удаляет Node и его потомков. 9. Основные свойства и методы TTreeNode: Свойства Count: Integer Количество дочерних элементов. Data: Pointer Связь TTreeNode с данными. Expanded: Boolean = True – узел в развернутом состоянии. HasChildren: Boolean = True – есть дочерние узлы. ImageIndex: TImageIndex Индекс иконки, при которой элемент не выбран. Item [Index: Integer] Доступ к дочерним узлам. Level: Integer Уровень узла. Parent: TTreeNode Доступ к родителю. Selected: Boolean = True – текущий выбранный узел. SelectedIndex: Integer Индекс иконки, при которой элемент выбран. StateIndex: Integer Индекс дополнительной иконки, изображаемой слева от основной. Методы Collapse (Recurse: Boolean) Сворачивает узел. Если Recurse = True, то сворачиваются и дочерние. Delete Удаляет узел. DeleteChildren Удаляет потомков. Expand (Recurse: Boolean) Разворачивает узел. Если Recurse = True, то разворачиваются и дочерние. MakeVisible Раскрывает все родительские узлы, чтобы сделать узел видимым.