怎样让DBGrid在按住Shift点鼠标的同时能将连续范围的多行选中?

trybird 2000-02-22 05:18:00
我是菜鸟,我怕谁?
各位大虾:大家好!我这菜鸟在此向诸位致敬了!

怎样让DBGrid在按住Shift点鼠标的同时能将连续范围的多行选中?
并响应鼠标右击从弹出菜单点选“删除”项后,删除所选项?

现有一DBGrid构件,其通过DataSource所连的数据集是Mater/Detail式关系表中的Detail表,
其所显示表中字段还包含有Calculated型计算字段和Lookup型查找字段。

大家知道,通过设置DBGrid的dgMultiSelect为true,可以实现按住Ctrl后,再点击鼠标一次一次地
对行进行多选,但现在我想实现象Windows资源管理器那样的功能,即既能按住Ctrl后一次次进行多
选,也能按住Shift后对连续范围进行多选。

然后还想当在选中的DBGrid行上右击鼠标后,会弹出Popup菜单,选择其中的“删除”菜单项就将
刚才多选时所选中行的记录删除掉。我发现DBGrid好象没有响应鼠标右单击的事件,请问怎么办?

回答请最好给出示例程序,谢谢!


...全文
274 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
bunny 2000-02-29
  • 打赏
  • 举报
回复
我想这个问题可以不用重写DBGrid来解决,事实上这个问题你只要重载部分代码就可以解决的。
或者捕捉消息来处理的方法来写这段程序!我想工作量是个大问题吧!
trybird 2000-02-22
  • 打赏
  • 举报
回复
可能我还真必须不得不头疼地去修改DBGrid的源码!!!

因为还是有其他目标要实现——

主要是——要对表示Lookup查找型字段的DBGrid的Cell单元格能够直接修改
有些我在贴中说明过的情况就不再在此重复了
大家知道,将Lookup字段的ButtonStyle属性设为cbsAuto,就可以在单元格上
出现一个下拉按钮,可以拉出供选取的字段值(如果不是Lookup字段,还可在
Picklist中设置一些供下拉的选值,并且ButtonStyle若为cbsEllipsis将以省略
号按钮代替下拉按钮)。
但是查找字段的Cell是绝对修改不了的,只能通过下拉列表选上去!
可是我们经理下死令了——必须能够键入值,并达到如下的效果:
其实是Access中的效果——
下拉按钮的效用当然要保留,另外还必须能键入字串,
并响应出FindNearest式的查找效果——
具体举例:假如此Lookup字段名为Name,其值来源于另一个表,
首先要能键入值,比如我只键入了try三个字母,会自动从查找的源表找出
相近的值显示在单元格上:trybird,其中bird被抹黑选中,当我接着键入
w字后,又会找出相近的值:tryworm,其orm中被抹黑选中,依此类推,就这样……

唉,菜鸟到死思方尽,虫子成堆累不甘!

另外,要提醒各位大侠的是此贴并非50分,而是双50——100分
因为我在Delphi中也挂了一模一样的一贴,
愿象lin一样的热心大侠,一式两份地来响应
只要热心相帮并对俺解决问题有助的大侠,菜鸟都会铭记和感谢的!
得分到是次要,此问题来自实际需求,解决了相信对大家都有会有所助益!
不论什么情况,菜鸟在此都愿将最终的结果无保留地与大家共析!!!
问题尚未解决,同志仍须努力!

trybird 2000-02-22
  • 打赏
  • 举报
回复
按照supershan大侠的指点------
刚刚把c:\Program files\Borland\CBuilder\Source\Vcl\dbcgrids.pas打出-----
19页A4纸,共1180行-------头疼欲裂------
这不纯属和我这菜鸟过不去吗!!!---------
那位大侠能在从何入手,在何方位努力,应雕琢那段-------
本菜鸟将感恩不尽-------
躬身频施三拜!!!
--------请高手赐教!
supershan 2000-02-22
  • 打赏
  • 举报
回复
你需要重写DBGRID,DBGRID有右击的事件,你可以连一个PopupMenu

13,824

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧