![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#16
|
|||
|
|||
|
Может у Тебя какие исходники остались??? Просто тогда получается что Resouse Tuner в папке GroupIcon хранит придуманный ресурс.. Я просто в это не верю!!! В Delphi тогда не было бы константы RT_GROUP_ICON... ИМХО Мне кажется что GroupIcon это как индексация иконок!!! Может поможешь???
|
|
#17
|
||||
|
||||
|
Цитата:
Про придуманный ресурс - это уже бред, странные Вы выоды делаете, я итак уже все разжевал и речи о вымышленных ресурсах вообще не шла. RT_ICON - это обозначения ресурса со значком, иконкой, RT_GROUP_ICON - это обозначение папки или директории, в который эти самые иконки и находятся. И вообще, стандартный пример редактора ресурсов, по крайней мере виевера, есть в стандартной поставке Д7 в папке Демос, если мне память не изменяет, но точно есть. Еще есть опенсорс редактор ресурсов на Д2010 вроде, называется XN Resource Editor. |
|
#18
|
|||
|
|||
|
Исходник не рабочий... Он под delphi 2006 у меня 2010... Если ты так хорошо разбираешься в ресурсах, может все таки напишешь пару строк как прочитать ресурс в папке GroupIcon... И что бы в мемо... В долгу не останусь!!!
![]() |
|
#19
|
||||
|
||||
|
Код:
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.
|
|
#20
|
|||
|
|||
Самое интерестное что с этим я разобрался только что... Спасибо конечно... Список ресурсов я получил... А как теперь прочесть ресурс в папке GroupIcon и вывести в Memo??? Тоесть я получаю имя папки - GroupIcon.. Потом получаю имя первого ресурса в папке GroupIcon, а как открыть его?? Мучаюсь... Вот в чем был с самого начала вопрос!!! ![]() |
|
#21
|
||||
|
||||
|
Цитата:
Надо учиться правильно задавать вопросы. А вообще теперь, как я помню, надо загрузить по указателю на ресурс данные в стрим, а оттуда читать компоном TImage или TIcon. Поиск рулит. |
|
#22
|
|||
|
|||
|
Хочу готовый пример!!!
![]() |
|
#23
|
|||
|
|||
|
Romix, поиск творит чудеса, например, здесь приведен хороший пример, который показывает как извлекать значок из одного приложения и подстановки его вместо имеющегося в другой исполняемый файл ...
![]() |
|
#24
|
||||
|
||||
|
Цитата:
![]() |
|
#25
|
|||
|
|||
|
Давайте я расставлю все точки над "И"... Как менять иконку я разобрался, но вот поменять на нужную немогу... Когда открываю экзешник в Resource Tunere то там есть папка GroupIcon в папке GroupIcon есть ресурс со списком иконок которые есть в приложении... Список выглядит так:
Цитата:
Код:
var hResLoad, hRes: HRSRC; hExe, hUpdateRes: THandle; lpResLock: PChar; begin // Загружаем источник иконки как библиотеку (с ресурсами) hExe := LoadLibrary(PChar(SourceExe)); if hExe = 0 then Exit; try // Ищем в источнике главную иконку hRes := FindResource(hExe, MakeIntResource(8), RT_ICON); if hRes = 0 then Exit; // Загружаем иконку hResLoad := LoadResource(hExe, hRes); if hResLoad = 0 then Exit; // Лочим ресурс иконки. Получаем указатель не ее данные. lpResLock := LockResource(hResLoad); ![]() |
|
#26
|
|||
|
|||
|
Вот чего я хочу добиться!!!
|
|
#27
|
||||
|
||||
|
Цитата:
Слушай, как я понял по твоему рисунку, то у тебя в экзешники ВСЕГО 2 ЗНАЧКА, а так как они многостраничные, то они содержат В СЕБЕ несколько значков разного разрешения (сорри, если неправильно выразился), так вот, по сути тебе надо извлечь нужный значок и с помощью классов для работы со значками выдрать значок нужного разрешения и уже потом вставить в нужный экзешник, не спорю что наверно можно сделать все проще, но я пока незнаю как. Классы для работы со значками есть в самой Делфе вроде или приглядись к юнитам по ссылке чела выше. И вообще не совсем понимаю зачем те нужен определенного размера значок, ведь ось, в зависимости от текущего отображения в папке показывает соотв. размера значок, так вот, например в 7 такой твой значок при определенных условиях будет смотреться коряво. Последний раз редактировалось Vayrus, 16.07.2010 в 12:51. |
|
#28
|
|||
|
|||
|
Romix, пример, который приведен мной выше содержит требуемые тебе методы ... т.е. манипулируя свойствами класса TAdvancedIcon можно получать доступ к отдельным элементам сложных значков ...
|
|
#29
|
|||
|
|||
|
Vayrus... Ты предложил хороший код... Но не мог бы ты помочь?? Выдернуть из exe толькр список ресурсов который находится в папке GROUP_ICON... Только из неё.. И нечего лишнего!!! Заранее благодарен!!
P.S. Я конечно понимаю... Можно из всего списка выделить только GROUP_ICON... Но тут важна скорость... Просто что бы с самого начала перебрала ресурсы из GROUP_ICON... Ничего лишнего... Последний раз редактировалось Romix, 19.07.2010 в 14:02. |
|
#30
|
||||
|
||||
|
Цитата:
OK, жди ЗЫ ЗЗЗЗЗЗЗЗЗЗЗЗЗЗЗЗЗЗ |