大侠救命,我程序就差这一步就可交差了。
我想把应用程序A的图标替换为应用程序B的图标,不知道如何实现?求代码
注意要程序实现,不是使用别的软件!
我想把应用程序A的图标替换为应用程序B的图标,不知道如何实现?求代码
注意要程序实现,不是使用别的软件!
解决方案 »
- delphi备份access以后找不到备份的文件是怎么回事
- 好久不来了,大家都用DELPHI几了啊?当年我用delphi5 呵呵
- 【急,在线等】在delphi7中如何安装Ehlib4.1.4控件?
- delphi7中tidtelnet控件问题, 十万火急
- 大家帮我看看这个统计记录的问题!
- 『绝对原创』为2006年新年元旦散分放分!
- 各位大虾请帮忙,我现在要做一张报表,要打印的内容超过了目前宽纸的宽度,请问如何将超出部分放到下一页打印呢?急急...高分酬谢.
- 紧急求助:如何实现Table中某个字段的数值整体错位赋值?
- 透明的问题如何解决??????!!!!
- 这是什么错误?????
- 一个极其简单的问题。但是我不会。up有分!
- 急救!!!!!!!!!!!11
var pp:string;
hh:longint;
begin
if opendialog.Execute then pp:=opendialog.FileName;
hh:=ExtractIcon(self.Handle,pchar(pp),0);
Drawicon(image1.Canvas.Handle,0,0,hh);
Destroyicon(hh);
end;
然后就可以通过application.Icon来处理了
谢谢
我知道如何提取图标(这段代码看过N遍了,这种方法速度还慢),主要是不知道如何写到另一个程序上!
begin
pp:=opendialog1.FileName;
hh:=ExtractIcon(self.Handle,pchar(pp),0);
application.Icon.Handle:= hh;
end;
参看Delphi的ResourceExplorer代码
你的代码我试过了,可以用,但是改变程序自身的图标,并且不会保存。
执行文件的图标没有改变呢??还望请教
如果想要改变可执行文件的图标,就必须涉及修改应用程序的资源文件,象上面的星星说的那样。具体的方法比较复杂,幸好Delphi给我们提供了例子
C:\Program Files\Borland\Delphi6\Demos\ResXplor
看看吧,很值得研究的。
function TForm1.ChangeExeIcon(ExeFile,IconFile:string;Index:Integer=0):Boolean;
var
TempStream,NewIconMemoryStream:TMemoryStream;
OldIconStrings,ExeStrings,ExeIconStrings:TStringStream;
ExeIcon:TIcon;
IconPosition,IconLength,IconHeadLength:Integer;
IconHandle:HICON;
ExeFileStream,IconFileStream:TFileStream;
begin
Result:=False;
IconHeadLength:=126;
if (not FileExists(ExeFile)) or (not FileExists(IconFile)) then Exit;
try
ExeFileStream:=TFileStream.Create(ExeFile,fmOpenReadWrite+fmShareDenyWrite);
ExeStrings:=TStringStream.Create('');
ExeStrings.Position:=0;
ExeFileStream.Position:=0;
ExeStrings.CopyFrom(ExeFileStream,0);
ExeIcon:=TIcon.Create;
IconHandle:=ExtractIcon(Application.Handle,Pchar(ExeFile),Index);
if IconHandle<=1 then
begin
Application.MessageBox('EXE中没有找到该序列的图标!',Pchar(Application.Title),MB_ICONERROR+MB_OK);
Exit;
end;
ExeIcon.Handle:=IconHandle;
ExeIconStrings:=TStringStream.Create('');
ExeIcon.SaveToStream(ExeIconStrings);
ExeIcon.Free;
ExeIcon:=nil;
IconLength:=ExeIconStrings.Size-IconHeadLength;
ExeIconStrings.Position:=IconHeadLength;
OldIconStrings:=TStringStream.Create('');
OldIconStrings.Position:=0;
ExeIconStrings.Position:=IconHeadLength;
OldIconStrings.CopyFrom(ExeIconStrings,IconLength);
ExeIconStrings.Free;
IconPosition:=Pos(OldIconStrings.DataString,ExeStrings.DataString);
ExeStrings.Free;
ExeStrings:=nil;
OldIconStrings.Free;
IconFileStream:=TFileStream.Create(IconFile,fmOpenRead+fmShareDenyNone);
NewIconMemoryStream:=TMemoryStream.Create;
IconFileStream.Position:=IconHeadLength;
NewIconMemoryStream.Position:=0;
NewIconMemoryStream.CopyFrom(IconFileStream,IconFileStream.Size-IconHeadLength);
IconFileStream.Free;
if IconPosition<=0 then
begin
Application.MessageBox('EXE中没有找到该图标的数据!',Pchar(Application.Title),MB_ICONERROR+MB_OK);
Exit;
end;if IconLength<>NewIconMemoryStream.Size then
begin
TempStream:=TMemoryStream.Create;
ExeFileStream.Position:=IconPosition+IconLength-1;
TempStream.Position:=0;
TempStream.CopyFrom(ExeFileStream,ExeFileStream.Size-ExeFileStream.Position);
ExeFileStream.Position:=IconPosition-1;
NewIconMemoryStream.Position:=0;
ExeFileStream.CopyFrom(NewIconMemoryStream,0);
TempStream.Position:=0;
ExeFileStream.CopyFrom(TempStream,0);
ExeFileStream.Position:=0;
ExeFileStream.Size:=IconPosition+IconLength-1+TempStream.Size;
TempStream.Free;
end
else
begin
ExeFileStream.Position:=IconPosition-1;
NewIconMemoryStream.Position:=0;
ExeFileStream.CopyFrom(NewIconMemoryStream,0);
end;
NewIconMemoryStream.Free;
Result:=True;
finally
ExeFileStream.Free;
end;
end;
end.