说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

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

HTML文档下载 WORD文档下载 PDF文档下载
在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对象 属性 设定植

Form1 Caption '在DBGrid中插入SpinEdit组件示例'

DataSource1 DataSet Table1

Table1 DatabaseName DBDEMOS

TableName 'teacher.DBF'

Active True

DBGrid1 DataSource DataSource1

DBComboBox1 DataField SEX

DataSource DataSource1

Visible False

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 < > 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 下调试通过。希望本文能使你可以更加方便快捷的开发数据库应用程序。

怎样使用PageUp、PageDown滚动窗体-Delphi资料 怎样制作全透明的窗口-Delphi资料 DELPHI:FormContainer简易手册 Delphi:用FormContainer渐变效果 Delphi4的窗口融合技术 Delphi使用技巧ABC Delphi使用技巧四则 DELPHI中自适应表单的实现 TList的用法-Delphi资料 不规则窗口的实现-Delphi资料 不用标题栏也移动窗体-Delphi资料 窗口建立和关闭时的特效-Delphi资料 窗口中状态行的显示-Delphi资料 动态提示的可视化实现-Delphi资料 动态修改显示器分辨率-Delphi资料 对数据库中的数据进行处理-Delphi资料 改变壁纸-Delphi资料 改变元件的视窗式样-Delphi资料 给MDI主窗口加背景-Delphi资料 更改StatusBar为黑底绿字-Delphi资料 画布的圆拷贝和直线拷贝-Delphi资料 回车替Tab下移控件-Delphi资料 获取系统颜色-Delphi资料 渐变色窗口背景-Delphi资料 控件深度投影和阴影效果的实现-Delphi资料 控制Delphi的窗口显示位置 控制Form不能放大、缩小、移动、关闭-Delphi资料 控制系统菜单-Delphi资料 利用Delphi实现支持窗体的自定义函数 轻轻松松在DELPHI3.0中实现三态按钮 全部窗体可使用鼠标移动-Delphi资料 VC6下如何向Oracle中添加和读取BLOB型的数据? 一个关于Delphi6和Delphi7的问题 请问怎么知道C# MSDN 里的每一个类,每一个方法是做什么用的? 问题挺多的?请不吝赐教!都是小问题! 输入光标的移动问题 菜鸟请教:请问如何打包成jar和jad文件? 关于Oracle存储大量二进制数据的问题, 有武汉的朋友么! 加我qq 7095682 看完《美丽人生》 帮帮我 一条菜虫问一个很菜的问题? 当数据库中没有图片时候该怎么办 关于时间掩码? 问题挺多的?请不吝赐教!都是小问题! Turbo c一定要安装在win98下吗 如何修改存储器参数,我的表会越来越大,原来用默认参数 看了下面的帖子后我自己的一点感受 我怎样定位我的涉及DataReader的表格? 如何制做半透明窗体,上面的控件也要能控制是否透明。 我要转行了,也许CODEING只是爱好,要把它做为职业,惨,,, 请问大家能不能推荐一本关于PHOTOSHOP 7.0 DREAMWEAVE MX 的书籍 一个简单的图像序列化存储 EDIT1.TEXT从用户接受的内容如何放进ARR 设计数据库时这样的情况应该如何处理 CFileFind::FindFile()的查找路径是怎么确定的? 很菜的问题 关于red hat9的小问题 不知是程序写多了还是失恋的缘故!我头上有一块地方不长头发了,医生说是斑秃!不知程序员里有斑秃的吗? 一IT美女的悲惨遭遇◎! .net2003的编译器如何为类添加消息映射啊???? JAVA的文本编辑,实现修改和排版 Jmai发送邮件问题? 高分求c++ test 我成功配置了一备用数据库,与主库连上了,可是主库坏了,我怎么打不开备用库啊? (SDK)怎样用SendMessage函数反选一个checkButton control(checked->unchecked)呢? 求救,为什么关于VB的帮助的事例看不到? 有拒绝爱情的吗?我还在念大学 做一个不是很大的网站,是用类好,还是用模块的好? 如何对本地机的共享文件夹设置密码 一个讨厌的QQ木马网站如何防治,最好有人能黑了它! 谁写得有能随机生成数字和字母的函数,借来用用? 快速排序的问题。求救 使用 CDatabase 读写 excel 文件的问题。 水园的朋友们,你们好!!!学校的网页!!! how can I show the correct word? 我的机出现了网络重名~~改IP也没用 庐山印象(ZT)----让我想起我小学写的作文哦!看了会起鸡皮疙瘩的! 请问谁有avphone控件3。0的破解版 学校的网页!!!! 500分! 求win2k下探测和阻塞ping的源码. 有关CASL的一个菜问题,请各位帮忙看一下 男高音和男低音是什么不同表现? 男高音 男低音声音的音色不同,他是由声源的( )决定的同一个人大声说话与低声细语的区别,主要是声音的( )不同,它是由声源的( )决定的 为什么绝缘体不能导电?请从物理科学性分析! "孑孓"怎么念,就是拼音 八年上 第25题 我们语文老师真的作业留的太多!老师今天说一天一张积累,明天说一天一篇日记,后天说学完一篇课文写感受.可是他就像鱼的记忆一样,说了就忘,也不给我们判作业,有的时候我们写了别的,老 22,23,25题,急 八仙过海有什么动物一起过海比如张果老马 迪克牛仔是男低音、男中音还是男高音? 八仙过海,各显神通,对每一位仙都有一句话来形容,如张果老倒骑驴,那另七位的是什么呢? tenor到底是男高音还是男低音?不要复制解释百度词典里说的是 男高音;次中音朗文英英 是 tenor11 [countable] a male singing voice that can reach the range of notes below the lowest woman's voice, or a man with a voice lik 7米高阿根廷恐龙亮相新加坡 系亚洲首\"监听们\"丑闻 美国欠全世界一个新加坡华人青年从事旧货买卖 为环境保凯特王妃低胸礼服出席晚宴 展苗条身材日媒称4架中国军机同一天越过冲绳飞向英航空公司推出空姐半裸慈善日历新加坡法院首次执行中国大陆司法判决英王室公开最新四世同堂全家福{高清)稀世粉钻亮相 拍卖价预计可达6000新加坡向中国颁发电子团体签证福州旅游局官微骂记者 专家:官微亟需国庆节买到歪货 拨打工商12315举体彩健康嘉年华院坝运动会闹热你心心念念的藤编家具,铠恩大促3折起新蓝鸟 预售价12.29万起秋高气爽,来一场说走就走的旅行国庆出游别忘写游记 《璧山观察》有奖两位穿红衣服的维修师傅 90岁的王婆对“预缴学费打折”要多些宽容之心网友评论>休刊启事不断抒写“科学发展、富民兴渝”新篇章道行天地八云新叶的野望左加明王金球先生虚似完美世界盘域苍穹机甲封神异世门客看看我们这疙瘩洪荒天鬼南海玄境海洋岛旅游宜兴徐悲鸿纪念馆旅游沃洲湖大坝旅游天姥山旅游海豚湾旅游红石峡旅游悦椿温泉村旅游太保公园旅游勐梭龙潭旅游水景公园旅游雁荡五虎山漂流旅游
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘