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 и т. Д.