定义一个 
type
  tmydbgrid = class(TDBGrid)
  public
    { Public declarations }
    Constructor Create(Aowner:TComponent);Override;
    Destructor Destroy;Override;
    procedure DrawColumnCell(const Rect: TRect; DataCol: Integer;
        Column: TColumn; State: TGridDrawState); override;
    Procedure KeyPress(var Key: Char);Override;
    procedure Invalidate; override;
  end;procedure Register;
implementationprocedure Register;
begin
  RegisterComponents('Data Controls', [tmydbgrid]);
end;{ tmydbgrid }constructor tmydbgrid.Create(Aowner: TComponent);
begin
  inherited Create(Owner);
  FixedColor:=clskyblue;//RGB(69,142,186);
end;destructor tmydbgrid.Destroy;
begin
  inherited destroy;
end;procedure tmydbgrid.DrawColumnCell(const Rect: TRect; DataCol: Integer;
  Column: TColumn; State: TGridDrawState);
begin
  inherited;
    with Canvas do //画 cell 的边框
  begin
    Pen.Color :=clteal; //定义画笔颜色(蓝色)
    MoveTo(Rect.Left, Rect.Bottom); //画笔定位
    LineTo(Rect.Right, Rect.Bottom); //画蓝色的横线
    MoveTo(Rect.Right, Rect.Top); //画笔定位
    LineTo(Rect.Right, Rect.Bottom); //画绿色的竖线
  end;
  if DataSource.DataSet.RecNo mod 2 = 0 then  //填充底色
    Canvas.Brush.Color :=ClCream
  else
    Canvas.Brush.Color := clred;
    DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;procedure tmydbgrid.Invalidate;
begin
  inherited;
 // Perform(CM_INVALIDATE,1, 0);
end;procedure tmydbgrid.KeyPress( var Key: Char);
begin
  if key=#13 then
  begin
    if SelectedIndex<FieldCount-1 then
      SelectedIndex:=SelectedIndex+1
    else if Datasource.DataSet.State=dsInsert  then
    begin
      Datasource.DataSet.Append;
      SelectedIndex:=0;
    end;
  end ;
  inherited;
end;
end. 当把控件放到FORM上的时候(设计期),出现
annot focus a disabled or invisible window 
  
help

解决方案 »

  1.   

    inherited Create(Owner);
    改為:
     inherited;
     inherited destroy;
    改為:
     inherited;procedure tmydbgrid.Invalidate;//去掉, 但這個不重要
      

  2.   

    inherited Create(Owner);
    改為:
     inherited;
     inherited destroy;
    改為:
     inherited;
    这个是错的,不用改,保存你原来那样就行了
    -------------------------
    procedure tmydbgrid.Invalidate;//去掉, 但這個不重要
    这个就对了
    ---------------------------
    以下是我的观点:
    首先你的这个控件从TCustomDBGrid继承下来好一些,可以灵活地控件属性的显示
    而TDBGrid只是简单地把TCustomDBGrid的属性显化出来而已,你可以看一下源码其次你的destroy并没有做什么事情,这里不要也可以的,至于Create,用你原来那个就可以了Invalidate有没有执行什么任务呢,没有的话去掉吧KeyPress中承继应该是inherited KeyPress(Key);DrawColumnCell中的的继承写在后面好一些吧,而且这样的形式:
    inherited DrawColumnCell(Rect,DataCol, Column,State);
    至于其他,似乎没有什么了,再看看吧。