dbgrid1中,怎样把ComboBox1嵌在字段(日期)所对应的第一个单元格中?
而且,ComboBox1的大小随着单元格的变化而变化!
急谢谢!

解决方案 »

  1.   

    oncellclick里面
    动态的设定combobox1的left和top还有width,让它看起来好像嵌在那里
      

  2.   

    下面的代码是在dbgrid里嵌入checkbox.不是我说的方法 ..转贴,呵呵,懒的写 type   TForm1 = class(TForm)    DataSource1: TDataSource;    Table1: TTable;    DBGrid1: TDBGrid;    procedure DBGrid1DrawColumnCell(Sender: TObject;          const Rect: TRect; DataCol: Integer;          Column: TColumn; State: TGridDrawState);    procedure DBGrid1ColEnter(Sender: TObject);    procedure DBGrid1ColExit(Sender: TObject);    procedure DBGrid1CellClick(Column: TColumn);    procedure DBGrid1KeyDown(Sender: TObject; var Key: Word;          Shift: TShiftState);   private    { Private declarations }    OriginalOptions : TDBGridOptions;    procedure SaveBoolean;   public    { Public declarations }   end;  {...}  procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject;           const Rect: TRect; DataCol: Integer;           Column: TColumn; State: TGridDrawState);  const   // 这个整数值将按照布尔值返回,并送入数组   CtrlState : array[Boolean] of Integer = (DFCS_BUTTONCHECK,DFCS_BUTTONCHECK or DFCS_CHECKED);  begin   //确保只有在逻辑字段才能插入组件   if Column.Field.DataType = ftBoolean then   begin    DBGrid1.Canvas.FillRect(Rect);    DrawFrameControl(DBGrid1.Canvas.Handle,             Rect,             DFC_BUTTON,             CtrlState[Column.Field.AsBoolean]);   end;  end;  procedure TForm1.DBGrid1ColEnter(Sender: TObject);  begin   // 确保该栏是逻辑字段   if DBGrid1.SelectedField.DataType = ftBoolean then   begin    OriginalOptions := DBGrid1.Options;    DBGrid1.Options := DBGrid1.Options - [dgEditing];   end;  end;  procedure TForm1.DBGrid1ColExit(Sender: TObject);  begin   //确保该栏是逻辑字段   if DBGrid1.SelectedField.DataType = ftBoolean then    DBGrid1.Options := OriginalOptions;  end;  procedure TForm1.DBGrid1CellClick(Column: TColumn);  begin   //确保该栏是逻辑字段   if DBGrid1.SelectedField.DataType = ftBoolean then    SaveBoolean();  end;  procedure TForm1.DBGrid1KeyDown(Sender: TObject;             var Key: Word; Shift: TShiftState);  begin   //确保该栏是逻辑字段和空格键在键盘中被敲击   if ( Key = VK_SPACE ) and     ( DBGrid1.SelectedField.DataType = ftBoolean ) then    SaveBoolean();  end;  procedure TForm1.SaveBoolean;  begin   DBGrid1.SelectedField.Dataset.Edit;   DBGrid1.SelectedField.AsBoolean :=not DBGrid1.SelectedField.AsBoolean;   DBGrid1.SelectedField.Dataset.Post;  end;