在程序运行时如何动态改变EXE文件的图标? (50分)

  • 主题发起人 主题发起人 wengyz
  • 开始时间 开始时间
在project option 中改变即可。
 
在项目属性里就可以修改
 
Project -> Option -> icon
 
在菜单项的“PROJECT”-》OPTION-》ICON
 
Project -> Option -> icon 就可以换漂亮的图标了!!!
 
Application.Icon.LoadFromFile('face.ico');
 
呵呵,楼上的方法就可以在运行时改图标。。。。
 
我的要求不是从ico中得到,而是获取另外一个exe的图标,在付给我的exe
 
取出另外一个exe的图标
save
再给你的exe
 
取另外一個Exe的圖標,可用Api函數ExtractIcon()實現,
具體用法,可參考Delphi的Windows SDK幫助.
 
这个问题有什么实用价值?

 
你是想象NetAnts软件那样吗?它是通过在不同状态将不同的文件设置为不同的格式的文件
(后缀名不一样),不同的格式配以不同的图标就可以了,可以反映软件不同时候的不同
状态!
 
procedure TForm1.Button1Click(Sender: TObject);
var
icon:ticon;
begin
icon:=TIcon.Create;
icon.Handle:=extracticon(hinstance,'f:/temp/eye.exe',0);
//your code
icon.Free;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var
icon:ticon;
begin
icon:=TIcon.Create;
icon.Handle:=extracticon(hinstance,'f:/2/computer/project2.exe',0);
Application.Icon.Assign(icon);
icon.Free;
end;
 
extracticon怎么不能通过,要不要在uses中加点什么?
 
我添加shellapi后可用,但是不是修改程序的图标,是修改标题栏的图标
 
大侠,修改其它程序的图标,如何实现
以前有一大侠贴了这个,

procedure ChangeIconInStream;
var
msIcon, msHeader: TMemoryStream;
ferFoot: packed array[0..651] of byte;
ferIcon: packed array[0..743] of byte;
begin
msHeader := TMemoryStream.Create;
try
if msIcon.size > 0 then
begin
msIcon.Seek(22, soFrombeginning);
msIcon.Read(ferIcon, sizeof(ferIcon));
with ssMaker do
begin
msHeader.CopyFrom(Content, 29012);
Content.Seek(744, soFromCurrent);
Content.Read(ferFoot, content.Size - Content.Position);
msHeader.Write(ferIcon, sizeof(ferIcon));
msHeader.Write(ferFoot, sizeof(ferFoot));
end;
end else
begin
msHeader.CopyFrom(ssMaker.Content, 0);
end;
finally
ssMaker.Content.Position := 0;
msHeader.Position := 0;
end;
finally
ssMaker.Content.Position := 0;
msIcon.Free;
msHeader.Free;
end;
end;


可以ssMaker是什么东东都不知道,还请诸侠帮助
 
后退
顶部