DBGrid中的当前光标位置插入文字(200分)

  • 主题发起人 主题发起人 Zythum
  • 开始时间 开始时间
Z

Zythum

Unregistered / Unconfirmed
GUEST, unregistred user!
需要在DBGrid中的当前光标位置插入文字,用菜单命令执行:
SendMessage(GetFocus, EM_ReplaceSel, 1, LongInt(PChar('文字')))
执行后,文字正确插入,但将记录移出当前记录后,会恢复原文字。
该如何解决?
 
不知原因,但我在后面加了两句就行了。
SendMessage(GetFocus,WM_SETTEXT,0,Integer(pchar('文字')));
SendMessage(GetFocus, WM_CHAR, Ord(' '), 0);
SendMessage(GetFocus, WM_CHAR, Ord(#8), 0);
 
谈谈我的看法吧:
这是由于 TDBGrid 的处理机制造成的,
SendMessage(GetFocus, EM_ReplaceSel, 1, LongInt(PChar('文字')))
虽然改变了文字,但由于它没有触发编辑事件,
所以 TDBGrid 并没有真正的接收改变后的字符串,
tinytao 的方法是加入一个空格和 BackSpace,虽然结果上没有加入任何字符,
但触发了 TDBGrid 的 KeyDown, KeyPress 事件,使得 FEditText 值得到了更新,
这样 TCustomDBGrid.UpdateData 事件中才把编辑后的字符串 Update 到 Record 中
 
多人接受答案了。
 
后退
顶部