为什么要放一个Button控件,你是想点击TDBGrid的列标题吗?如果是的话你可以在TDBGrid的OnTitleClick事件中进行编码;如果不是的话,没有必要将TButton控件放在TDBGrid的列中
解决方案 »
- delphi写的页签控件(继承RzPageControl)如何在控件的右键菜单中生成新页签
- 再求一段SQL语句
- delphi写的程序如何做测试?
- 关于使用TIdTCPServer做服务器端的问题,急,在线等,分不够再加
- 请问如何把一个BYTE类型的数组存入Oracle的blob字段使用ADOQuery
- 救急阿~~~有关intraweb
- adoquery的error事件如何触发
- 如何在菜单项上添加其它控件(如EDIT)?高手请进!
- 用delphi7.0如何实现xp风格地菜单?
- 如何制作UDP代理服务器软件?
- 用什么函数可以使一个数除一个数的得数保留两位小数(如:1/3=0.33)
- 请教各位高手一个问题
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; 以上源程序在PWIN+DELPHI5.0环境调试通过,可以直接引用。
with Sender as TDBGrid do
DrawFrameControl(Canvas.Handle, Rect, 0, 0);