我想实现的是单击一个按钮,这样根据用户选择的条件可能有查到几条数据,
该数据一定在一个以存在listview的记录中,我想在listview中让这几条记录改变颜色。 各位小弟拜托了

解决方案 »

  1.   

    先遍历LISTVIEW里的记录,对找到的记录用来面的方法来做:
    在ListView的OnCustomDrawItem事件里——procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView;
      Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
    var
      R: TRect;
    begin
      with Sender.Canvas do begin
        R := Item.DisplayRect(drBounds);
        if Item.Index mod 2 = 1 then begin//对奇数行改变底色和字体
          Brush.Color := clTeal;
          Font.Color := clYellow;
          Font.Style := Font.Style + [fsBold];
          DefaultDraw := False;
        end;
        if cdsSelected in State then begin
          Brush.Color := clHighLight;
          Font.Color := clHighLightText;
        end;
        FillRect(R);
        TextRect(R, R.Left + 2, R.Top, Item.Caption);
      end;
      DefaultDraw := False;
    end;
      

  2.   

    procedure TMainForm.ListView1CustomDrawItem(Sender: TCustomListView; 
      Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean); 
    begin 
      if Item.Caption = 'tommy' then   //条件:)
        (Sender as TListView).Canvas.Font.Color := clMaroon; 
    end;
      

  3.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      i : integer;
    begin
      for i:=Listview1.Items.Count-1 Downto 0 do
      begin
        ListView1.Items[i].GetPosition;
        SendMessage(Listview1.Handle, LVM_SETTEXTCOLOR, 0, clred);
        ListView1.Repaint;
      end;
    end;
    上面的是个范例。你可以通过查找到的item index值,或者caption来确定该item的position。
      

  4.   

    这个很简单,写TListView的OnAdvancedCustomDrawItem事件就可以了:procedure TForm1.ListView1AdvancedCustomDrawItem(Sender: TCustomListView;
      Item: TListItem; State: TCustomDrawState; Stage: TCustomDrawStage;
      var DefaultDraw: Boolean);
    begin
      if Item.Caption<>'322' then
        Sender.Canvas.Font.Color:=clRed;
    end;
      

  5.   

    其实原理就是在ListView的OnCustomDrawItem事件里
    符合你给定条件的一些行,将Canvas的颜色变成其他颜色就可以了