在Delphi的DBGrid中刺进别的可视组件-Delphi-优质IT资源分享社区

admin
管理员
管理员
  • UID1
  • 粉丝29
  • 关注4
  • 发帖数581
  • 社区居民
  • 忠实会员
  • 原创写手
阅读:214回复:0

  在Delphi的DBGrid中刺进别的可视组件

楼主#
更多 发布于:2016-06-19 12:18

 Delphi供给了功能强大的
DBGrid组件,以便利进行数据库使用程序设计。可是假如咱们仅仅使用DBGrid组件,每一个取得焦点(Grid)仅仅一个简略的文本编辑框,不便使用户输入数据。Delphi也供给了一些别的数据组件来便使用户输入,比方DBComboBox,DBCheckBox等组件,但这些组件却没有DBGrid功能强大。Delphi能不能象Visual
Foxpro那样让DBGrid中取得焦点网格可所以其它可视数据组件以便使用户呢?本来咱们能够经过在DBGrid中刺进别的可视组件来完成这一点。
Delphi对DBGrid处理的内部机制,即是在网格上起浮一个组件——DBEdit组件。你输入数据的网格本来是起浮DBEdit组件,别的未取得焦点当地不过是图画算了。所以,在DBGrid中刺进别的可视组件即是在网格上起浮一个可视组件。因而任何组件,包含从简略的DbCheckBox到杂乱的对话框,都能够在DBGrid中刺进。下面即是一个如何在DBGrid中刺进DBComboBox组件的过程,选用相同的方法能够刺进别的组件。
1、 在Delphi 4.0中新建一个项目。
2、 别离拖动的Data Access组件板上DataSource、Table,Data
Controls组件板上DBGrid,DBComboBox四个组件到Form1上。
3、 设置各个组件的特点如下:
rcf1目标特点设定植
Form1Caption在DBGrid中刺进SpinEdit组件示例
DataSource1DataSetTable1
Table1DatabaseNameDBDEMOS
TableNameteacher.DBF ActiveTrue
DBGrid1DataSourceDataSource1
DBComboBox1DataFieldSEX
DataSourceDataSource1
VisibleFalse
Strings Items.男| 女
注意:我在这里用了Teacher.dbf,那是反映教职工的性别,只能是“男”或者是“女”。
4、 DrawDataCell事情是制作单元格,当取得焦点网格所对应的字段与组合框所对应的字段共同时,移动组合框到取得焦点的网格上,并且
使组合框可视,然后到达在DBGrid指定列上显现DBComboBox的功能。设置DBGrid1的OnDrawDataCell事情如下:
procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
Field: TField; State: TGridDrawState);
begin
if (gdFocused in State) then
begin
if (Field.FieldName = DBComboBox1.DataField ) then
begin
DBComboBox1.Left := Rect.Left + DBGrid1.Left;
DBComboBox1.Top := Rect.Top + DBGrid1.top;
DBComboBox1.Width := Rect.Right - Rect.Left;
DBComboBox1.Height := Rect.Bottom - Rect.Top;
DBComboBox1.Visible := True;
end;
end;
end;
5、 DBGrid指定单元格未取得焦点时不显现DBComboBox,设置DBGrid1的OnColExit事情如下:
procedure TForm1.DBGrid1ColExit(Sender: TObject);
begin
If DBGrid1.SelectedField.FieldName = DBComboBox1.DataField then
begin
DBComboBox1.Visible := false;
end;
end;
6、
当DBGrid指定列取得焦点时DrawDataCell事情仅仅制作单元格,并显现DBComboBox,可是DBComboBox并没有取得焦点,数据的输入还是在单元格进步行。在DBGrid1的KeyPress事情中调用SendMessage这个
Windows API函数将数据输入传输到DBComboBox上,然后到达在DBComboBox进步行数据输入。因而还要设置KeyPress事情如下:
procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char);
begin
if (key [email protected]; [email protected]; chr(9)) then
begin
if (DBGrid1.SelectedField.FieldName =DBComboBox1.DataField) then
begin
DBComboBox1.SetFocus;
SendMessage(DBComboBox1.Handle, WM_Char, word(Key), 0);
end;
end;
end;
程序在中文Windows 98,Delphi 4.015 下调试经过。期望这篇文章能使你能够愈加便利快捷的开发数据库使用程序。






[font=Tahoma  ]
优质IT资源分享社区为你提供此文。
本站有大量优质Delphi教程视频,资料等资源,包含Delphi基础教程,高级进阶教程等等,教程视频资源涵盖传智播客,极客学院,达内,北大青鸟,猎豹网校等等IT职业培训机构的培训教学视频,价值巨大。欢迎点击下方链接查看。
Delphi教程视频
优质IT资源分享社区(www.itziyuan.top)
一个免费,自由,开放,共享,平等,互助的优质IT资源分享网站。
专注免费分享各大IT培训机构最新培训教学视频,为你的IT学习助力!

!!!回帖受限制请看点击这里!!!
!!!资源失效请在此版块发帖说明!!!

[PS:按 CTRL+D收藏本站网址~]

——“优质IT资源分享社区”管理员专用签名~

本版相似帖子

游客