Турбо Паскаль 6.0

       

TResourceFile Objects


+---------+ | TObject | +----+----+ +=======+=======+ | TResourceFile | +===============+

TResourseFile реализует поток, который может индексироваться ключевыми строками. Когда объекты сохраняются в файле ресурса, используя TResourseFile.Put, задается ключевая строка, которая идентифицирует этот объект. Объект может быть позже получен указанием этой ключевой строки в вызове TResourseFile.Get. Для обеспечения быстрого и эффективного доступа к объектам, хранящимся в файле ресурса, TResourseFile хранит ключевые строки в отсортированной коллекции строк (используя тип TResourseCollection) вместе с позицией и размером данных этого ресурса в файле ресурса. Как и в случае потоков, типы объектов, записываемые и читаемые из файла ресурсов, должны быть зарегистрированы с помощью RegisterType.

Поля

Stream Stream: PStream; Только чтение Указатель на поток, связанный с этим файлом ресурса.

Modified Modified: Boolean; Чтение/Запись Установлен в True, если файл ресурса был модифицирован.

Методы

Init constructor Init(AStream: Pstream); Перекрывается: Никогда Инициализирует файл ресурса, используя поток, заданный через AStream, и устанавливает поле Modified в False. Например:

ResFile.Init(New(TBufStream, Init("MYAPP.RES', stOpenRead, 1024)));

Во время инициализации Init смотрит в заголовке файла ресурсов текущую позицию в потоке. Формат заголовка файла ресурсов:

type TResFileHeader = record Signature: array[14] of Char; ResFileSize: Longint; IndexOffset: Longint; end;

где Signature содержит 'FBPR', ResFileSize содержит размер всего файла ресурсов, за исключением полей Signature и ResFileSize (т.е. размер файла ресурса -8 байт) и IndexOffset содержит смещение коллекции индексов от начала заголовка. Если Init не находит заголовка файла ресурса в текущей позиции AStream, он считает, что создается новый файл ресурса и создает пустой индекс. Если Init видит метку .EXE файла в текущей позиции потока, он просматривает поток до конца файла .EXE и ищет заголовок файла ресурса здесь. Аналогично Init будет пропускать оверлейный файл, добавленный к .EXE файлу (так же как OvrInit пропускает файл ресурса). Это означает, что Вы можете добавить оверлейный файл и файл ресурса (в любом порядке) в конец .EXE файла Вашей программы. (Именно это сделано с выполнимым файлом IDE - TURBO.EXE).


См. так же: TResourceFile.Done



Done destructor Done; virtual; Перекрывается: Никогда Выталкивает файл ресурса, используя TResourseFile.Flush, затем освобождает индекс и поток, указанный полем Stream.

См. так же: TResourceFile.Init, TResourceFile.Flush

Count function Count: Integer; Возвращает число ресурсов, запомненных в файле ресурсов.

См. так же: TResourceFile.KeyOf

Delete procedure Delete(Key: String); Удаляет ресурс, индексируемый ключем Key из файла ресурсов. Пространство, ранее занятое удаленным ресурсом, не используется. Вы можете удалить эту память, используя SwitchTo для создания упакованной копии файла в новом потоке.

См. так же: TResourceFile.SwitchTo

Flush procedure Flush; Если файл ресурса был модифицирован (проверяется поле Modified) Flush сохраняет обновленный индекс в конце потока и обновляет заголовок ресурса в начале потока. Затем Modified устанавливается в False.

См. так же: TResourceFile.Done, TResourceFile.Modified

Get function Get(Key: String): PObject; Ищет Key в индексе файла ресурсов. Возвращает nil, если ключ не найден. Иначе, устанавливает поток на позицию, заданную индексом и вызывает Stream^.Get для создания и загрузки объекта по этому индексу. Например

DeskTop^.Insert(ValidView(ResFile.Get('EditorWindow')));

См. так же: TResourceFile.KeyAt, TResourceFile.Put

KeyAt function KeyAt(I: Integer): String; Возвращает ключевую строку для ресурса с номером i в файле ресурса. Индекс первого ресурса 0 и индекс последнего ресурса TResourseFile.Count-1. Используя Count и KeyAt Вы можете обработать все ресурсы в файле ресурса.

См. так же: TResourceFile.Count

Put procedure Put(Item: PObject; Key: String); Добавляет объект, заданный через Р в файл ресурса с ключевой строкой, заданной в Key. Если индекс содержит Key, новый объект замещает старый. Объект добавляется в конец существующих объектов файла ресурса с использованием Stream^.Put

См. так же: TResourceFile.Get

SwitchTo function SwitchTo(AStream: PStream; Pack: Boolean): PStream; Переключает файл ресурса из его потока в поток, переданный через AStream и возвращает указатель на новый поток. Если параметр Pack равен True, поток будет отбрасывать пустое и неиспользуемое пространство из файла ресурса до записи в новый поток. Это единственный способ сжать файл ресурса. Копирование с параметром Pack = False будет выполняться быстрее, но без сжатия.


Содержание раздела







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