我以前的一个帖子,自己看看吧主 题:请问如何通过敲“上”键模拟shift+tab将焦点移动到上一个控件
作 者:ming
所属论坛:Delphi
问题点数:50
回复次数:5
发表时间:2001-5-21 23:26:00
回复贴子:
回复人:yypp() (2001-5-22 1:40:00) 得30分
已经测试通过!
你可以在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;
作 者:ming
所属论坛:Delphi
问题点数:50
回复次数:5
发表时间:2001-5-21 23:26:00
回复贴子:
回复人:yypp() (2001-5-22 1:40:00) 得30分
已经测试通过!
你可以在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;
不能用KeyDown事件嗎???
procedure OnAppMessage(var Msg:Tmsg;var Handled:boolean);我没有用过。