在向该表中加入记录的同时对值进行分析,如果满足一定的条件,则该条记录的颜色就会发生相应的变化。试过很多属性,只能把表格中所有记录的颜色改变,请各位大侠指教,尽可能给的答案详细些,谢谢了!!!

解决方案 »

  1.   

    参照下面代码试一下行不:
    procedure TfrmEhlib.dgStoreDrawColumnCell(Sender: TObject;
      const Rect: TRect; DataCol: Integer; Column: TColumn;
      State: TGridDrawState);
    begin
      if Odd(aqStore.RecNo + 1) then  {隔行变色}
      begin
        dgStore.Canvas.Brush.Color := clCream;
        dgStore.Canvas.Font.Color := clNavy;
      end;
      if aqStore.FieldByName('scount').asinteger > 80 then  {附合条件行变色}
        dgStore.Canvas.brush.Color := clLime;
      if Column.FieldName = 'onshow' then  {附合条件单元格变色}
        if Column.Field.AsBoolean = true then
          dgStore.Canvas.brush.Color := $00FFBB95;
      if State = [gdSelected, gdFocused] then  {当前所选单元格变色}
      begin
        dgStore.Canvas.Brush.Color := clSkyBlue;
        dgStore.Canvas.Font.Color := clBlack;
      end;  dgStore.DefaultDrawColumnCell(Rect, DataCol, Column, State);  {生效}
    end;
      

  2.   

    aqStore: TADOQuery;
    dgStore: TDBGrid;
    dgStore.DataSource.DataSet 为 aqStore
      

  3.   

    procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    begin
      if ARow>0 then begin
        if ARow mod 2 = 0 then
          StringGrid1.Canvas.Brush.Color := $00DBDBDB
        else
          StringGrid1.Canvas.Brush.Color := clWhite;
        StringGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,'');
      end;
    end;
    (注:此為隔行变色、供参考)
      

  4.   

    to: weizi2000  我用的控件是stringgrid,你给的例子是dbgrid的,使用的时候不是一样的,我按照方法试过了,不能用
    to:ailibuli   按照给的方法试了,是隔行变色,不过每行的记录都显示不了,如何把底色和字体的颜色分开呢
    请大虾不吝赐教
      

  5.   

    if query.dataset.recno div 2=0 then
    stringgrid.canvas.brush.color:='颜色'
    else
    stringgrid.canvas.brush.color:='颜色'
      

  6.   

    http://expert.csdn.net/Expert/topic/2974/2974082.xml?temp=.8416712
      

  7.   

    我试过 stringgrid.canvas.brush.color:='颜色'以及 StringGrid1.Canvas.Font.Color := clRed; 并且换了好几种颜色,
    但是字体要么是看不见,要么出来了颜色没有变,不知到底该怎么办
      

  8.   

    procedure TfrmProviderStatus.StrGridMainDrawCell(Sender: TObject; ACol,
      ARow: Integer; Rect: TRect; State: TGridDrawState);
    var
      tempStr :string;
      StrHeight :integer;
       s:string;
     r:TRect;
    begin
      tempStr:=trim(StrGridMain.Cells[ACol,ARow]);
      if (ACol=1) and (tempStr<>'')then
      begin
        with StrGridMain.Canvas do
        begin
          StrHeight:=TextHeight(tempStr);
          Brush.Color:=RGB(100,128,192); 
          FillRect(Rect);
          Pen.Color:=RGB(192,192,192);
          Pen.Width:=1;
          Rectangle(Rect);
          Font.Color:=RGB(0,0,200);
          Font.Style:=[fsBold,fsUnderline]; //字体加粗,加下划线     
          TextOut(Rect.Left+2,Rect.Top+(Rect.Bottom-Rect.Top-StrHeight) div 2,tempStr);
          TextOut(Rect.Left+2,Rect.Top+(Rect.Bottom-Rect.Top-StrHeight) div 2,tempStr);
        end;
      end;
      //--单元格居中
      with StrGridMain do
      begin
        Canvas.FillRect(Rect);
        s:=Cells[ACol,ARow];
        r:=Rect;
        DrawText(Canvas.Handle,PChar(s),Length(s),r,DT_CENTER or DT_SINGLELINE or DT_VCENTER);
      end;end;
      

  9.   

    procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    begin
      if ARow>0 then begin
        if ARow mod 2 = 0 then
          StringGrid1.Canvas.Brush.Color := $00DBDBDB
        else
          StringGrid1.Canvas.Brush.Color := clWhite;
        StringGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,stringgrid1.cell[acol,arow]);
      end;
    end;