使用ListView显示图片的效果问题!

kl2000 2004-06-19 01:33:23
我们知道可以使用Listview这个控件进行图片
显示.但在显示出来的图片上用鼠标点击它,图片就会
被覆盖上一层蒙蒙的蓝色,而导致整个图片变得模糊.
给人十分不爽的感觉.但我努力去找这个答案都是无功
而劳.所以来这里求解!
不要告诉我用 item.select := False;
或者别的把item的焦点杀死,这是不可取的.
因为我还要对它进行处理. 我只是想把覆盖
在图片上的颜色去掉就可以! 谢谢拉.
...全文
273 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
CsdnRob 2004-07-02
  • 打赏
  • 举报
回复
帮忙up
kl2000 2004-06-21
  • 打赏
  • 举报
回复
xzhifei(星级饭桶(抵制日货)·飞) : 非常感谢! 问题已经解决.
有机会请你喝酒! :)
xzhifei 2004-06-21
  • 打赏
  • 举报
回复
procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
var
aRect: TRect;
bmp: TBitmap;
begin
aRect := Item.DisplayRect(drBounds);
if cdsSelected in State then
begin
//cdsFocused 还可以分别处理是激活状态时的图象
DefaultDraw := False; //加上这一句就可以了
bmp := TBitmap.Create;
try
ImageList1.GetBitmap(0, bmp);
Sender.Canvas.StretchDraw(Rect(aRect.Left, aRect.Top, bmp.Width, bmp.Height), bmp);
finally
bmp.Free;
end;
end;
end;
kl2000 2004-06-21
  • 打赏
  • 举报
回复
楼上的: 谢谢! 我试了. 但是那蓝色还在. 图片还模糊呢!
还有什么办法吗??
xzhifei 2004-06-19
  • 打赏
  • 举报
回复
又不早说:
procedure TForm1.ProgressBarLV1CustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
var
aRect:TRect;
begin
aRect:=Item.DisplayRect(drBounds );
if cdsSelected in State then
begin
bmp := TBitmap.Create;
try
ImageList1.GetBitmap(0, bmp);
Sender.Canvas.StretchDraw(Rect(aRect.Left ,aRect.Top , bmp.Width, bmp.Height), bmp);
finally
bmp.Free;
end;
end;

end;
kl2000 2004-06-19
  • 打赏
  • 举报
回复
楼上的: 我测试一下,还是没有结果!
bai11 2004-06-19
  • 打赏
  • 举报
回复
杀完焦点,判断鼠标坐标,在重画。(没试过)
kl2000 2004-06-19
  • 打赏
  • 举报
回复
procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
var
bmp: TBitmap;
begin
if cdsSelected in State then
begin
bmp := TBitmap.Create;
try
ImageList1.GetBitmap(0, bmp);
Sender.Canvas.StretchDraw(Rect(20,10, bmp.Width, bmp.Height), bmp);
finally
bmp.Free;
end;
end;
end;
TO: xzhifei(星级饭桶(抵制日货)·飞)
你说的重画是不是这个意思, 但还是达不到我的效果呢?
而且Sender.Canvas.StretchDraw(Rect(20,10, bmp.Width, bmp.Height), bmp);
在这句里面的Left和Top又怎么能得到原来的值,在重画的时候,才能完全覆盖!
xzhifei 2004-06-19
  • 打赏
  • 举报
回复
写错了,应该是:
if cdsSelected in State then
xzhifei 2004-06-19
  • 打赏
  • 举报
回复
你自己重画
procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
if State = cdsSelected then
begin
{选中时}
end
else
begin
end;
end;
kl2000 2004-06-19
  • 打赏
  • 举报
回复
楼上的大哥: 我不是改变图片. 还是你的方法可以达到我的要求.
fhuibo 2004-06-19
  • 打赏
  • 举报
回复
MyNode.ImageIndex := 1; //设置初始图象
MyNode.SelectedIndex := 2;//当点中后改变图象
kl2000 2004-06-19
  • 打赏
  • 举报
回复
星星球: 谢谢!
我就想把它的去掉,然后等用户选中之后,我再自己画上去.
表示用户已经选中了. CreateParams 到底是那个参数??
juliens 2004-06-19
  • 打赏
  • 举报
回复
你实在要实现或许可以通过覆盖CreateParams方法来改变ListView的行为而实现!(没有试验)。
juliens 2004-06-19
  • 打赏
  • 举报
回复
连windows都是这么实现的,如果没有蓝色的话你怎么知道选中哪一个了呢 、?

5,388

社区成员

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

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