在Delphi的DBGrid中插入其他可视组件

zqy6888

zqy6888

2016-02-19 17:26

今天天气好晴朗处处好风光,好天气好开始,图老师又来和大家分享啦。下面给大家推荐在Delphi的DBGrid中插入其他可视组件,希望大家看完后也有个好心情,快快行动吧!

  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组件示例DataSource1DataSetTable1Table1DatabaseNameDBDEMOS TableNameteacher.DBF ActiveTrueDBGrid1DataSourceDataSource1DBComboBox1DataFieldSEX DataSourceDataSource1 VisibleFalse Strings Items. 男| 女

  注意:我在这里用了Teacher.dbf,那是反映教职工的性别,只能是男或者是女。

  4、 DrawDataCell事件是绘制单元格,当获得焦点网格所对应的字段与组合框所对应的字段一致时,移动组合框到获得焦点的网格上,并且

  使组合框可视,从而达到在DBGrid指定列上显示DBComboBox的功能。设置DBGrid1的OnDrawDataCell事件如下:

  

procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect; Field: TField; State: TGridDrawState);beginif (gdFocused in State) thenbeginif (Field.FieldName = DBComboBox1.DataField ) thenbeginDBComboBox1.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);beginIf DBGrid1.SelectedField.FieldName = DBComboBox1.DataField thenbeginDBComboBox1.Visible := false;end;end;

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

  6、 当DBGrid指定列获得焦点时DrawDataCell事件只是绘制单元格,并显示DBComboBox,但是DBComboBox并没有获得焦点,数据的输入还是在单元格上进行。在DBGrid1的KeyPress事件中调用SendMessage这个 Windows API函数将数据输入传输到DBComboBox上,从而达到在DBComboBox上进行数据输入。因此还要设置KeyPress事件如下:

  

procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char);beginif (key $#@60; $#@62; chr(9)) thenbeginif (DBGrid1.SelectedField.FieldName =DBComboBox1.DataField) thenbeginDBComboBox1.SetFocus;SendMessage(DBComboBox1.Handle, WM_Char, word(Key), 0);end;end;end;

  程序在中文Windows 98,Delphi 4.015 下调试通过。希望本文能使你可以更加方便快捷的开发数据库应用程序。

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)
展开更多 50%)
分享

猜你喜欢

在Delphi的DBGrid中插入其他可视组件

编程语言 网络编程
在Delphi的DBGrid中插入其他可视组件

组件技术在Delphi中的实现(1)

Delphi
组件技术在Delphi中的实现(1)

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

Delphi中数据网格DBGrid应用

Delphi
Delphi中数据网格DBGrid应用

Delphi中实现DBGrid列宽度自动调整

编程语言 网络编程
Delphi中实现DBGrid列宽度自动调整

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

在DELPHI中利用API实现网格内组件的嵌入

Delphi
在DELPHI中利用API实现网格内组件的嵌入

在DBGrid中实现Copy、Paste功能

编程语言 网络编程
在DBGrid中实现Copy、Paste功能

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

EFI硬盘怎么安装Windows8?

EFI硬盘怎么安装Windows8?

StringGrid制作只读列

StringGrid制作只读列
下拉加载更多内容 ↓