因为 引用 CheckBox1不要 双击后,出现 0的Edit显示 所以,去掉 dgEditing  

DBGrid1.Options:= DBGrid1.Options-[ dgEditing];   

所有DBGrid1的Editor控件,事件 都 要自己写,包括 默认Edit

procedure TForm13.DBGrid1ColExit(Sender: TObject); // 退出 时,不显示 编辑 控件
begin
  if DBGrid1.SelectedField.FieldName = 'aedit' then         edit1.Visible := False;
end;
//============================================================= ===
procedure TForm13.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); // CheckBox1 列 要用到的
begin
  if (gdFocused in State) then  begin
    if (Column.Field.FieldName = 'aedit') then
      with edit1 do
      begin
        Left := Rect.Left + DBGrid1.Left + 1;
        Top := Rect.Top + DBGrid1.Top + 1;
        Width := Rect.Right - Rect.Left + 2;
        Width := Rect.Right - Rect.Left + 2;
        Height := Rect.Bottom - Rect.Top + 2;

        edit1.Text:= Column.Field.AsString; // 数据 传给   Edit1
        Visible := True;
      end;
  end;
end;
//============================================================= ===
procedure TForm13.DBGrid1KeyPress(Sender: TObject; var Key: Char);
// 将  DBGrid1的键盘 信息传 给   edit1
begin
  if (Key = Chr(9)) then      Exit;        //TAB 键 直接退出

//==============================edit1=====================================
  if (DBGrid1.SelectedField.FieldName = 'aedit') then
  begin
    edit1.SetFocus;
    SendMessage(edit1.Handle, WM_Char, word(Key), 0);
  end;
end;
//=====================================================
procedure TForm13.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
    if (Key = Chr(13)) then      begin
      edit1.Visible := False;
      DBGrid1.DataSource.Edit;
      DBGrid1.SelectedField.Value := edit1.Text;
      FDQuery1.Post;
    end;
end;
//===========================================================