Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.11.2009, 18:08   #1
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию Получить список ресурсов и сохранить их отдельно

Собственно сабж выше. Искал по яндексу и гуглу - "0".
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ

Последний раз редактировалось Alex Cones; 13.11.2009 в 18:22.
Alex Cones вне форума Ответить с цитированием
Старый 13.11.2009, 18:59   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Попробуйте вот это:
Код:
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.
mihali4 вне форума Ответить с цитированием
Старый 13.11.2009, 19:40   #3
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Какой-то странный результат:
Цитата:
...
#4095
#4096
Stock type 10: RT_RCDATA
DVCLAL
PACKAGEINFO
TFORM1
Stock type 12: RT_GROUP_CURSOR
#32761
#32762
#32763
...
Наверное надо немного прояснить... Вот у меня в папке с проектом лежит RESOR.RES. В нем несколько файлов, я НЕ знаю, какие. Мне нужно вытащить из него все файлы и положить их в папку с проектом. (+в StringList запихнуть все их имена). Ищу что-то подобное - но не вижу адекватных примеров.

P.S. И еще одна сложность, наверное в том, что нельзя его подключить заранее - его может и не быть.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ

Последний раз редактировалось Alex Cones; 13.11.2009 в 19:43.
Alex Cones вне форума Ответить с цитированием
Старый 13.11.2009, 19:54   #4
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Получить список файлов из RES
Для этого пункта я вам решение предложил.
Ничего странного в получаемом результате нет.
Цитата:
и посохранять файлы отдельно
Как извлекать ресурсы - рассматривалось многократно.
Вытаскивайте их по одному и сохраняйте.
Или вам готовый код выложить?
Тогда переправлю тему к студентам.
mihali4 вне форума Ответить с цитированием
Старый 13.11.2009, 20:05   #5
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Цитата:
Как извлекать ресурсы - рассматривалось многократно.
Вытаскивайте их по одному и сохраняйте.
Я уже весь форум по словам "RES" и "ресурсов" облазил. Тыкните носом, если не трудно.

Вот нашел что-то:
Код:
procedure ExtractRes(ResType, ResName, ResNewName : String);
var Res : TResourceStream;
begin
  Res := TResourceStream.Create(Hinstance, Resname, Pchar(ResType));
  Res.SavetoFile(ResNewName);
  Res.Free;
end;

{Вызов такой ExtractRes('MP3FILE', 'MUS', '_MUS.MP3');  }


procedure TForm1.Button2Click(Sender: TObject);
begin
ExtractRes('BITMAP','FILE1','_BIT.bmp');
end;
Но после нажатия батона выскакивает ошибка: "Resource FILE1 not found". Не смотря на то, что ресурсный файл я подключил.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ

Последний раз редактировалось Alex Cones; 13.11.2009 в 20:11.
Alex Cones вне форума Ответить с цитированием
Старый 13.11.2009, 20:21   #6
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию

Пробовал найти что то поиском по форуму - в основном ссылаются на
RESTORATOR. Может это поможет?http://www.programmersforum.ru/searc...earchid=414927
И не сомневайся даже ... отдых - кайф, работа - лажа!
DeKot вне форума Ответить с цитированием
Старый 13.11.2009, 20:22   #7
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

10 букаффф
Цитата:
Извините, нет совпадений. Попробуйте указать другие ключевые слова.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 13.11.2009, 20:59   #8
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Но после нажатия батона выскакивает ошибка: "Resource FILE1 not found". Не смотря на то, что ресурсный файл я подключил.
У меня с моим проектом все нормально работает.
Приведите полностью ваш "странный" результат из п.3.

З.Ы. Кстати, тип ресурса у вас указан неверно. Должно быть RT_BITMAP.
mihali4 вне форума Ответить с цитированием
Старый 13.11.2009, 21:02   #9
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Код:
Stock type 1: RT_CURSOR
  #1
  #2
  #3
  #4
  #5
  #6
  #7
Stock type 2: RT_BITMAP
  BBABORT
  BBALL
  BBCANCEL
  BBCLOSE
  BBHELP
  BBIGNORE
  BBNO
  BBOK
  BBRETRY
  BBYES
  FILE1
  PREVIEWGLYPH
Stock type 3: RT_ICON
  #1
Stock type 5: RT_DIALOG
  DLGTEMPLATE
Stock type 6: RT_STRING
  #4081
  #4082
  #4083
  #4084
  #4085
  #4086
  #4087
  #4088
  #4089
  #4090
  #4091
  #4092
  #4093
  #4094
  #4095
  #4096
Stock type 10: RT_RCDATA
  DVCLAL
  PACKAGEINFO
  TFORM1
Stock type 12: RT_GROUP_CURSOR
  #32761
  #32762
  #32763
  #32764
  #32765
  #32766
  #32767
Stock type 14: RT_GROUP_ICON
  MAINICON
Stock type 16: RT_VERSION
  #1
Successful
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 13.11.2009, 21:14   #10
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Ну, теперь осталось написать
Код:
ExtractRes('RT_BITMAP','FILE1','_BIT.bmp');
mihali4 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пытаюсь получить список процессов... Flammpanzer Win Api 8 07.09.2009 21:00
Получить список файлов и папок. gusluk Общие вопросы Delphi 3 10.03.2009 12:49
Как из TDBDateTimeEditEh получить отдельно день, месяц и год? HIC БД в Delphi 2 31.10.2008 17:24
Получить список папок Иллидан Общие вопросы Delphi 1 22.03.2008 15:24