关于LISTVIEW的颜色问题(200)

  • 主题发起人 主题发起人 北狼
  • 开始时间 开始时间

北狼

Unregistered / Unconfirmed
GUEST, unregistred user!
在程序中用到了LISTVIEW控件,具体行数没限制,但只有6列,程序运行后,点载入按钮,就会从数据库中把数据全部加进去,要求加进去后在第三列中数据为"测试"的记录标为红色,第四列中数据为"通过"的记录标为蓝色,第五列中数据为"无效"的记录标为红色..并且隔行颜色区分...我在ListView1CustomDrawIteM事件中加入: if Odd(Item.Index) then ListView1.Canvas.Brush.Color := cStripe else ListView1.Canvas.Brush.Color := clWindow;程序运行后隔行颜色没区分,点调入数据后才能实现隔行区分..能不能程序一运行就区分?然后我在ListView1AdvancedCustomDrawSubItem中加入: if Item.SubItems[2]='有效' then sender.Canvas.Font.Color := clblue else sender.Canvas.Font.Color := clred;问题出来了:当有效的时候,整行都变成了蓝色,否则整行变成了红色,而我只想这一列中 有效 两个字变成蓝色就这个问题我已经弄了5天了,网上的资料都搜遍了,就没这方面的资料,希望大侠出手.谢谢
 
而且加了第二段代码后,除了首列的隔行显示有效外,其他的都无效了.
 
if Item.SubItems[2]='有效' then sender.Canvas.Font.Color := clblue else sender.Canvas.Font.Color := clred;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>在这里Sender指的是什么,自已想想应该就能明白问题之所在了。
 
代码:
//这是隔行区分的代码procedure TfrmMain.LVAdvancedCustomDrawItem(Sender: TCustomListView;  Item: TListItem; State: TCustomDrawState; Stage: TCustomDrawStage;  var DefaultDraw: Boolean);begin  if (Item.Index mod 2) = 1 then    (Sender as TCustomListView).Canvas.Brush.Color := RGB(236, 252, 255);end;
 
呵呵,设置好颜色后,必须自己用OutTextXY来写字,呵呵!
 
呵呵,已经解决了,在ListView1CustomDrawSubItem中写:const cStripe = $00F7F5F8;begin if subitem=0 then exit; if (subitem=3) and (Item.SubItems[2]='有效') then begin listview1.Canvas.Font.Color := clblue; end; if (subitem=3) and (Item.SubItems[2]='无效') then listview1.Canvas.Font.Color := clred; if (subitem=4) and (Item.SubItems[3]='有效') then listview1.Canvas.Font.Color := clblue; if (subitem=4) and (Item.SubItems[3]='无效') then listview1.Canvas.Font.Color := clred; if (subitem=5) and (pos('2',Item.SubItems[4])>0) then listview1.Canvas.Font.Color := clblue; if (subitem=5) and (Item.SubItems[4]='未查询到') then listview1.Canvas.Font.Color := clred; if Odd(Item.Index) then ListView1.Canvas.Brush.Color := cStripe else ListView1.Canvas.Brush.Color := clWindow;procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView; Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);const cStripe = $00F7F5F8; // colour of alternate list itemsbegin if Odd(Item.Index) then ListView1.Canvas.Brush.Color := cStripe else ListView1.Canvas.Brush.Color := clWindow;end;
 
除了上面的有没有更简单的方法?
 
后退
顶部