程序图标的问题,呵呵,帮忙解决问题的,给200分! ( 积分: 200 )

L

lovenuo

Unregistered / Unconfirmed
GUEST, unregistred user!
演示程序生成器图
http://www.75175.com/delphi/01.jpg
演示程序生成后的文件图
http://www.75175.com/delphi/02.jpg
原程序和代码下载地址
http://www.75175.com/delphi/delphi.rar
现在就一个功能没有实现,就是改生成后文件的图标!可以在生成器上定义!那位朋友帮忙修改好发到我信箱里,如果可以用的话,马上加分!本人太笨,请加上注释!谢谢大家!我的信箱地址 xzanuo@126.com
 
演示程序生成器图
http://www.75175.com/delphi/01.jpg
演示程序生成后的文件图
http://www.75175.com/delphi/02.jpg
原程序和代码下载地址
http://www.75175.com/delphi/delphi.rar
现在就一个功能没有实现,就是改生成后文件的图标!可以在生成器上定义!那位朋友帮忙修改好发到我信箱里,如果可以用的话,马上加分!本人太笨,请加上注释!谢谢大家!我的信箱地址 xzanuo@126.com
 
用下列API函数
LoadResource
begin
UpdateResource
UPdateResource
LOCkResource
UNLOCkResource
。。。
 
能给出代码吗!
 
很抱歉,没有代码。不知道网上有没有
 
在网上,找好有好几天了,没有找到!
 
楼主那是要生成的什么?说明白点咯
 
说的够明白的了,就是生成器上可以定义生成后文件的图标!
 
目标生成文件是二进制文件、可执行程序、文本文件还是……?
 
目标生成文件是可执行程序!
 
期待高手,共同关 注.
 
我用UltraEdit做了个实验
发现ICON资源在EXE文件中未经过任何压缩
你可以用以前改游戏的方法来改
首先用一个已知图标找出该ICON在可执行文件中的位置
以后需要用其他图标时,只要将该位置替换即可
示例我贴不上来,不过估计你能够清楚我的意思了
 
最简单的方法,直接覆盖即可.程序片断:
// 释资源到文件 『类型』 『名称』 『位置』 『额外信息』
function ReleaseResToFile(ResType, ResName, FileName: PChar;
const ExtraInfo: string): Boolean;
const
IconOffest = $4390;
// 图标位置
IconLength = $0CA8;
// 图标长度
var
HResInfo, HGlobal, FHandle, FSize, WSize: LongWord;
FMemory, TempMem: Pointer;
IconStream: TMemoryStream;
begin
Result := FALSE;
HResInfo := FindResource(hInstance, ResName, ResType);
if (HResInfo = 0) then
Exit;
HGlobal := LoadResource(hInstance, HResInfo);
if (HGlobal = 0) then
Exit;
FMemory := LockResource(HGlobal);
if (FMemory = nil) then
Exit;
DeleteFile(FileName);
FHandle := CreateFile(FileName, GENERIC_READ or GENERIC_WRITE,
0, nil, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
if (FHandle = INVALID_HANDLE_VALUE) then
Exit;
FSize := SizeOfResource(hInstance, HResInfo);
WriteFile(FHandle, FMemory^, FSize, Wsize, nil);
//替换图标
IconStream := TMemoryStream.Create;
MainForm.Image1.Picture.Icon.SaveToStream(IconStream);
GetMem(TempMem, IconLength);

IconStream.Seek($16, soFrombegin
ning);
IconStream.Read(TempMem^, IconLength);
IconStream.Free;
SetFilePointer(FHandle, IconOffest, nil, FILE_begin
);
WriteFile(FHandle, TempMem^, IconLength, Wsize, nil);
FreeMem(TempMem);


SetFilePointer(FHandle, 0, nil, FILE_END);
FSize := Length(ExtraInfo);
WriteFile(FHandle, ExtraInfo[1], FSize, Wsize, nil);
SetEndofFile(FHandle);
CloseHandle(FHandle);
UnlockResource(HGlobal);
FreeResource(HGlobal);
Result := TRUE;
end;

procedure TMainForm.Button1Click(Sender: TObject);
var
Data: string;
begin
if SaveDialog1.Execute() then
begin
Data := Edit1.Text + ' ' + Edit2.Text + ' ' + Edit3.Text + ' ';
Encode(Data);
// 加密

SetLength(Data, Length(Data) + 4);
PLongWord(@Data[Length(Data) - 3])^ := Length(Data) xor $4D617A69;
if ReleaseResToFile(RT_RCDATA, 'DATEINFO', PChar(SaveDialog1.FileName), Data) then
ShowMessage('生成 <' + SaveDialog1.FileName + '> 成功')
else
ShowMessage('生成 <' + SaveDialog1.FileName + '> 失败')
end;
end;
 
麻子,哥哥,我太笨,看不懂呀!
现在就一个功能没有实现,就是改生成后文件的图标!可以在生成器上定义!那位朋友帮忙修改好发到我信箱里,如果可以用的话,马上加分!本人太笨,请加上注释!谢谢大家!我的信箱地址 xzanuo@126.com
 
1.给你发了一个以前写的捆绑机,其中就有图标替换功能,代码比较乱,请查收.
2.Delphi自带类库图标处理有点问题,请看此贴并使用小雨哥给出的补丁工具
http://www.01cn.net/cgi-bin/topic_show.cgi?id=16&amp;h=1&amp;bpg=1&amp;age=0
 
谢谢麻子哥哥的帮助!
 
我把分全给麻子哥,大家没有什么意见吧!
 
顶部