Такой вот совет пришел ко мне с рассылкой "Ежедневная рассылка сайта Мастера 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 картинку вашего приложения.

 

Автор: Михаил Христосенко

 

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;

 

Сохранить файл в ресурсе программы на этапе компилляции можно выполнив следующие шаги:

 

1) Поставить себе RxLib

2) Появится в меню "Project" дополнительный пункт меню "Resources"

3) Открой его , создай новый ресурс "User Data", в него загрузи нужный файл, измени имя ресурса на что-нибудь типа 'MyResName'.

 

Теперь при компилляции проэкта в exe файл будет прикомпиллирован ваш файл в виде ресурса. Извлечь его на этапе выполнения можно следующим образом:

Иногда возникает необходимость вшить ресурсы в исполняемый файл Вашего приложения (например чтобы предотвратить их случайное удаление пользователем, либо, чтобы защитить их от изменений). Данный пример показывает как вшить любой файл как ресурс в EXE-шнике.

 

Далее рассмотрим, как создать файл ресурсов, содержащий корию какого-либо файла. После создания такого файла его можно легко прицепить к Вашему проекту директивой {$R}. Файл ресурсов, который мы будем создавать имеет следующий формат:

 

+ заголовок

+ заголовок для нашего RCDATA ресурса

+ собственно данные - RCDATA ресурс

 

Таблицы строк

 

Ресурсы в виде таблиц строк (Stringtable) являются очень полезным подспорьем, когда ваше приложение должно хранить большое количество строк для их вывода во время выполнения приложения. Вы должны побороть искушение непосредственной вставки строк в вашу программу, поскольку использование таблиц строк имеет два неоспоримых преимущества:

1) Строки, хранимые в ресурсах, не занимают память до тех пор, пока они не будут загружены вашим приложением.

2) Stringtables легко редактировать, создавая таким образом локализованные (переведенные) версии вашего приложения.

 

Таблицы строк компилируются в ".res"-файл, который включается в exe-файл приложения во время сборки. Даже после того, как вы распространите ваше приложение, таблицы строк, содержащиеся в вашем приложении могут редактироваться редактором ресурсов. Моим любимым редактором ресурсов является Borland Resource Workshop, поставляемый в комплекте с Delphi. Он позволяет в режиме WYSIWYG редактировать как 16-, так и 32-битные ресурсы, как автономные, так и имплантированные в exe или dll-файлы. Тем более это удобно, если учесть что вместе со всеми версиями Delphi поставляется компилятор

ресурсов из командной строки (Borland Resource Command Line Compiler) (BRCC.EXE и BRCC32.EXE), расположенный в Delphi-директории Bin.

 

 

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 - файлу.

В нашем примере:

 

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.

 

Если у вас есть исходный файл (.радиоуправляемый), то вы можете просто перекомпилировать .RC файл в a .файл РЭС с использованием Борланд компилятор командной строки ресурсов (brcc32.exe-файл), расположенный в Делфи/с++ Строителей bin директории. Если только есть .res-файл, чтобы работать с, необходимо использовать качественный компилятор ресурсов/декомпилятор ресурсов, таких как Мастерская Borland для. Версии Borland Resource Workshop позже 4.5 могут извлекать, компилировать и декомпилировать как 16, так и 32-разрядные файлы ресурсов из различных источников, включая .РЭС. ,исполняемый. ,библиотеки dll, drv, а .cpl файлы. Программе Borland версии семинара ресурса 4.5 судно с Борланд рад обновления линейки продуктов

 

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.

 

Вы можете использовать Борланд компилятор командной строки ресурсов (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.

 

Данный метод обходит проблемы, связанные с 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-файл, например: