Delphi: данные цикла в файле ресурсов

Мне нужно сделать цикл внутри файла ресурсов и загрузить все файлы BMP с помощью следующего оператора; bBitmap.Handle := LoadBitmap(hInstance, 'IMAGE_NAME');

Как мне зациклить файл ресурса; я должен сделать обычную операцию ввода-вывода и рассматривать его как текстовый файл? Я могу прочитать каждую строку и создать список имен растровых изображений, чем в отдельном цикле выполнить приведенный выше оператор для загрузки растровых изображений. Или в библиотеках Delphi есть встроенный метод для выполнения этой операции?

FILE_NAME_1 BITMAP "btnFile1.bmp"
FILE_NAME_2 BITMAP "btnFile2.bmp"
....

2 ответа

Решение

EnumResourceNames, предложенный Кеном Уайтом, работал отлично, и его довольно просто реализовать. Не могу принять это как ответ, потому что он оставил только комментарий.

Вот мое решение, используя предложение;

Внутри процедуры, в которую я загружаю свои изображения, я добавил следующие строки кода;

var
  returnVal:bool;
  hMdl: HMODULE;
begin
  hMdl:=LoadLibraryEX('FileNameWithResources.exe',0,LOAD_LIBRARY_AS_DATAFILE);
  // I load bitmaps so RT_BITMAP parameter is chosen
  returnVal:=EnumResourceNames(hMdl,RT_BITMAP,@Callback,0);

Функция @callback возвращает логическое значение. Вы должны поместить это на уровне класса, перед реализацией кода класса. Там нет декларации для этого. Мой класс одноэлементный, поэтому я вызываю процедуру уровня класса для добавления значений в TStringList. Не возвращайте false, если у вас более сложный оператор if и вы хотите все зациклить. Если вы в любое время вернете false, вызовы этой функции завершатся, и вы не получите остальные имена ресурсов.

function Callback(handle:THandle;ResType:PChar;ResName:Pchar;long:Lparam):bool;stdcall;
var
      tempString: string;    
begin  
      tempString := resname;
      if length(tempString) > 0 then begin
        MyClassName.AddToResourceNames(tempString);
        result := true;
      end else
        result := false;
end;

Я предлагаю вам взглянуть на демонстрацию Resource Explorer, включенную в вашу установку Delphi. Вы можете найти его в "c:\Users\Public\Documents\RAD Studio\9.0\Samples\Delphi\VCL\resXplor\resxplor.dpr" (настроить для другого пути / версии Delphi). В файле ExeImage.pas есть классы, которые позволяют легко передавать ресурсы в TPicture и т. Д.

Другие вопросы по тегам