1、设置DBGrid的Options的dgRowSelect和dgMultiSelect为True,在最左列点鼠标就可以选择多列。
2、Hook DBGrid的OnMouseMove和OnMouseDown事件,自己编写一定的代码。
2、Hook DBGrid的OnMouseMove和OnMouseDown事件,自己编写一定的代码。
解决方案 »
- 取得文件夹内当前所有目录名的字符串
- 请教一个模式窗体和消息处理的问题.
- 很简单的,判刑GOTO语句的使用
- 很怕用控件,因为做安装盘不知该怎么加相关东西,帮我看一下
- 超难的问题!!!!! 如何实现这样的拖出连接线功能(多图)!!!!!!!!!!!!!!!!!!
- 求avi转bmp和bmp转avi的控件,非常着急,在线等待
- midas应用中关于如何配置客户端程序
- 要用Combobox类读取数据库中的某个字段中某些值作为combobox类的items,有什么好方法?help me
- 谁用过MSFlexGrid控件,100分相送?
- 只相信爱情的人是智者还是笨蛋?请大家发表以下自己的观点
- 有关INSTALLSHIED
- 有关sql的问题(paradox)
贴中讲过,但这种多选只能用按住Ctrl后一次次进行多选.而我的问题是
我虽比较菜,也不至于连常识都不懂!
在一时也很难找到现成控件情况下,我准备修改源码
刚刚把c:\Program files\Borland\CBuilder\Source\Vcl\dbcgrids.pas打出-----
19页A4纸,共1180行-------头疼欲裂------
那位大侠能在从何入手,在何方位努力,应雕琢那段指点一二-------
本菜鸟将感恩不尽!!!
不过通过钩子来做是否可行?请给出示例!!!
不过你可以试试在DBGrid得OnMouseMove事件中加入(DBGrid1 as TCustomGrid).MouseCoord(X,Y),其返回的MouseCoord.Y值表示鼠标所在的行,不只有没有用?
有些我在贴中说明过的情况就不再在此重复了
大家知道,将Lookup字段的ButtonStyle属性设为cbsAuto,就可以在单元格上
出现一个下拉按钮,可以拉出供选取的字段值(如果不是Lookup字段,还可在
Picklist中设置一些供下拉的选值,并且ButtonStyle若为cbsEllipsis将以省略
号按钮代替下拉按钮)。
但是查找字段的Cell是绝对修改不了的,只能通过下拉列表选上去!
可是我们经理下死令了——必须能够键入值,并达到如下的效果:
其实是Access中的效果——
下拉按钮的效用当然要保留,另外还必须能键入字串,
并响应出FindNearest式的查找效果——
具体举例:假如此Lookup字段名为Name,其值来源于另一个表,
首先要能键入值,比如我只键入了try三个字母,会自动从查找的源表找出
相近的值显示在单元格上:trybird,其中bird被抹黑选中,当我接着键入
w字后,又会找出相近的值:tryworm,其orm中被抹黑选中,依此类推,就这样……唉,菜鸟到死思方尽,虫子成堆累不甘!另外,要提醒各位大侠的是此贴并非50分,而是双50——100分
因为我在C++ Builder中也挂了一模一样的一贴,
愿象lin一样的热心大侠,一式两份地来响应
只要热心相帮并对俺解决问题有助的大侠,菜鸟都会铭记和感谢的!
得分到是次要,此问题来自实际需求,解决了相信对大家都有会有所助益!
不论什么情况,菜鸟在此都愿将最终的结果无保留地与大家共析!!!
问题尚未解决,同志仍须努力!
问题解决之后,把方案放出来大家共享一下如何,我是不是有点自私呀。哈哈
…
private
Sel : Boolean ;//判断是否处于选择状态
BookMark : TBookMark ;//记录先前的位置
…
procedure TForm1.DBGrid1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var SelNo:integer ;//记录当前位置
begin
if ( Button = mbLeft ) then
if sel = false then//非选择状态,记录当前位置
begin
BookMark := Table1.GetBook ;
Sel := true ;
exit ;
end
else //选择状态
if Shift = [ssShift] then
begin
//遍历所有从先前位置开始到当前位置之间的记录并标记
SelNo := DBGrid1.DataSource.DataSet.RecNo ;
DBGrid1.DataSource.DataSet.DisableControls ;
DBGrid1.DataSource.DataSet.GotoBook(BookMark);
DBGrid1.SelectedRows.CurrentRowSelected := true ; if SelNo<DBGrid1.DataSource.DataSet.RecNo then
while SelNo<DBGrid1.DataSource.DataSet.RecNo do
begin
DBGrid1.SelectedRows.CurrentRowSelected := true ;
DBGrid1.DataSource.DataSet.Prior ;
end
else
while SelNo > DBGrid1.DataSource.DataSet.RecNo do
begin
DBGrid1.SelectedRows.CurrentRowSelected := true ;
DBGrid1.DataSource.DataSet.Next ;
end;
DBGrid1.DataSource.DataSet.EnableControls ;
Sel := false ;
end ;
end;
虽然效果不十分理想,但足以完成要求。