*** ImageList读取ico,然后画到SpeedButton上会严重失真???求助

yingshang 2011-01-23 10:13:16
*** ImageList读取ico,然后画到SpeedButton上会严重失真???求助

procedure TForm1.Button1Click(Sender: TObject);
var
SHFI : TSHFileInfo;
FIco : TIcon;
begin
SHGetFileInfo('C:\Windows', 0, SHFI, SizeOf(SHFI),
SHGFI_ICON or SHGFI_SMALLICON);
FIco := TIcon.Create;
FIco.Handle := SHFI.hIcon;
ImageList1.AddIcon(FIco);
FIco.Free;
ImageList1.GetBitmap(0, SpeedButton.Glyph);
end;

图标在spbtn上会严重失真,感觉好像是ico转为bmp导致的问题,但不知道改如何解决,求助。
...全文
136 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
铁心兰 2011-11-25
  • 打赏
  • 举报
回复
你怎么解决的,也不说说
likeyrain 2011-01-25
  • 打赏
  • 举报
回复
ImageList是要设置自身象数的啊,看看是不是加载到ImageList里就已经失真了
yingshang 2011-01-25
  • 打赏
  • 举报
回复

找到另外办法解决了,结贴……
yingshang 2011-01-24
  • 打赏
  • 举报
回复

up一下,难道真没有办法不失真的将ico显示在speedbutton上吗?????

yingshang 2011-01-24
  • 打赏
  • 举报
回复

感觉还是转换格式的问题,imagelist有icon对象,但是button只能加位图bmp,这样必须拥有一个转换的过程,给我的感觉就是转换成bmp就不行了,哎,难办
CaiBirdy 2011-01-24
  • 打赏
  • 举报
回复
失真那就是像素位数的问题,不是ImageList就是SpeedButton,两边肯定有一边太低了
yingshang 2011-01-23
  • 打赏
  • 举报
回复
楼上的方法早试过

一直在试各种方法,发现一个奇怪的事情:

SpeedButton1.Glyph.Canvas.Draw(0,0,FIco);
Form1.Canvas.Draw(200, 350, FIco);

这两个画出来的就不一样,Form画的很完美,但是spbtn画出来的依然有失真的黑框,正在比较源代码,看有什么不同
haitao 2011-01-23
  • 打赏
  • 举报
回复
icon转存为bmp后再加载,会怎么样
yingshang 2011-01-23
  • 打赏
  • 举报
回复

试了一下,这次使用SHGFI_LARGEICON读取大图标,然后imagelist和listview关联,listview也是的,图标严重失真

哪些什么width height俺都检查了,还有颜色深度32位啥的也都试过了,依然无效

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧