Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как получить список всех ресурсов программы с их типами ? [D7]


Тем ©   (2005-01-02 02:45:00) 

Нужно, чтобы при добавлении ещё одного ресурса не нужно было корректировать код. Вроде это можно как-то сделать через энумерацию ресурсов. Но как ? У кого нибудь есть пример кода, как получить в СтрингЛист список всех ресурсов ?


Adder   (2005-01-02 04:05:00) [1]

Есть код, получающий список ресурсов в ListView -) Переделать, думаю, не сложно


unit Unit4;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 StdCtrls, ComCtrls, ExtCtrls;

type
 TForm1 = class(TForm)
   ListView1: TListView;
   Panel1: TPanel;
   Button1: TButton;
   Edit1: TEdit;
   Label1: TLabel;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;
 ListItem:TListItem;

 // Declare callback functions.
Function EnumTypesFunc(
   hModule:THANDLE;
   lpType:LPTSTR;
   lParam:LONGINT):LONGBOOL;stdcall;

Function EnumNamesFunc(
   hModule:THANDLE;
   lpType:LPCTSTR;
   lpName:LPTSTR;
   lParam:LONGINT ):LONGBOOL;stdcall;

implementation

{$R *.DFM}
Function EnumTypesFunc(
   hModule:THANDLE;// module handle
   lpType:LPTSTR;// address of resource type
   lParam:LONGINT):LONGBOOL;stdcall;
var Name:string;
begin
     ListItem :=Form1.ListView1.Items.Add;
   if (DWORD(lpType) and $FFFF0000)<>0 then
     begin
     ListItem.Caption:=lpType;
     ListItem.SubItems.Add('')
     end
   else
     begin

     ListItem.Caption:=IntToStr(DWORD(lpType));
     case DWORD(lpType) of
        {RT_NEWRESOURCE}$2000: Name:='RT_NEWRESOURCE';
        {RT_ERROR}$7FFF:       Name:='RT_ERROR';
        {RT_CURSOR}1:          Name:='RT_CURSOR';
        {RT_BITMAP}2:          Name:='RT_BITMAP';
        {RT_ICON}3:            Name:='RT_ICON';
        {RT_MENU}4:            Name:='RT_MENU';
        {RT_DIALOG}5:          Name:='RT_DIALOG';
        {RT_STRING}6:          Name:='RT_STRING';
        {RT_FONTDIR}7:         Name:='RT_FONTDIR';
        {RT_FONT}8:            Name:='RT_FONT';
        {RT_ACCELERATORS}9:    Name:='RT_ACCELERATORS';
        {RT_RCDATA}10:         Name:='RT_RCDATA';
        {RT_MESSAGETABLE}11:   Name:='RT_MESSAGETABLE';
        {RT_GROUP_CURSOR}12:   Name:='RT_GROUP_CURSOR';
        {RT_GROUP_ICON}14:     Name:='RT_GROUP_ICON';
        {RT_VERSION}16:        Name:='RT_VERSION';
        {RT_NEWBITMAP}$2002:   Name:='RT_NEWBITMAP(RT_BITMAP|RT_NEWRESOURCE)';
        {RT_NEWMENU}$2004:     Name:='RT_NEWMENU(RT_MENU|RT_NEWRESOURCE)';
        {RT_NEWDIALOG}$2005:   Name:='RT_NEWDIALOG(RT_DIALOG|RT_NEWRESOURCE)';
      else Name:='';
     end;
     ListItem.SubItems.Add(Name)
     end;
 EnumResourceNames(hModule,
       lpType,
       ENUMRESNAMEPROC(@EnumNamesFunc),
       0);
Result:=true;
end;

Function EnumNamesFunc(
   hModule:THANDLE;
   lpType:LPCTSTR;
   lpName:LPTSTR;
   lParam:LONGINT ):LONGBOOL;stdcall;

begin
     ListItem :=Form1.ListView1.Items.Add;
     ListItem.SubItems.Add('');
   if (DWORD(lpName) and $FFFF0000)<>0 then
     begin
     ListItem.SubItems.Add(lpName)
     end
   else
     begin
     ListItem.SubItems.Add(IntToStr(DWORD(lpName)))
     end;
     Result:=true;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
ModuleHandle:THandle;
begin
try
ModuleHandle := LoadLibraryEx(pchar(Edit1.Text), 0, LOAD_LIBRARY_AS_DATAFILE);
EnumResourceTypes(modulehandle,
        ENUMRESTYPEPROC(@EnumTypesFunc),  // callback function
        0);                              // extra parameter
finally
FreeLibrary(ModuleHandle);
CloseHandle(ModuleHandle);
end;
end;

end.


Наверх

Титульная страница Поиск, карта сайта Написать письмо