不好意思,我还是不大清楚你的意思。^_^
我试了一下,在编辑状态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;