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;end;
我必须要把 OnCreate中 TDBGridEh(Components[i]).OnDrawColumnCell:=grdDrawColumnCell; 注释掉,
procedure TFrm_Appoint.DBGridSingle_RDrawColumnCell 里边的代码才起作用。着色,是不是有个顺序啊? 我本希望有些代码可以共用
const Rect: TRect; DataCol: Integer; Column: TColumnEh;
State: TGridDrawState);
begin
inherited;
With DBGridSingle_R 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; 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;end;
我现在只有写在一起,有什么办法可以让不同的表格,享用相同的代码段吗?
或者将DBGrid做为参数传入
1.TDBGridEh(Components[i]).OnDrawColumnCell:=grdDrawColumnCell; 这个方法就是啊
2.或者写成函数,在每个DrawColumnCell中调用
3.如果是继承窗体的话:用grdDrawColumnCell事件上加上Virtual,和OverRide可以解决