ListView里,根把某列的值,修改多行背景色。

假设我们从数据库中读取出一批数,同时使用了 order by 按某一列排序,希望,显示出来的内容也按这个字段组成一组,我们知道在.net里,listview控件可以实现 Group功能,在Delphi里要实现相同的功能,那当然也可以,做法上可能麻烦一些,不过我们可以绕开,用其它的办法,目的是实现分组。 在窗体上放一个button,一个listview. 定义类型 Type TDepartList=Record Name:String; Color:TColor; end; 全局变量 ,过程 private last:String; lastColor:TColor; ColorArray:Array of TDepartList; procedure add(s:string); Function GetRandomColor():TColor; Function CheckExist(s:STring):integer; 具体操作 procedure TForm1.add(s: string); var i:integer; item:TlistItem; begin for i:=0 to 10 do begin item:=ListView1.Items.Add; item.Caption:=IntToStr(i+1); item.SubItems.Add('姓名'); item.SubItems.Add(s); item.SubItems.Add('职务'); item.SubItems.Add('职称'); item.SubItems.Add('123'); end; end; function TForm1.CheckExist(s:STring): integer; var i:integer; begin Result:=-1; for i:=Low(ColorArray) to High(ColorArray) do begin if ColorArray[i].Name=s then begin Result:=i; break; end; end; end; function TForm1.GetRandomColor: TColor; begin Randomize; Result:=RGB(RandomRange(0,255),RandomRange(0,255),RandomRange(0,255)); end; procedure TForm1.Button1Click(Sender: TObject); begin add('部门'); add('部门1'); add('部门2'); end; procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView; Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean); var i:integer; begin if (Item.SubItems.Strings[1]<>Last) then//防止重画动作 begin Last:=Item.SubItems.Strings[1]; lastColor:=GetRandomColor; i:=CheckExist(last); if i=-1 then//填充ColorArray begin i:=High(ColorArray)+2; SetLength(ColorArray,i); ColorArray[i-1].Name:=last; ColorArray[i-1].Color:=lastColor; end else begin lastColor:=ColorArray[i].Color; end; end; with ListView1.Canvas do begin Brush.Color:=lastColor; Font.Color:= clWhite; end; end; 这里要设置一个listview ownerdraw为false;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值