已经测试通过!
你可以在FORM或者控件的Keydown事件里写下如下的代码。
(这里的例子是在一个Memo的控件里按“上”键)
procedure TForm1.Memo1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (key=38) then//如果按下的是“上”键
begin 模拟shift+tab按键
keybd_event( VK_shift, MapVirtualKey( VK_shift, 0 ), 0 , 0 );
// 按下shift键
keybd_event( VK_tab, MapVirtualKey( VK_tab, 0 ), 0 , 0 );
// 按下tab键
keybd_event( VK_tab, MapVirtualKey( vk_tab, 0 ), KEYEVENTF_KEYUP , 0 );
//放开tab键
keybd_event( VK_control, MapVirtualKey( vk_control, 0 ), KEYEVENTF_KEYUP , 0 );
// 放开shift键end;
注意,如果触发的对象是Form的话,你可能要把Form的KeyPreview属性设置为True;
搞定了别忘记加分哦
你可以在FORM或者控件的Keydown事件里写下如下的代码。
(这里的例子是在一个Memo的控件里按“上”键)
procedure TForm1.Memo1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (key=38) then//如果按下的是“上”键
begin 模拟shift+tab按键
keybd_event( VK_shift, MapVirtualKey( VK_shift, 0 ), 0 , 0 );
// 按下shift键
keybd_event( VK_tab, MapVirtualKey( VK_tab, 0 ), 0 , 0 );
// 按下tab键
keybd_event( VK_tab, MapVirtualKey( vk_tab, 0 ), KEYEVENTF_KEYUP , 0 );
//放开tab键
keybd_event( VK_control, MapVirtualKey( vk_control, 0 ), KEYEVENTF_KEYUP , 0 );
// 放开shift键end;
注意,如果触发的对象是Form的话,你可能要把Form的KeyPreview属性设置为True;
搞定了别忘记加分哦
解决方案 »
- 怎样修改edit边框颜色呀?
- 一个小问题:类的地址...?
- 开发一个解压缩程序
- 如何在没有源码的erp中添加一个自己的模块
- delphi可否自定义整形的长度?
- TCpclient和Tcpserver能不能够实现广域网范围的通讯?
- 刚刚参加CSDN,多多支持,来就有分!有'物业管理'方面的软件代码吗?
- ado+oracle问题!!!!!!!!
- 请问如何取一个Double型变量的小数位?
- 请教各位大虾:我的程序里的窗体为什么老丢。是否是DELPHI 5.5的问题
- TWebBrowser控件如何自动执行所载入页面中的JaVa函数?求救!
- 我的oicq号被盗了!!!!!痛啊^请问怎么取回??有没有这方面有经验的?
begin
//if keyup ,focus move to prior field
keybd_event(16,0,0,0); //按下SHIFT键
keybd_event(9,0,0,0); //按下TAB
keybd_event(9,0,0,0); //按下TAB
keybd_event(16,0,2,0); //放开SHIFT键
end;
参考一下函数:bl - True 移动到TabOrder的下一个‘
- False 上一个procedure mscNextCtl( ctl: TWinControl; bl: Boolean );
var
frm: TCustomForm;
begin
frm := GetParentForm( ctl );
if Frm = nil then
Exit;
case bl of
False:
begin
//TWinControl( ctl ).SelectNext( ctl, True, True );
PostMessage( frm.Handle, WM_NEXTDLGCTL, 1, 0 );
end;
True:
begin
//ctl.SelectNext( ctl, False, True );
PostMessage( frm.Handle, WM_NEXTDLGCTL, 0, 0 );
end;
end;
end;