51代码网ORACLEMYSQLSQL SERVER其它数据库java/jspasp/asp.netC/C++/VC++APP应用其它语言服务器应用
您现在的位置: 51代码网 >> 其它 >> 文章正文

DBGRID着色的顺序问题

更新时间:2012-3-4:  来源:51代码网

procedure TFrm_Appoint.FormCreate(Sender: TObject);
Var
        i:integer;
        DBGridEh_Name:string;
        Str_SQL:string;
        Str_Temp:string;
begin

      For i:=0 To Self.ComponentCount-1 do                             //设置TDBGridEh格式
            if Self.Components[i] is TDBGrid Then
                  raise Exception.Create('Program Error:Only Uses DBGridEh!')          //异常处理
            else  if self.Components[i] is TDBGridEh Then
            Begin
                  TDBGridEh(Components[i]).OnDrawColumnCell:=grdDrawColumnCell;        //把数据行显示方法赋给表格
            End;

end;

 


Procedure TFrm_Appoint.grdDrawColumnCell(Sender:Tobject;
            const Rect:TRect;DataCol:Integer;Column:TColumnEh;
                State:TGridDrawState);
Begin
    With TDBGridEh(Sender) do                                                    //如果对象是 TDBGridEh,进行下边的操作
  Begin
       if ((State=[gdSelected])or(State=[gdSelected,gdFocused])) Then   //设置被选中单元格的颜色
       Begin
            Canvas.Brush.Color:=$00C08080;                              //笔刷设置背景色
       End
       Else
       Begin                                                           // 根据数据集单双行设置不同的颜色
            if DataSource.DataSet.RecNo mod 2<> 0 Then
               Canvas.Brush.Color:=clWhite
            else
                Canvas.Brush.Color:=$00CFFEFD;
       End;
       DefaultDrawColumnCell(Rect,DataCol,Column,State);
  End;
End;

procedure TFrm_Appoint.DBGridSingle_RDrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumnEh;
  State: TGridDrawState);
begin
  inherited;
      if SP_Period.FieldByName('menCount').AsString=SP_Period.FieldByName('realCount').AsString then
      begin
            DBGridSingle_R.Canvas.Font.Color := clRed;
            DBGridSingle_R.DefaultDrawColumnCell(Rect,DataCol,Column,State);
      end;

我必须要把 OnCreate中 TDBGridEh(Components[i]).OnDrawColumnCell:=grdDrawColumnCell; 注释掉,
procedure TFrm_Appoint.DBGridSingle_RDrawColumnCell 里边的代码才起作用。

着色,是不是有个顺序啊? 我本希望有些代码可以共用

DBGrid着色不需要在Form的create事件里面写代码。

如果说希望共享代码,可以挂接相同的事件。
或者将DBGrid做为参数传入
让不同的表格,享用相同的代码段:
1.TDBGridEh(Components[i]).OnDrawColumnCell:=grdDrawColumnCell; 这个方法就是啊
2.或者写成函数,在每个DrawColumnCell中调用
3.如果是继承窗体的话:用grdDrawColumnCell事件上加上Virtual,和OverRide可以解决
Column.Field.FieldName判断列,行的话通过DataCol来判断

  • 上一篇文章:
  • 下一篇文章: 没有了
  • 赞助商链接
    推荐文章
  • 此栏目下没有推荐文章
  • {
    设为首页 | 加入收藏 | 友情链接 | 网站地图 | 联系站长 |