Советы по Delphi

         

Хранение данных в EXE-файле


Вы можете включить любой тип данных как RCDATA или пользовательских тип ресурса. Это очень просто. Данный совет покажет вам общую технику создания такого ресурса.



    Type TStrItem = String[39];  { 39 символов + байт длины -> 40 байтов } TDataArray= Array [0..7, 0..24] of TStrItem;
Const Data : TDataArray = ( ('..', ...., '..' ),  { 25 строк на строку } ...                   { 8 таких строк } ('..', ...., '..' )); { 25 строк на строку }

Данные размещаются в вашем сегменте данных и занимают в нем 8K. Если это слишком много для вашего приложения, поместите реальные данные в ресурс RCDATA. Следующие шаги демонстрируют данный подход. Создайте небольшую безоконную программку, объявляющую типизированную константу как показано выше, и запишите результат в файл на локальный диск:

    Program MakeData; Type TStrItem = String[39];  { 39 символов + байт длины -> 40 байтов } TDataArray= Array [0..7, 0..24] of TStrItem;
Const Data : TDataArray = ( ('..', ...., '..' ),  { 25 строк на строку } ...                   { 8 таких строк } ('..', ...., '..' )); { 25 строк на строку }
Var F: File of TDataArray; Begin Assign( F, 'data.dat' ); Rewrite(F); Write(F, Data); Close(F); End.

Теперь подготовьте файл ресурса и назовите его DATA.RC. Он должен содержать только следующую строчку: DATAARRAY RCDATA "data.dat" Сохраните это, откройте сессию DOS, перейдите в каталог где вы сохранили data.rc (там же, где и data.dat!) и выполните следующую команду: brcc data.rc (brcc32 для Delphi 2.0) Теперь вы имеете файл data.res, который можете подключить к своему Delphi-проекту. Во время выполнения приложения вы можете генерировать указатель на данные этого ресурса и иметь к ним доступ, что и требовалось.

    { в секции interface модуля  } Type TStrItem = String[39];  { 39 символов + байт длины -> 40 байтов } TDataArray= Array [0..7, 0..24] of TStrItem; PDataArray= ^TDataArray; Const pData: PDataArray = Nil;   { в Delphi 2.0 используем Var }
Implementation {$R DATA.RES}
Procedure LoadDataResource; Var dHandle: THandle; Begin { pData := Nil; если pData - Var } dHandle := FindResource( hInstance, 'DATAARRAY' , RT_RCDATA ); If dHandle <> 0 Then Begin dhandle := LoadResource( hInstance, dHandle ); If dHandle <> 0 Then pData := LockResource( dHandle ); End; If pData = Nil Then { неудача, получаем сообщение об ошибке с помощью WinProcs.MessageBox, без помощи VCL, поскольку здесь код выполняется как часть инициализации программы и VCL возможно еще не инициализирован! } End;
Initialization LoadDataResource; End.

Теперь вы можете ссылаться на элементы массива с помощью синтаксиса pData^[i,j].

- Peter Below [000964]



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