先在GRID里面放入一个BUTTON
在ONSELECTCELL事件中写代码,根据事件的参数,你可以得到当前CELL的宽度,和高度,既ARect:TRect;
with Button do
begin
 Left:=ARect.Left+1;
 Top:=ARect.Top+1;
 Width:=ARect.Right-ARect.Left+1;
 Height:=ARect.Bottom-ARect.Top+1;
 Visible:=True;
 SetFocus; 
end;

解决方案 »

  1.   

    我需要的事每个cells都有checkbox!!有人知道吗???
      

  2.   

    试一试吧,稍微有点麻烦,不过你所要的效果都能达到。
        procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
          DataCol: Integer; Column: TColumn; State: TGridDrawState);
        procedure DBGrid1CellClick(Column: TColumn);
        procedure DBGrid1ColEnter(Sender: TObject);
        procedure FormCreate(Sender: TObject);
      private
        OldOptions: TDBGridOptions;
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.DFM}procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    var
      R: TRect;
    begin
      if SameText(Column.FieldName, 'AAA') then
      begin
        with DBGrid1.Canvas do
        begin
          FillRect(Rect);
          R := Rect;
          InflateRect(R, -2, -2);
          if Column.Field.AsString <> 'Y' then
            DrawFrameControl(Handle, R, DFC_BUTTON, DFCS_BUTTONCHECK or DFCS_FLAT)
          else
            DrawFrameControl(Handle, R, DFC_BUTTON, DFCS_BUTTONCHECK or DFCS_FLAT or DFCS_CHECKED);
        end;
      end;
    end;procedure TForm1.DBGrid1CellClick(Column: TColumn);
    begin
      if SameText(Column.FieldName, 'AAA') then
      begin
        DBGrid1.DataSource.DataSet.Edit;
        if Column.Field.AsString <> 'Y' then
          DBGrid1.DataSource.DataSet.FieldByName('AAA').AsString := 'Y'
        else
          DBGrid1.DataSource.DataSet.FieldByName('AAA').AsString := 'N';
        DBGrid1.DataSource.DataSet.Post;
      end;
    end;procedure TForm1.DBGrid1ColEnter(Sender: TObject);
    begin
      if SameText(DBGrid1.SelectedField.FieldName, 'AAA') then
        DBGrid1.Options := DBGrid1.Options - [dgEditing]
      else
        DBGrid1.Options := OldOptions;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      OldOptions := DBGrid1.Options;
    end;