请教关于listview的CustomDrawItem的问题。(100分)

  • 主题发起人 主题发起人 晓宇
  • 开始时间 开始时间

晓宇

Unregistered / Unconfirmed
GUEST, unregistred user!
report式样的listview,我想要改变选择条的颜色及被选中的ListItem的字体颜色,但我
现在只能将字体改成粗体却无法改变颜色。

我的程序如下:
procedure TMainForm.ListView1CustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
with Listview1.canvas do
if cdsSelected in State then
begin
font.Style:=[fsBold]; //这个是有效果的
font.color:=clred;  //无效果
brush.Color:=clgreen; //无效果
end;
DefaultDraw:=true;
end;

请大家帮我看看,如果您有例程,那就太好了! ^_^
 
我编译通不过
 
参看delphi的demos/virtual listview例程
在ListView的OnCustomDrawItem 事件中
第一句加上Listview.Canvas.Font.Color :=clred;
运行后listview的字变成了红色!
 
你自己要调用 canvas 的 TextOut 画出标签的:
procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
var
R: TRect;
begin
with TListView(Sender).canvas do
if cdsSelected in State then
begin
font.Style := [fsBold];
font.color := clred;
brush.Color := clgreen;
R := item.DisplayRect(drlabel);
textout(R.Left + 1, R.Top + 1, item.Caption);
defaultdraw := False;
end
else
DefaultDraw:=true;
end;
 
to bbkxjy:

谢谢!我试了一下,已经接近我想要的效果了!但是我的listview的rowselected是设为
true的,我想要的效果是一整条选择条,现在只有listview.caption部分有背景色。能否
显示整条?
 
建议,从头做起:先把想要完成自画风格的区域用自己想要的颜色填充,再一步一步画出自己
想要的东东!
如果想要得到更好的效果,最好是自己动手创造一个ListView的兄弟!
 
to wlmmlw:
  我只想实现这么一个效果,自己写一个listview有些太麻烦了。最好用这个现成的
控件啦。呵呵!
 
其实我想实现的效果跟使用默认skin的Winamp的playlist是一样的。
 
最好不要用这个过程,DELPHI 中如果要用这个过程,会引起资源严重丢失,最后死机。
这可能是一个不小的BUG。

开始不会发生,只要你多刷新几次其中内容,就会减小一些资源,就是说,用过的内存
不能释放,最后是只能以出现蓝面告终!

可以在资源管理器的关于中查看资源的多少!
 
后退
顶部