procedure Tcl_cgstore.DBGridEh1DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumnEh;
  State: TGridDrawState);
begin
   Case adoquery1.RecordCount Mod 2 = 0 of
        True: DbGrideh1.Canvas.Brush.Color:=rgb(255,245,249);
        False: DbGrideh1.Canvas.Brush.Color:=rgb(247,247,239);
  End;
 if ((State = [gdSelected]) or (State=[gdSelected,gdFocused])) then
    with dbgrideh1 do
       begin
        Canvas.Brush.color:=rgb(210,234,249);
        Canvas.Font.Color:=clBlack;
        Canvas.Pen.Mode:=pmMask;
        DefaultDrawColumnCell(Rect,DataCol,Column,State);
       end;
end;
这段代码多个窗口的dbgrideh用到 我想写个公共过程,在这向各位请教了 

解决方案 »

  1.   

    可以把这段代码封装在基类窗口中,然后其它窗口都从该窗口继承。
    adoquery1 可以用 TDBGridEh(sender).datasource.dataset 替代。
      

  2.   

    procedure DrawDbgrudEHColumn (Sender:   TObject; 
        const   Rect:   TRect;   DataCol:   Integer;   Column:   TColumnEh; 
        State:   TGridDrawState); 
    begin  if (TDBGridEH(Sender).DataSource.DataSet.RecNo  Mod   2=0) then 
        TDBGridEH(Sender).Canvas.Brush.Color:=rgb(255,245,249)
      else
        TDBGridEH(Sender).Canvas.Brush.Color:=rgb(247,247,239); 
      
      if ((State   =   [gdSelected])   or   (State=[gdSelected,gdFocused]))   then 
        with   TDBGridEH(Sender) do 
        begin 
          Canvas.Brush.color:=rgb(210,234,249); 
          Canvas.Font.Color:=clBlack; 
          Canvas.Pen.Mode:=pmMask; 
          DefaultDrawColumnCell(Rect,DataCol,Column,State); 
      end; 
    end;
      

  3.   

     procedure DBGridEhDrawColumnCell(Sender: TObject;
      const Rect: TRect; DataCol: Integer; Column: TColumnEh;
      State: TGridDrawState);
        begin
          if (TDBGridEH(Sender).DataSource.DataSet.RecNo Mod 2=0) then
            TDBGridEH(Sender).Canvas.Brush.Color:=rgb(255,245,249)
          else
            TDBGridEH(Sender).Canvas.Brush.Color:=rgb(247,247,239);
          if ((State = [gdSelected])or(State=[gdSelected,gdFocused]))then
            with TDBGridEH(Sender)   do
            begin
                Canvas.Brush.color:=rgb(210,234,249);
                Canvas.Font.Color:=clBlack;
                Canvas.Pen.Mode:=pmMask;
                DefaultDrawColumnCell(Rect,DataCol,Column,State);
        end;
    end;
    错误提示: [Error] pubfunc.pas(30): Undeclared identifier: 'TRect'
             [Error] pubfunc.pas(592): Undeclared identifier: 'rgb'
    我引用的单元
      uses
       unit1,ADODB,Un_datamodule,StdCtrls,SysUtils,Dialogs,DBGridEhImpExp,
       GridsEh,DBGridEh,Classes,Graphics;最后如果成功 应在其它窗口怎么调用这个过程呢 那么多参数 应怎样给值呢 
      

  4.   

     procedure   DBGridEhDrawColumnCell;
       var
    Sender:TObject;Rect:TRect;DataCol:Integer;Column:TColumnEh;State:TGridDrawState;
      begin
          if   (TDBGridEH(Sender).DataSource.DataSet.RecNo   Mod   2=0)   then
              TDBGridEH(Sender).Canvas.Brush.Color:=rgb(255,245,249)
          else
              TDBGridEH(Sender).Canvas.Brush.Color:=rgb(247,247,239);
          if   ((State   =   [gdSelected])or(State=[gdSelected,gdFocused]))then
              with   TDBGridEH(Sender)       do
              begin
                      Canvas.Brush.color:=rgb(210,234,249);
                      Canvas.Font.Color:=clBlack;
                      Canvas.Pen.Mode:=pmMask;
                      DefaultDrawColumnCell(Rect,DataCol,Column,State);
      end;
    end;
      我改了下参数 可是我调用时就不行了 提示地址错误  
      

  5.   

    procedure Tcgstore_find.DBGridRePaint(DB1:TDBGridEH;
      const Rect: TRect; DataCol: Integer; Column: TColumnEh;
      State: TGridDrawState);
    begin
        case db1.DataSource.DataSet.RecNo mod 2=0 of
             True: Db1.Canvas.Brush.Color:=rgb(255,245,249);
             False: Db1.Canvas.Brush.Color:=rgb(247,247,239);
         end;
       if ((State = [gdSelected]) or (State=[gdSelected,gdFocused])) then
           with db1 do
              begin
                 Canvas.Brush.color:=rgb(210,234,249);
                 Canvas.Font.Color:=clBlack;
                 Canvas.Pen.Mode:=pmMask;
                 DefaultDrawColumnCell(Rect,DataCol,Column,State);
              end;
      end;
    提示错误 在这一行DefaultDrawColumnCell(Rect,DataCol,Column,State);
    [Error] Un_cgstore_find.pas(377): Incompatible types