DrawStyle设成OwnerDraw
在OnDrawCell事件中自己画.

解决方案 »

  1.   

    对于ListView的网格背景可以用ListView.Color:=???(?代表颜色),字体的属性是Font,点击它可以打开通用字体设置对话框,然后你就可以设置了。
    对于DBGrid方法类似。
      

  2.   

    直接该二者得Color和Font得Color属性值即可
      

  3.   

    要改变ListView控件的背景与字体:
    1、ListView.OwnerDraw := True;
    2、挂接OnCustomDrawItem事件,自行绘制。
    对于DBGrid,挂接OnDrawColumnCell事件试试。
      

  4.   

    需要这样的方法是在LISTVIEW的OnCustomDraw,以及OnCustomDrawitem事件里重写,并且要把DeafaultDraw设为假,这样完全控制如何绘制你想要的效果.下面是一个在背景变成红色后,写一行字的例子:
    procedure TForm1.ListView1CustomDraw(Sender: TCustomListView;
      const ARect: TRect; var DefaultDraw: Boolean);
    begin
      With ListView1 do begin
        Canvas.brush.Color :=clRed;
        canvas.FillRect (Arect);
        Canvas.TextOut (0,0, 'This is a test');
      end;
      DefaultDraw:=true;end;如果要更改DBGRID的网格颜色,方法也是类似,只是在OnDrawDataCell和OnDrawColumnCell时自己控制即可.下面我用一个DRAWRGRID做一示例,凡偶数行以一种颜色做为背景.在DRAWGRID控件下,是DRAWCELL事件.如果要改变字体等,请改变Canvas.font.name/size/color属性即可.procedure TForm1.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    begin
      With DrawGrid1 do begin
        if Arow mod 2 =0 then begin
          canvas.brush.Color :=rgb(200,255,212);
          canvas.FillRect (rect);
        end;
      end;
    end;
      

  5.   

    请你使用dfsExtListView,你会找到非常好的方法。
      

  6.   

    jll及sky_horse: 感谢你们的支持,但我不是第一次用DELPHI
    kxy和lin: 你们俩描述的方法我知道,也在StringGrid上完成了,但在ListView和DBGrid上实现有些困难,主要是显示一格中的文字内容有些问题
    Venne: 你的回答很切题,在你的启发下,我完成了DBGrid的美化,但在ListView的vsreport状态下,我还没有能解决,我想要在每一格内显示不同的颜色,希望你有帮助我
    barton: 你的方法是一个办法,但我一般不用别人的控件,原因很多,在这里谢了
    由于Venne的启发性回答,我决定先给他20分,
    现在问题变为
    ListView的vsreport状态下如何改变每一格的显示
    希望大家继续支持我 
      

  7.   

    ListView在vsreport风格下改变每一格的显示是控制是修改SubItems.procedure SetCell(ListView: TListView; Row, Col: Integer; const Value: string);
    begin
      if Col = 0 then
        ListView.Items[Row].Caption := Value
      else begin
        while ListView.Items[Row].SubItems.Count < Col - 2 do
          ListView.Items[Row].SubItems.Add('');
        ListView.Items[Row].SubItems[Col - 1] := Value;
      end
    end;
      

  8.   

    想挣你另外30分啊!  :)改变LISTVIEW的界面也是可行的。以下是一段代码。你可使用它来扩展你的需要,例如有很多SUBITEM的时候。还有,在画选择高亮时,代码可能不是非常好,你可能需要修改,但是它确实能工作。
    这不算一段好的代码,但希望对你有帮助。只要在表单上放一个LISTVIEW和一个BUTTON就可以了。另外,在LISTVIEW里预先放5个ITEM。我没做错误检测。
    LISTVIEW开始的状态是普通状态,点击按钮后增加两个列并且转为REPORT状态。
    procedure TForm1.Button1Click(Sender: TObject);
    var
      i:integer;
      NowListItem:TListItem;
      NewColumn:TListColumn;
    begin
       NewColumn:=ListView1.Columns.Add;
       NewColumn.Caption :='1';
       NewColumn.Width :=ListView1.Width div 2;
       NewColumn:=ListView1.Columns.Add;
       NewColumn.Caption :='2';
       NewColumn.Width :=ListView1.Width div 2;  for i:=0 to 4 do begin
        NowListItem:=ListView1.Items[i];
        NowListItem.SubItems.Add(NowListItem.Caption +'-1');
      end;  ListView1.ViewStyle :=vsReport;
      Button1.Enabled :=false;end;procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView;
      Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
    var
      Rect:Trect;
    begin
      DefaultDraw:=false;
      Rect:=Item.DisplayRect( drBounds );
      With Sender as TListView do begin
        case item.Index of  //行数控制
        0,2,4:begin
          if   cdsSelected in State then begin   //高亮判断
           canvas.brush.Color :=clHighlight;
           Canvas.font.Color :=clWhite;
          end else begin
           Canvas.Brush.Color :=rgb(255,222,222);
           Canvas.font.Color :=clBlack;
          end;
        end;
        1,3:begin
          if   cdsSelected in State then begin
           canvas.brush.Color :=clHighlight;
           Canvas.font.Color :=clWhite;
          end else begin
           Canvas.Brush.Color :=rgb(222,222,255);
           Canvas.font.Color :=clBlack;
          end;
        end;
        end;
        Canvas.FillRect (Rect);
        Canvas.brush.Style :=bsClear;
        Canvas.TextRect (Rect,rect.left,rect.top,item.Caption);
        if ListView1.ViewStyle =vsReport then begin
          Canvas.TextRect (Rect,(Rect.left+(Rect.right-rect.left)div 2),rect.top,
                           item.SubItems.Text );
        end;
      end;
    end;
      

  9.   

    好样的!Venne!!
    尽管在你出第二个贴之前,我已经自己完成了的LISTVIEW的显示问题
    但我还是要告诉你,你赚到了另外的30分,
    你新出的贴虽然笨重了一点且不通用,但还是实现了分行换色显示和
    SUBITEMS的显示,这完全达到我的要求
    目前,国人在自己软件的包装上还不是很重视,我希望写的软件能在
    这方面有所进步。近来我很忙,希望有时间时再和大家讨论美化界面
    的问题!
    本论题到圆满结束!!