我通过SHELL函数获取一个文件的图标。
function GetFileIcon(FileName: string): TIcon;
var SHFileInfo: TSHFileInfo;
begin
if SHGetFileInfo(PChar(FileName),
0,
SHFileInfo,
SizeOf(SHFileInfo),
SHGFI_ICON or SHGFI_SYSICONINDEX) > 0 then
begin
result:= TIcon.Create;
Result.Handle:= SHFileInfo.hIcon;
end else
Result:= nil;
end;获取到的图标放到一个TImage中显示。显示很正常(和在windows资源管理器中的效果一样,图标周边有阴影效果)。
但添加到一个TListView中显示时,就明显不对了。边上出现了一圈黑边(我想在windows下应该是阴影效果)。请教能在TListView中也正常显示的方法(能显示出阴影效果)。是不是有类似windows资源管理器中显示文件的控件呢。因为TListView选中后的效果和windows(XP)中选中后的效果也不同。想做个和windows选中后效果一样的。我是以windows media player的图标做测试的。
function GetFileIcon(FileName: string): TIcon;
var SHFileInfo: TSHFileInfo;
begin
if SHGetFileInfo(PChar(FileName),
0,
SHFileInfo,
SizeOf(SHFileInfo),
SHGFI_ICON or SHGFI_SYSICONINDEX) > 0 then
begin
result:= TIcon.Create;
Result.Handle:= SHFileInfo.hIcon;
end else
Result:= nil;
end;获取到的图标放到一个TImage中显示。显示很正常(和在windows资源管理器中的效果一样,图标周边有阴影效果)。
但添加到一个TListView中显示时,就明显不对了。边上出现了一圈黑边(我想在windows下应该是阴影效果)。请教能在TListView中也正常显示的方法(能显示出阴影效果)。是不是有类似windows资源管理器中显示文件的控件呢。因为TListView选中后的效果和windows(XP)中选中后的效果也不同。想做个和windows选中后效果一样的。我是以windows media player的图标做测试的。
不知道符合不符合你的要求。
demo中设置的方法如下:
ImageListHandle := SHGetFileInfo('C:\',
0,
FileInfo,
SizeOf(FileInfo),
SHGFI_SYSICONINDEX or SHGFI_LARGEICON);
SendMessage(ListView.Handle, LVM_SETIMAGELIST, LVSIL_NORMAL, ImageListHandle);但我把TListView的TImageList关联成一个delphi带的TImageList。 这个问题实在是困扰了好久了。
我从一个exe中提取出了一个图标。该图标放到windows中显示能有很好的效果。但直接在TimageList中添加该图标。图标周边就会出现一个黑边。
不知道是不是TImageList的问题。恳请各位大侠指点小弟。。不胜感激。