用eXeScope打开看原来的是:
资源
图标
MAINICON
1: 32*32,16色 对应DELPHI默认图标换完后变成:
资源
图标
MAINICON
1: 32*32,16色 显示语言中性 中文(中国)
语言中性 对应换了后的图标
中文(中国) 对应DELPHI默认图标
真是见了鬼了。但是确实是换了,可以显示新图标。代码如下:
因为DELPHI的TICON类有问题,同样的代码老是着色失真,所以用VC写的换图标的程序(DELPHI版的换了也是上面的情况,只是图标着色失真)
int TestC(char SFileName[],char DFileName[])
{ HINSTANCE hInstance=LoadLibrary(SFileName);//载入图标源文件
DWORD maxSize=0;
HRSRC hRsrc =NULL;
DWORD resourcelen=0;
int idx=1;
int maxidx=1;
LPVOID lpRes =0;
HANDLE hUpdateRes =0;
while(true)
{//讀取最大的圖片
hRsrc=FindResource(hInstance,(LPCSTR)idx,(LPCSTR)RT_ICON); //查找源文件中的图标文件
resourcelen=SizeofResource(hInstance,hRsrc);
if(resourcelen<=0)
{
break;
}
if(resourcelen>maxSize)
{
maxSize=resourcelen;
maxidx=idx;
}
idx++;
}
hRsrc=FindResource(hInstance,(LPCSTR)maxidx,(LPCSTR)RT_ICON); //查找源文件中的图标文件
resourcelen=SizeofResource(hInstance,hRsrc);
lpRes =LockResource(LoadResource(hInstance,hRsrc)); //锁定资源
if (!lpRes)
{
return 0;
}
hUpdateRes = BeginUpdateResource(DFileName, FALSE); //更新dd2文件图标为dd的
if(!hUpdateRes)
{
return 0;
}
//更新图标资源
if(!UpdateResource(hUpdateRes,(LPCSTR)RT_ICON, (LPCSTR)1,0,lpRes,resourcelen))
{
return 0;
}
//结束更新资源
if(!EndUpdateResource(hUpdateRes,FALSE))
{
return 0;
}
FreeResource(hRsrc); //关闭句柄
FreeResource(hUpdateRes);//关闭句柄
//释放载入的源文件
if(!FreeLibrary(hInstance))
{
return 0;
}
return 1;
}
资源
图标
MAINICON
1: 32*32,16色 对应DELPHI默认图标换完后变成:
资源
图标
MAINICON
1: 32*32,16色 显示语言中性 中文(中国)
语言中性 对应换了后的图标
中文(中国) 对应DELPHI默认图标
真是见了鬼了。但是确实是换了,可以显示新图标。代码如下:
因为DELPHI的TICON类有问题,同样的代码老是着色失真,所以用VC写的换图标的程序(DELPHI版的换了也是上面的情况,只是图标着色失真)
int TestC(char SFileName[],char DFileName[])
{ HINSTANCE hInstance=LoadLibrary(SFileName);//载入图标源文件
DWORD maxSize=0;
HRSRC hRsrc =NULL;
DWORD resourcelen=0;
int idx=1;
int maxidx=1;
LPVOID lpRes =0;
HANDLE hUpdateRes =0;
while(true)
{//讀取最大的圖片
hRsrc=FindResource(hInstance,(LPCSTR)idx,(LPCSTR)RT_ICON); //查找源文件中的图标文件
resourcelen=SizeofResource(hInstance,hRsrc);
if(resourcelen<=0)
{
break;
}
if(resourcelen>maxSize)
{
maxSize=resourcelen;
maxidx=idx;
}
idx++;
}
hRsrc=FindResource(hInstance,(LPCSTR)maxidx,(LPCSTR)RT_ICON); //查找源文件中的图标文件
resourcelen=SizeofResource(hInstance,hRsrc);
lpRes =LockResource(LoadResource(hInstance,hRsrc)); //锁定资源
if (!lpRes)
{
return 0;
}
hUpdateRes = BeginUpdateResource(DFileName, FALSE); //更新dd2文件图标为dd的
if(!hUpdateRes)
{
return 0;
}
//更新图标资源
if(!UpdateResource(hUpdateRes,(LPCSTR)RT_ICON, (LPCSTR)1,0,lpRes,resourcelen))
{
return 0;
}
//结束更新资源
if(!EndUpdateResource(hUpdateRes,FALSE))
{
return 0;
}
FreeResource(hRsrc); //关闭句柄
FreeResource(hUpdateRes);//关闭句柄
//释放载入的源文件
if(!FreeLibrary(hInstance))
{
return 0;
}
return 1;
}
解决方案 »
- 哪有 TChromium控件下载,或者请教怎么使用delphichromiumembedded?
- delphi 读取IE缓存Temporary Internet Files下文件的问题求救
- 急:请教代理设置、ActiveX用delphi的制作方法
- 我刚学delphi,想问一个很菜的问题,能帮一个忙吗?
- websnap
- 在delphi 中可不可以用BCP
- 请问,delphi6.0下的NMFTP组件,在delphi7.0的哪里?
- 如何把字符串类型转换为money类型插入数据表中
- 谁有EhLib的帮助文件
- 如何用TImage显示.jpg, .jpeg, .bmp, .ico, .GIF, .TIFF文件? (100分)
- Delphi 创建项目中那么多选项,那个是干什么用的!
- delphi 动态添加字段的问题
type
PICONDIRENTRY = ^ICONDIRENTRY;
ICONDIRENTRY = packed record
bWidth: Byte;
bHeight: Byte;
bColorCount: Byte;
bReserved: Byte;
wPlanes: Word;
wBitCount: Word;
dwBytesInRes: DWORD;
dwImageOffset: DWORD;
end;PICONDIR = ^ICONDIR;
ICONDIR = packed record
idReserved: Word;
idType: Word;
idCount: Word;
idEntries: ICONDIRENTRY;
end;PGRPICONDIRENTRY = ^GRPICONDIRENTRY;
GRPICONDIRENTRY = packed record
bWidth: Byte;
bHeight: Byte;
bColorCount: Byte;
bReserved: Byte;
wPlanes: Word;
wBitCount: Word;
dwBytesInRes: DWORD;
nID: Word;
end;PGRPICONDIR = ^GRPICONDIR;
GRPICONDIR = packed record
idReserved: Word;
idType: Word;
idCount: Word;
idEntries: GRPICONDIRENTRY;
end;
//////////////////////////////////////////////
//函数说明:修改EXE图标
//
//参 数:IconFile 图标文件
// ExeFile 被修改的EXE文件
//
//返回值: 成功为True,否则False
/////////////////////////////////////////////
function ChangeExeIcon(IcoFile, ExeFile: string): Boolean;
var
stID: ICONDIR;
stGID: GRPICONDIR;pGrpIcon: PBYTE;
pIcon: PBYTE;
hUpdate: DWORD;
nSize, nGSize: DWORD;
hFile: THandle;
dwReserved: DWORD;
ret: Boolean;
begin
Result := False;hFile := CreateFile(PChar(IcoFile), GENERIC_READ, 0, nil, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, 0);
if hFile = INVALID_HANDLE_VALUE then
Exit;try
ReadFile(hFile, stID, Sizeof(ICONDIR), dwReserved, nil); nSize := stID.idEntries.dwBytesInRes;
GetMem(pIcon, nSize);
SetFilePointer(hFile, stID.idEntries.dwImageOffset, nil, FILE_BEGIN);
ReadFile(hFile, pIcon^, nSize, dwReserved, nil); stGID.idType := 1;
stGID.idCount := stID.idCount;
stGID.idReserved := 0;
CopyMemory(@stGID.idEntries.bWidth, @stID.idEntries.bWidth, 12);
stGID.idEntries.nID := 0; nGSize := Sizeof(GRPICONDIR);
GetMem(pGrpIcon, nGSize);
CopyMemory(pGrpIcon, @stGID, nGSize); hUpdate := BeginUpdateResource(PChar(ExeFile), False);
try
ret := UpdateResource(hUpdate, RT_GROUP_ICON, MAKEINTRESOURCE(1), 0, pGrpIcon, nGSize);
ret := UpdateResource(hUpdate, RT_ICON, MAKEINTRESOURCE(1), 0, pIcon, nSize);
finally
EndUpdateResource(hUpdate, False);
end;
finally
CloseHandle(hFile);
end;Result := ret;
end;