我设置了listview中的checkbox属性为TRUE.
在onclick事件中加入:
procedure TMainForm.lvRecClick(Sender: TObject);
var
  li: TListItem;
begin
  li := lvRec.Selected;
  if li = nil then Exit;
  if li.Checked then
      li.Checked := False
  else
    li.Checked := True;
end;
设计思路:
       listiew左侧的checkbox和点击某一行时,都把那行的颜色换一下
找了些质料没有解决.
请高手看看,这事应该怎么做....

解决方案 »

  1.   

    listiew左侧的checkbox和点击某一行时
    ----------------------------------
    对这句不是很理解
    主要是不理解什么叫做listview左侧的checkbox时这句
    意思是不是checkbox被勾选时?
    如果是这样的话
    procedure MainForm.lvRecCustomDrawItem(Sender: TCustomListView;
      Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
    begin
      if (Item.Checked) or (Item.Selected) then
        Sender.Brush.Color := clgray
      else
        Sender.Brush.Color := clWindow;
    end;
      

  2.   


    procedure MainForm.lvRecCustomDrawItem(Sender: TCustomListView;
      Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
    begin
      if (Item.Checked) or (Item.Selected) then
        Sender.Canvas.Brush.Color := clgray
      else
        Sender.Canvas.Brush.Color := clWindow;
    end;说漏了应该是
      

  3.   

    呵呵,果然高手.
    现在还有一个问题,listview么有onCheck事件.
    我用了onChange事件,就产生问题:
     假如我现在第三行,然后我选择了第五行.
    procedure TMainForm.lvRecClick(Sender: TObject); 
    var 
      li: TListItem; 
    begin 
      li := lvRec.Selected; 
      if li = nil then Exit; 
      if li.Checked then 
          li.Checked := False 
      else 
        li.Checked := True; 
    end; 
    受这个代码的影响,第三和第五行都会改变checked的状态,这么解决这个问题.虽然CSND上高手很多.但是我从来都没有碰到一个,很兴奋....
    谢谢你  liuhaogang82  ....如果知道,delphi中如何弹出类似windows的确认文件替换,那就更好了..再谢一次....(^_^)
      

  4.   

    不好意思,有几天没上CSDN了
    确认文件替换,这个其实我也不知道的,我的方法只是自己做FORM,然后根据选择的按钮来处理
    按你现在的代码,我试了一下没什么问题,
    究竟你在onchange事件里写了什么呢?
    还有你的
    if li.Checked then  
        li.Checked := False  
      else  
        li.Checked := True;  
    可以替换成
      li.checked := Not li.checked;
    这样代码可以精简,而且容易理解