Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Ресурсы + Delphi = Проблема

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Первый вопрос] >> Ресурсы + Delphi = Проблема
Имя
Сообщение << Старые топики   Новые топики >>
Ресурсы + Delphi = Проблема - 2009-09-26 19:18:05.320000   
BorisHolub

Сообщений: 1
Оценки: 0
Присоединился: 2009-09-26 19:08:19.696666
Здравствуйте! Есть проблема - немогу решить, прошу помощи.
Есть код на дельфи для смены иконки:

&nbsp; TNewHeader = record &nbsp;&nbsp;&nbsp; idReserved:WORD; &nbsp;&nbsp;&nbsp; idType:WORD; &nbsp;&nbsp;&nbsp; idCount:WORD; &nbsp; end; &nbsp; TResDirHeader = packed record &nbsp;&nbsp;&nbsp; bWidth:Byte; &nbsp;&nbsp;&nbsp; bHeight:Byte; &nbsp;&nbsp;&nbsp; bColorCount:Byte; &nbsp;&nbsp;&nbsp; bReserved:Byte; &nbsp;&nbsp;&nbsp; wPlanes:WORD; &nbsp;&nbsp;&nbsp; wBitCount:WORD; &nbsp;&nbsp;&nbsp; lBytesInRes:Longint; &nbsp; end; &nbsp; TIconFileResDirEntry = packed record &nbsp;&nbsp;&nbsp; DirHeader:TResDirHeader; &nbsp;&nbsp;&nbsp; lImageOffset:Longint; &nbsp; end; &nbsp; TIconResDirEntry = packed record &nbsp;&nbsp;&nbsp; DirHeader:TResDirHeader; &nbsp;&nbsp;&nbsp; wNameOrdinal:WORD; &nbsp; end; &nbsp; PIconResDirGrp = ^TIconResDirGrp; &nbsp; TIconResDirGrp = packed record &nbsp;&nbsp;&nbsp; idHeader:TNewHeader; &nbsp;&nbsp;&nbsp; idEntries:array[0..0] of TIconResDirEntry; &nbsp; end; &nbsp; PIconFileResGrp = ^TIconFileResDirGrp; &nbsp; TIconFileResDirGrp = packed record &nbsp;&nbsp;&nbsp; idHeader:TNewHeader; &nbsp;&nbsp;&nbsp; idEntries:array[0..0] of TIconFileResDirEntry; &nbsp; end; ... procedure SetAppIcon(FileName,IconFile,ResName:string); var I,FileGrpSize,IconGrpSize:Integer; Group:Pointer; Header:TNewHeader; FileGrp:PIconFileResGrp; IconGrp:PIconResDirGrp; Icon:TIcon; Stream:TMemoryStream; hUpdateRes:THandle; begin &nbsp;hUpdateRes:=BeginUpdateResource(PChar(FileName), True); &nbsp;Icon:=TIcon.Create; &nbsp;Icon.LoadFromFile(IconFile); &nbsp;Stream:=TMemoryStream.Create; &nbsp; try &nbsp;&nbsp; Icon.SaveToStream(Stream); &nbsp; finally &nbsp;&nbsp; Icon.Free; &nbsp; end; &nbsp;Stream.Position:=0; &nbsp;Stream.Read(Header, SizeOf(Header)); &nbsp;FileGrpSize := SizeOf(TIconFileResDirGrp) + (Header.idCount - 1) * SizeOf(TIconFileResDirEntry); &nbsp;IconGrpSize := SizeOf(TIconResDirGrp) + (Header.idCount - 1) * SizeOf(TIconResDirEntry); &nbsp;GetMem(FileGrp, FileGrpSize); &nbsp;GetMem(IconGrp, IconGrpSize); &nbsp;Stream.Position:=0; &nbsp;Stream.Read(FileGrp^, FileGrpSize); &nbsp;Group:=nil; &nbsp; try &nbsp;&nbsp; for I:=0 to FileGrp^.idHeader.idCount - 1 do &nbsp;&nbsp;&nbsp; begin &nbsp;&nbsp;&nbsp;&nbsp; with IconGrp^ do &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; idHeader:=FileGrp^.idHeader; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; idEntries[i].DirHeader:=FileGrp^.idEntries[i].DirHeader; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; idEntries[i].wNameOrdinal:=I; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; with FileGrp^.idEntries[i] do &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Stream.Seek(lImageOffset, soFromBeginning); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ReallocMem(Group, DirHeader.lBytesInRes); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Stream.Read(Group^, DirHeader.lBytesInRes); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; UpdateResource(hUpdateRes,RT_ICON,PChar(MakeIntResource(I)), 0, Group, DirHeader.lBytesInRes); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end; &nbsp;&nbsp;&nbsp; end; &nbsp; UpdateResource(hUpdateRes,RT_GROUP_ICON, PChar(ResName), 0, IconGrp, IconGrpSize); &nbsp; EndUpdateResource(hUpdateRes, False); &nbsp;&nbsp; finally &nbsp;&nbsp;&nbsp; Stream.Free; &nbsp;&nbsp;&nbsp; FreeMem(FileGrp); &nbsp;&nbsp;&nbsp; FreeMem(IconGrp); &nbsp;&nbsp;&nbsp; FreeMem(Group); &nbsp;&nbsp; end; end;
Проблема вот в чем - если эти кодом менять иконку - ресурс "VersionInfo" удаляется, т.е. после смены в ЕХЕшнике остается только иконка, а все остальное - сносится.
Крутил-вертел код, смотрел в МСДН про апи - все-равно не могу понять, что, где и как нужно подправить. Прошу помощи!
Post #: 1
Страниц:  [1]
Все форумы >> [Первый вопрос] >> Ресурсы + Delphi = Проблема







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.