The Unofficial Newsletter of Delphi Users - by Robert Vivrette

Размещение данных в  EXE

By Alan Lloyd - alanglloyd@aol.com

Перевод Руденко Е.В.   janer@newmail.ru    октябрь  2001 года

 

Создайте текстовый файл (InExe.rc в этом примере, хотя может быть любое имя, отличное от имен файлов вашего проекта ) и разместите в нем  ...

RTFRES     RT_RCDATA     USERS.RTF
... первое имя - это файл для ваших ресурсов, второе - стандартное имя  windows для данных, третье -  имя файла ваших данных. В директориях Delphi найдите файл BRCC32.exe (Borland Resource Code Compiler 32-bit) и запустите его в DOS-окошке, используя имя текстового файла в качестве первого параметра ...
  BRCC32 InExe.RC -v
-v - параметр , обеспечивающий обратную связь с экраном. В результате выполнения команды получим файл  MYRTF.RES.         В файле проекта  .dpr  (View | Project Source) добавится следующая директива  {$R }  ...
{$R INEXE.RES}
Для доступа к ресурсам в вашем коде надо добавить ...
var
  RS : TResourceStream;
begin

  // создание потока ресурсов
  RS := TResourceStream.Create(HInstance, 'RTFRES', 'RT_RCDATA');
  // использование ресурсов
  RichEdit.Lines.LoadFromStream(RS);
  // освобождение потока ресурсов
  RS.Free;
end;
Примечание
  1. Вы можете скопировать файлы в соответствующие директории для доступа к ним  BRCC32.
  2. Используйте заглавные буквы в файле .rc и в именах в программе. Имена ресурсов чувствительны к регистру.
  3. Добавьте столько ресурсов с различными именами в ваш файл .rc, сколько вам требуется. Для доступа к каждому ресурсу используйте отдельный TResourceStream .
  4. Переменная HInstance в Delphi функции обозначает специальный  handle окна Windows для доступа к ресурсам.
  5. Если вы не хотите использовать потоки (streams) так, как описано выше, то можете использовать стандартный код - RS.Seek(), RS.Read() и т.д. Помните, что если вы хотите вторично прочитать или загрузить поток, то вы должны сбросить потоковый указатель вызовом функции ...  RS.Seek(0, soFromBeginning);
  6. Если вы меняете ваш файл ресурсов (InExe.res), то должны перекомпилировать проект , используя  Project | Build All.
Щелкните здесь  для получения кода примера для данной статьи.

Alan Lloyd
 
 Возврат в Tips&Tricks