我用一个全局变量与组字段相比较不同的时候就换一个颜色,实现了隔组换色,但是一点又全变了,有没有好的方法

解决方案 »

  1.   

    procedure TForm1.DBGridEh1DrawColumnCell(Sender: TObject;
      const Rect: TRect; DataCol: Integer; Column: TColumnEh;
      State: TGridDrawState);
    var
      i: Integer;
    begin
      i := DBGridEh1.datasource.dataset.FieldByName('特定字段 ').AsInteger;
      //i     ---   颜色标地,根据这个选择颜色
      if i = XXXXXXXXXXXXXXX then
        FondGrd.Canvas.Brush.Color := clFuchsia
      else
        FondGrd.Canvas.Brush.Color := clBlack;
      DBGridEh1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
    end;
      

  2.   

    没必要
    procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    var
      pt: TPoint;
      coord: TGridCoord;
    begin
      pt.X := Rect.Left;
      pt.Y := Rect.Top;
    //  pt := ClientToScreen(pt);
      coord := (Sender as TDBGrid).MouseCoord(pt.X, pt.Y);
      if coord.Y mod 2 = 1 then
        (Sender as TDBGrid).Canvas.Brush.Color := clRed
      else
        (Sender as TDBGrid).Canvas.Brush.Color := clWhite;  (Sender as TDBGrid).DefaultDrawColumnCell(Rect, DataCol, Column, State);
    end;
      

  3.   

    上面 pt 没必要了,之前以为 MouseCoord 用的是是绝对座标
      

  4.   

    根数组没关系的:
    procedure   TForm1.DBGridEh1DrawColumnCell(Sender:   TObject; 
        const   Rect:   TRect;   DataCol:   Integer;   Column:   TColumnEh; 
        State:   TGridDrawState); 
    begin 
        if   你的判断条件  then 
            FondGrd.Canvas.Brush.Color   :=   clFuchsia 
        else 
            FondGrd.Canvas.Brush.Color   :=   clBlack; 
        DBGridEh1.DefaultDrawColumnCell(Rect,   DataCol,   Column,   State); 
    end;