在dbGrid控件裡, dbGrid處於編輯裝態時 ,如何讓->(Right)鍵代替Tab鍵?哪组合键如何处理呢? (100分)

  • 主题发起人 主题发起人 goddy
  • 开始时间 开始时间
G

goddy

Unregistered / Unconfirmed
GUEST, unregistred user!
在dbGrid控件裡 ,dbGrid處於編輯裝態時 如何讓->(Right)鍵代替Tab鍵
 
在DBGRID的ONKEYDOWN事件中加入:
if key=?? then sendmessage(handle,wm_keydown,9,0);
至于Right键值是多少,我忘了。
 
right键值39.
 
在DBGrid的OnKeyDown事件中写:
if key = vk_right then
DBGrid1.Perform(Wm_KeyDown, Vk_Tab, 0)
 
奇怪,在dbgrid内right和tab的作用一样啊都是往右边一个field..

如果是想focus到其他控件,就这样.

if key = vk_right then
//往前一个控件
form1.Perform(Wm_NextDlgCtl,1, 0)
//往后一个控件 form1.perform(WM_NextDlgCtl,0,0)
 
哪组合键如何处理呢? 如Shift + Left 键
如果行就分分
 
這樣看看:
procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key=vk_right then
sendmessage(tdbgrid(sender).Handle,wm_keydown,vk_tab,0);
if (shift=[ssshift]) and (key=vk_left) then
要做的事。
end;
 
我要用Left 鍵代替 TABLE+Shift鍵啊
 
那就这样吧和tab效果一样:
if key = vk_right then
//往后一个控件
form1.Perform(Wm_NextDlgCtl,0, 0)
//往前一个控件
else if key=vk_left then
form1.perform(WM_NextDlgCtl,1,0);
 
To 雪鹰 不行啊
 
不好意思,我还是不大清楚你的意思。^_^
我试了一下,在编辑状态tab是跑到dbgrid下一个field:如果field是最后一个,则跑到
下一条纪录的第一个field.shift+tab则相反。
因此改成这样。不知道你是不是这个意思?
procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key = vk_right then begin //按下右箭头;
DBGrid1.Perform(Wm_KeyDown, Vk_Tab, 0);//模拟tab;
key:=0;//屏蔽vk_right
end
else if key=vk_left then begin //按下左箭头;
//以下事件模拟按下shift,按下tab,松开tab,松开shift键盘事件。
keybd_event( VK_Shift, MapVirtualKey( VK_Shift, 0 ), 0 , 0 );
keybd_event( VK_Tab, MapVirtualKey( VK_Tab, 0 ), 0 , 0 );
keybd_event( VK_Tab, MapVirtualKey( VK_Tab, 0 ), KEYEVENTF_KEYUP , 0 );
keybd_event( VK_Shift, MapVirtualKey( VK_Shift, 0 ), KEYEVENTF_KEYUP , 0 ); // Alt key up
key:=0;//屏蔽left arrow
end
end;
 
谢谢大家 ,谢谢雪鹰 搞定
 
后退
顶部