REPORT风格下,怎么样对每一行上色?
我在用了AdvancedCustomDrawItem自画之后,里面的记录全被盖掉了,CAPTION还好,可以TEXTOUT出来,SUBITEMS呢?而且这样做比较麻烦,完全丧失了LISTVIEW的易用性,有没有更好的方法?请赐教!

解决方案 »

  1.   

    在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.   

    //Color1是单行颜色,Color2是双行颜色Procedure DrawLV(Listview: TListview; Item: TListItem; Color1, Color2: TColor; Def: Boolean = true);
    Var
      Frect: TRect;
    Begin
      Frect := Listview.BoundingRect;  If Def Then
        Begin
          If (item.Index Mod 2) = 0 Then
            Listview.Canvas.Brush.Color := Color1 //$00FFB3B3
          Else
            Listview.Canvas.Brush.Color := Color2; //$00FFB3B3
        End
      Else
        Listview.Canvas.Brush.Color := Color1; //$00FFB3B3
      Listview.Canvas.FillRect(Frect);
    End;Procedure TForm1.ListView1AdvancedCustomDrawItem(Sender: TCustomListView;
      Item: TListItem; State: TCustomDrawState; Stage: TCustomDrawStage;
      Var DefaultDraw: Boolean);
    Begin
      DrawLV(listview1, item, $00EEF7FF, clWhite);End;
      

  3.   

    谢谢,跟我写的效果是一样的,只能加上CAPTION,后面的呢?难道要继续获取坐标?
      

  4.   

    谢谢,我把OwnerDraw错设成true了,现在没问题了