Вопрос конечно тупой, но сильно не пинайте я новичок в этом. Порога на Ams чем можно прикрепить иконку к ней?
Фасм. Code: section '.rsrc' resource data readable directory RT_ICON, icons,\ RT_GROUP_ICON, group_icons resource icons,\ 1, LANG_NEUTRAL, icon_data resource group_icons,\ 1, LANG_NEUTRAL, main_icon ; Описание одиночной иконки icon main_icon, icon_data, 'имя иконки.ico' Если уже скомпилированная то тогда редактором ресурсов - тем что сказал BrainDeaD или любым другим.
Есть исходник пороги просто даже не знаю в какое место кода вставить этот код.Редактором неполучилось(((. MASM32 Editor в нем как то можно сделать?
создаешь файл с содержимым Code: 1 ICON icon.ico и расширением *.rc icon.ico - твоя иконка Компилируеь его в файл ресурсов Code: rc resfile.rc получится файл *.res линкуешь вместе с основной программой Code: link mainprog.obj resfile.res
Code: unit UExtractIcon; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ShellApi, ExtCtrls, ComCtrls, Buttons; type TFormExtractIcon = class(TForm) BitBtnOpen: TBitBtn; BitBtnSave: TBitBtn; ButtonReLoad: TButton; UpDownIconIndex: TUpDown; OpenDialogIcon: TOpenDialog; SaveDialogIcon: TSaveDialog; ImageIcon: TImage; EditIconIndex: TEdit; LabelIconIndex: TLabel; LabelIcon: TLabel; LabelFileName: TLabel; BevelIcon: TBevel; procedure OpenIconClick(Sender: TObject); procedure SaveIconClick(Sender: TObject); procedure LoadIconFromFile; procedure ButtonReLoadClick(Sender: TObject); procedure EditIconIndexKeyPress(Sender: TObject; var Key: Char); procedure FormActivate(Sender: TObject); private { Private declarations } public { Public declarations } end; var FormExtractIcon: TFormExtractIcon; implementation {$R *.DFM} {ExtractIconResInfo} var Bitmap : TBitmap; IconSave : TIcon; FullDir : String; IconIndex: Word; procedure TFormExtractIcon.LoadIconFromFile; var Pch: array[0..256] of Char; IconExtr: HIcon; begin IconIndex := StrToInt(EditIconIndex.Text); FullDir := OpenDialogIcon.FileName; StrPCopy(Pch,FullDir); IconExtr := ExtractAssociatedIcon(hInstance,Pch,IconINdex); IconSave.Handle := IconExtr; Bitmap.Width := IconSave.Width; Bitmap.Height := IconSave.Height; Bitmap.Canvas.Draw(0, 0, IconSave); ImageIcon.Picture.Icon := IconSave; BitBtnSave.Enabled := True; ButtonReLoad.Enabled := True; LabelFileName.Caption := 'Файл: '+ExtractFileName(FullDir); SaveDialogIcon.InitialDir := ExtractFilePath(FullDir); SaveDialogIcon.FileName := ''; end; procedure TFormExtractIcon.OpenIconClick(Sender: TObject); begin if OpenDialogIcon.Execute then LoadIconFromFile; end; procedure TFormExtractIcon.SaveIconClick(Sender: TObject); const SaveBoolean:Boolean = False; begin {SaveDialogIcon.FileName := ChangeFileExt(ExtractFileName(FullDir),'');} if SaveDialogIcon.Execute then begin case SaveDialogIcon.FilterIndex of 1: IconSave.SaveToFile(ChangeFileExt(SaveDialogIcon.FileName,'.ico')); 2: Bitmap.SaveToFile(ChangeFileExt(SaveDialogIcon.FileName,'.bmp')); end; SaveDialogIcon.InitialDir := ExtractFilePath(SaveDialogIcon.FileName); end; end; procedure TFormExtractIcon.ButtonReLoadClick(Sender: TObject); begin LoadIconFromFile; end; procedure TFormExtractIcon.EditIconIndexKeyPress(Sender: TObject; var Key: Char); begin if not (Key in ['0'..'9',#8]) then key := #0; end; procedure TFormExtractIcon.FormActivate(Sender: TObject); begin // IconSave.Free; IconSave := TIcon.Create; // Bitmap.Free; Bitmap := TBitmap.Create; end; end. Так тащи иконки, дальше пихай в exe
Включаешь Resource Hacker открываешь нужный *.exe файл находишь в проге папку Icon Group, открываешь её В раскрывшемся списке появится список папок, иконка проги должна бытьв первой из этих папок. После тогго как нашёл иконку, нажимаешь на этот файлик с иконкой правой кнопкой мыши и выбераешь "Заменить ресурс", в появившемся окошке нажимаешь "открыть файл с значком..". После этого, выбераешь иконку нужную. Нажимаешь заменить. Далее нажимаешь Файл -> Сохранить. The end. ^Для замены иконки проги >_< ^
я ж говорю reshacker. есть ещё уйма прог, которые автоматически меняют иконку, но работают они или нет, сказать не могу, пробуй сам. смотри здесь
Code: unit IconChanger; interface uses Windows, Classes, SysUtils, Graphics; procedure ChangeIcon(FileName, IconFile, ResName:string); implementation resourcestring SInvalidFileName = 'Invalide filename %s'; type TNewHeader = record idReserved:WORD; idType:WORD; idCount:WORD; end; TResDirHeader = packed record bWidth:Byte; bHeight:Byte; bColorCount:Byte; bReserved:Byte; wPlanes:WORD; wBitCount:WORD; lBytesInRes:Longint; end; TIconFileResDirEntry = packed record DirHeader:TResDirHeader; lImageOffset:Longint; end; TIconResDirEntry = packed record DirHeader:TResDirHeader; wNameOrdinal:WORD; end; PIconResDirGrp = ^TIconResDirGrp; TIconResDirGrp = packed record idHeader:TNewHeader; idEntries:array[0..0] of TIconResDirEntry; end; PIconFileResGrp = ^TIconFileResDirGrp; TIconFileResDirGrp = packed record idHeader:TNewHeader; idEntries:array[0..0] of TIconFileResDirEntry; end; TBeginUpdateRes=function(pFileName: PChar; bDeleteExistingResources: BOOL): THandle; stdcall; TUpdateRes=function(hUpdate: THandle; lpType, lpName: PChar; wLanguage: Word; lpData: Pointer; cbData: DWORD): BOOL; stdcall; TEndUpdateRes=function(hUpdate: THandle; fDiscard: BOOL): BOOL; stdcall; function MakeLangID:WORD; begin Result:=(SUBLANG_ENGLISH_US shl 10) or LANG_ENGLISH; end; procedure CheckFileName(Value:string); begin if (Trim(Value) = EmptyStr) or (not FileExists(Value)) then raise Exception.Create(Format(SInvalidFileName, [Value])); end; procedure ChangeIcon(FileName, IconFile, ResName:string); var I:Integer; Group:Pointer; Header:TNewHeader; FileGrp:PIconFileResGrp; IconGrp:PIconResDirGrp; IconGrpSize, FileGrpSize:Integer; Icon:TIcon; Stream:TMemoryStream; hUpdateRes:THandle; begin CheckFileName(FileName); hUpdateRes:=BeginUpdateResource(PChar(FileName), False); Win32Check(hUpdateRes <> 0); CheckFileName(IconFile); Icon:=TIcon.Create; Icon.LoadFromFile(IconFile); Stream:=TMemoryStream.Create; try Icon.SaveToStream(Stream); finally Icon.Free; end; Stream.Position:=0; Stream.Read(Header, SizeOf(Header)); FileGrpSize := SizeOf(TIconFileResDirGrp) + (Header.idCount - 1) * SizeOf(TIconFileResDirEntry); IconGrpSize := SizeOf(TIconResDirGrp) + (Header.idCount - 1) * SizeOf(TIconResDirEntry); GetMem(FileGrp, FileGrpSize);GetMem(IconGrp, IconGrpSize); Stream.Position:=0; Stream.Read(FileGrp^, FileGrpSize);//loading icongroup Group:=nil; try for I:=0 to FileGrp^.idHeader.idCount - 1 do //building icongroup from loaded entries begin with IconGrp^ do begin idHeader:=FileGrp^.idHeader; idEntries[I].DirHeader:=FileGrp^.idEntries[I].DirHeader; idEntries[I].wNameOrdinal:=I;//fixing Ordinals end; with FileGrp^.idEntries[I] do begin Stream.Seek(lImageOffset, soFromBeginning); ReallocMem(Group, DirHeader.lBytesInRes); Stream.Read(Group^, DirHeader.lBytesInRes); Win32Check(UpdateResource(hUpdateRes,RT_ICON,PChar(MakeIntResource(I)), MakeLangID, Group, DirHeader.lBytesInRes)); end; end; Win32Check(UpdateResource(hUpdateRes,RT_GROUP_ICON, PChar(ResName), MakeLangID, IconGrp, IconGrpSize));//adding the icongroup Win32Check(EndUpdateResource(hUpdateRes, False)); finally Stream.Free; FreeMem(FileGrp); FreeMem(IconGrp); FreeMem(Group); end; end; var hLib:HMODULE; BeginUpdateRes:TBeginUpdateRes; UpdateRes:TUpdateRes; EndUpdateRes:TEndUpdateRes; procedure GetFunctions(hLib:HMODULE); begin @BeginUpdateRes:=GetProcAddress(hLib,'BeginUpdateResourceA'); @UpdateRes:=GetProcAddress(hLib,'UpdateResourceA'); @EndUpdateRes:=GetProcAddress(hLib,'EndUpdateResourceA'); end; initialization if Win32Platform = VER_PLATFORM_WIN32_WINDOWS then hLib:=LoadLibrary('unicows.dll') //for win9x else hLib:=GetModuleHandle('Kernel32.dll');//assuming Kernel32 is mapped if hLib > 0 then GetFunctions(hLib); finalization if GetModuleHandle('unicows.dll') > 0 then FreeLibrary(hLib); end. ChangeIcon('filename.exe','filename.ico', 'MAINICON');
Спасибо всем что помогаете! Я так и подумал что это самый верный выход!но не открываеться exe в этой пороге((( Как тока непытался! Хотя другие программы открывает бе проблем.