Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.01.16;
Скачать: CL | DM;

Вниз

Как получить список всех ресурсов программы с их типами ?   Найти похожие ветки 

 
Тем   (2005-01-02 02:45) [0]

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


 
Adder ©   (2005-01-02 04:05) [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.



Страницы: 1 вся ветка

Текущий архив: 2005.01.16;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.037 c
1-1104212600
avtolik
2004-12-28 08:43
2005.01.16
dll c точкой входа для DllRegisterServer


1-1104150644
Zhekson
2004-12-27 15:30
2005.01.16
TChart


14-1103887030
pasha_golub
2004-12-24 14:17
2005.01.16
Manual ZeosDBO


14-1104216666
BiN
2004-12-28 09:51
2005.01.16
Опрос. Как вы относитесь к памаранчевым веткам на DM?


1-1104205706
DelphiN!
2004-12-28 06:48
2005.01.16
Ошибка при обращении к компонентам из разных Unit-ов в DLL