Карта сайтаСсылкиКонтакты

Как получить все имена ресурсов, загруженных в приложении

PDF Печать
Статьи

Чтобы получить список ресурсов приложения, напишем простое приложение.

Поместите компоненты TMemo и TButton на форму и напишите код:


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.

Источник: http://www.swissdelphicenter.ch/en/tipsindex.php


 

Добавить комментарий


Защитный код
Обновить