简单的DBGRID输入问题?(100分)

  • 主题发起人 主题发起人 mouse250
  • 开始时间 开始时间
M

mouse250

Unregistered / Unconfirmed
GUEST, unregistred user!
一个貌似简单的问题,折腾我一个月还没解决,真是大智更愚!
那就是:
在DBGRID中和STRINGGRID中输入数据的时候,光标会自动置为自动选择
状态,一不小心就会删掉数据,非常讨厌!!!!必须按F2才行。
在STRINGGRID中我通过ONCellEnter事件可解决此问题,
但DBGRID无此时间,怎么解决?烦死我了!
 
OnColEnter
要不
Options/dgAlwaysShowEditor = True
 
options中的设置似乎怎么改也没用!
 
Option里的DgEditing属性设为false
 
http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=179854
 
cheka:说得真好!不过要那样的话,我怎样输入数据呀?
XWOLF:让我去看回答过的问题,谢谢!我正在看,不过还没看到!
因为该网真TMD的快!!!!!!!!!
 
要输入数据时再把该选项设为true啊。
 
我发现DBGRID的某一CELL被选中时,你快速单击两下,第二下没反应,或许是WINDOWS的消息队列时钟问题,或许是DBGRID处理了一下,
但隔不到一秒,再击一下,才有效,CELL中的VALUE被全选,再击一下,选择取消,
原理如此,你一定想到办法了,聪明人不用说的太多。
我刚才试过,发鼠标按下消息,成功。
该加分了吧,苦啊。。。。。
 
连发两次鼠标click消息吗?
 
To 阿朱:
>你快速单击两下,第二下没反应
不是没反映,是Delphi将第二下的WM_LBUTTONDOWN变成WM_LBUTTONDBLCLK

WM_LBUTTONDOWN:
begin
if UINT(GetMessageTime - FClickTime) < GetDoubleClickTime then
Message.Msg := WM_LBUTTONDBLCLK;
FClickTime := 0;
end;
 
呵呵,我想可以使用这种方法来处理。


将Grids.pas拷贝到你的工程文件目录下,并加入到你的工程中。并修改之:

procedure TCustomGrid.UpdateEdit;

procedure UpdateEditor;
begin
FInplaceCol := Col;
FInplaceRow := Row;
FInplaceEdit.UpdateContents;
if FInplaceEdit.MaxLength = -1 then FCanEditModify := False
else FCanEditModify := True;
// FInplaceEdit.SelectAll; //将这句程序注释掉就行了。
end;

begin
if CanEditShow then
begin
if FInplaceEdit = nil then
begin
FInplaceEdit := CreateEditor;
FInplaceEdit.SetGrid(Self);
FInplaceEdit.Parent := Self;
UpdateEditor;
end
else
begin
if (Col <> FInplaceCol) or (Row <> FInplaceRow) then
begin
HideEdit;
UpdateEditor;
end;
end;
if CanEditShow then FInplaceEdit.Move(CellRect(Col, Row));
end;
end;



我经常这样做,当Delphi的控件不满住我的要求,我都这样改。呵呵......
 
我已经测试通过了,呵呵,多简单....
 
唉,看都看不懂:(
 
TO 阿珠:其实我想不必发鼠标事件,太麻烦,只要在某CELL得到输入焦点时
截获并发F2击键就可以了,以前STRINGGRID我就是这么用的,只是屏幕有闪烁,
效果不太好,但总算能满足要求,归根到底,还是应该象EDIT.AUTOSELECT:=
FALSE那样。HOW TO DO?好像用InPlaceEdit也不行。
另外,DBGRID中的事件也太少,如何截获OnEnterCell和OnExitCell事件?
有这两个事件可解决很多问题,如用户输入'1+1',我可以返回2,
用户犯懒输入'助工',我可返回'助理工程师',并能POST到数据库,
噢,对不起各位,废话太多了,该论坛本来就慢........
 
mouse250:
你怎么不试试我的方法,我可是测试通过了的呀!!!
 
感谢沈前卫先生(小姐),各位都别白忙,分100块吧。
不过沈的方法我没试,也不想试了,感觉
DELPHI的数据库虽然功能强大,但总不如自己编制数据库引擎灵活。
算了,我还是用老方法吧。以后如有更好的解决方案,请各位
与我联系:13231@263.NET,我是DELPHI忠室追随者。
 
后退
顶部