Работа с ресурсами
Code: |
function LoadBitmap256(hInstance: HWND; lpBitmapName: PChar): HBITMAP; var hPal, hRes, hResInfo: THandle; pBitmap: PBitmapInfo; nColorData: Integer; pPalette: PLogPalette; X: Integer; hPalette: THandle; begin
hResInfo := FindResource(hInstance, lpBitmapName, RT_BITMAP); hRes := LoadResource(hInstance, hResInfo); pBitmap := Lockresource(hRes); nColorData := pBitmap^.bmiHeader.biClrUsed;
hPal := GlobalAlloc(GMEM_MOVEABLE, (16 * nColorData));
{ hPal := GlobalAlloc( GMEM_MOVEABLE, ( SizeOf( LOGPALETTE ) + (nColorData * SizeOf( PALETTEENTRY )));} pPalette := GlobalLock(hPal); pPalette^.palVersion := $300; pPalette^.palNumEntries := nColorData;
for x := 0 to nColorData do begin pPalette^.palPalentry[X].peRed := pBitmap^.bmiColors[X].rgbRed; pPalette^.palPalentry[X].peGreen := pBitmap^.bmiColors[X].rgbGreen; pPalette^.palPalentry[X].peBlue := pBitmap^.bmiColors[X].rgbBlue; end;
hPalette := CreatePalette(pPalette^); GlobalUnlock(hRes); GlobalUnlock(hPal); GlobalFree(hPal);
end;
end. |
- Подробности
- Родительская категория: Windows
- Категория: Работа с ресурсами
Code: |
procedure TForm1.Button1Click(Sender: TObject); {©Drkb v.3} var AModule: THandle; begin AModule := LoadLibrary('Images.dll'); image1.Picture.BitMap.LoadFromResourceName(AModule, 'StartMine'); FreeLibrary(AModule); end; |
- Подробности
- Родительская категория: Windows
- Категория: Работа с ресурсами
Если у вас есть исходный файл (.радиоуправляемый), то вы можете просто перекомпилировать .RC файл в a .файл РЭС с использованием Борланд компилятор командной строки ресурсов (brcc32.exe-файл), расположенный в Делфи/с++ Строителей bin директории. Если только есть .res-файл, чтобы работать с, необходимо использовать качественный компилятор ресурсов/декомпилятор ресурсов, таких как Мастерская Borland для. Версии Borland Resource Workshop позже 4.5 могут извлекать, компилировать и декомпилировать как 16, так и 32-разрядные файлы ресурсов из различных источников, включая .РЭС. ,исполняемый. ,библиотеки dll, drv, а .cpl файлы. Программе Borland версии семинара ресурса 4.5 судно с Борланд рад обновления линейки продуктов
- Подробности
- Родительская категория: Windows
- Категория: Работа с ресурсами
Такой вот совет пришел ко мне с рассылкой "Ежедневная рассылка сайта Мастера DELPHI", думаю многим будет интересно.
Решить эту задачу нам поможет функция function ExtractIcon(hInstance, filename, iconindex):integer где hinstance - глобальная переменная приложения, ее изменять не надо. Тип integer.
filename - имя программы или DLL из которой надо извлекать иконки. Тип pchar. iconindex - порядковый номер иконки в файле (начинается с 0). В одном файле может находится несколько иконок. Тип integer.
Функция находится в модуле ShellApi, так что не забудьте подключить его в uses. Если эта функция возвратит ноль, значит иконок в файле нет.
Данная функция возвращает handle иконки, поэтому применять ее нужно так: Image1.Picture.Icon.Handle:=ExtractIcon(hInstance, pchar(paramstr(0)), 0);
данное объявление нарисует в Image'e картинку вашего приложения.
Автор: Михаил Христосенко
- Подробности
- Родительская категория: Windows
- Категория: Работа с ресурсами
Сохранить файл в ресурсе программы на этапе компилляции можно выполнив следующие шаги:
1) Поставить себе RxLib
2) Появится в меню "Project" дополнительный пункт меню "Resources"
3) Открой его , создай новый ресурс "User Data", в него загрузи нужный файл, измени имя ресурса на что-нибудь типа 'MyResName'.
Теперь при компилляции проэкта в exe файл будет прикомпиллирован ваш файл в виде ресурса. Извлечь его на этапе выполнения можно следующим образом:
- Подробности
- Родительская категория: Windows
- Категория: Работа с ресурсами
Code: |
type TForm1 = class(TForm) Button1: TButton; Memo1: TMemo; procedure Button1Click(Sender: TObject); private end;
var Form1: TForm1;
implementation
{$R *.dfm}
function enumResNamesProc(module: HMODULE; restype, resname: PChar; list: TStrings): Integer; stdcall; begin if HiWord(Cardinal(resname)) <> 0 then list.Add(' ' + resname) else list.Add(Format(' #%d', [loword(Cardinal(resname))])); Result := 1; end;
Function StockResourceType(restype: PChar): string; const restypenames: Array [1..22] of String = ( 'RT_CURSOR', // = MakeIntResource(1); 'RT_BITMAP', // = MakeIntResource(2); 'RT_ICON', // = MakeIntResource(3); 'RT_MENU', // = MakeIntResource(4); 'RT_DIALOG', // = MakeIntResource(5); 'RT_STRING', // = MakeIntResource(6); 'RT_FONTDIR',// = MakeIntResource(7); 'RT_FONT', // = MakeIntResource(8); 'RT_ACCELERATOR',// = MakeIntResource(9); 'RT_RCDATA', // = MakeIntResource(10); 'RT_MESSAGETABLE',// = MakeIntResource(11); // DIFFERENCE = 11; 'RT_GROUP_CURSOR',// = MakeIntResource(DWORD(RT_CURSOR +7DIFFERENCE)); 'UNKNOWN', // 13 not used 'RT_GROUP_ICON', // = MakeIntResource(DWORD(RT_ICON +DIFFERENCE)); 'UNKNOWN', // 15 not used 'RT_VERSION', // = MakeIntResource(16); 'RT_DLGINCLUDE', // = MakeIntResource(17); 'UNKNOWN', 'RT_PLUGPLAY', // = MakeIntResource(19); 'RT_VXD', // = MakeIntResource(20); 'RT_ANICURSOR', // = MakeIntResource(21); 'RT_ANIICON' // = MakeIntResource(22); ); var resid: Cardinal absolute restype; begin if resid in [1..22] then Result := restypenames[resid] else Result := 'UNKNOWN'; end;
function enumResTypesProc(module: HMODULE; restype: PChar; list: TStrings): Integer; stdcall; begin if HiWord(Cardinal(restype)) <> 0 then list.Add(restype) else list.Add(Format('Stock type %d: %s', [LoWord(Cardinal(restype)), StockResourcetype(restype)])); EnumResourceNames(module, restype, @enumResNamesProc, Integer(list)); Result := 1; end;
procedure TForm1.Button1Click(Sender: TObject); begin memo1.Clear; if not EnumResourceTypes(hinstance, @enumResTypesProc, Integer(memo1.Lines)) then memo1.Lines.Add(Format('GetLastError= %8.8x', [GetLastError])) else memo1.Lines.Add('Successful'); end;
end. |
- Подробности
- Родительская категория: Windows
- Категория: Работа с ресурсами
FindResource + LoadResource + LockResource
Определяем размеры картинки хранящейся в ресурсах:
- Подробности
- Родительская категория: Windows
- Категория: Работа с ресурсами
1)Создайте текстовый файл с расширением ".rc".Имя этого файла должно отличаться
от имени файла - пректа или любого модуля проекта.
Файл должен содержать строку вроде: MYJPEG JPEG C: \DownLoad\MY.JPG
где:
"MYJPEG" имя ресурса
"JPEG" пользовательский тип ресурса
"C: \DownLoad\MY.JPG" руть к JPEG файлу.
Пусть например rc - файл называется "foo.rc"
Запустите BRCC32.exe(Borland Resource CommandLine Compiler) - программа находится
в каталоге Bin Delphi / C + +Builder'а - передав ей в качестве параметра полный путь
к rc - файлу.
В нашем примере:
- Подробности
- Родительская категория: Windows
- Категория: Работа с ресурсами
Данный метод обходит проблемы, связанные с Image Editor.
В каталоге \DELPHI\BIN имеется утилита коммандной строки, названная BRCC.EXE, позволяющая создавать из файлов, содержащих изображения/иконки, RES-файлы, в обход Image Editor. (Тем не менее, Image Editor хорошо работает при создании или редактировании файлов с изображениями или курсорами. Проблемой был импорт.)
Resource File Compiler описан в справке Windows API help в главе Windows Tools (где вы также можете прочесть о RC.EXE как о BRCC.EXE!). Это сэкономит вам какое-то время!
Сначала, используя Блокнот, создайте файл определения ресурса (Resource Definition) (текстовый) с именем, скажем, MYRES.RC (с обязательным расширением RC). Разместите, каждую на отдельной строке, ссылки на изображения, иконки, и т.п., которые вы хотели бы включить в RES-файл, например:
- Подробности
- Родительская категория: Windows
- Категория: Работа с ресурсами
У вас есть исходный код VCL? Если да, то в этом случае ее можно всю перекомпилировать, добавив каталог к вашему библиотечному пути (Library path) в опциях среды (Environment Options | Library). Я думаю это нужно сделать, чтобы отделаться от этой ошибки. При другом способе необходимо вычислить вызывающую проблему директиву $R, временно удалить ее, и осуществить перекомпиляцию. Временно выключить директиву $R можно добавлением '.' перед $ (но это не единственный путь выключить ее).
- Подробности
- Родительская категория: Windows
- Категория: Работа с ресурсами
Вы можете использовать Борланд компилятор командной строки ресурсов (BRCC.EXE и BRCC32.EXE), который поставляется с Delphi и C++ Builder, или в WYSIWYG редактор ресурсов, например ресурсов Борланд Мастерская 5.0, который поставляется с Борланд рад пакета. Ресурс мастерской 5.0 можно скомпилировать и декомпилировать как в 16, так и 32-битные ресурсы .rc, .res, .exe, .dll, .drv, .vbx, .cpl, .ico,. bmp, .rle, .dlg, fnt, cur.
- Подробности
- Родительская категория: Windows
- Категория: Работа с ресурсами
Страница 1 из 2