我以前的一个帖子,自己看看吧主  题:请问如何通过敲“上”键模拟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;
 

解决方案 »

  1.   


    不能用KeyDown事件嗎???
      

  2.   

    你是用LoadFromFile()来读图,怕失去焦点吗?可以试试用Application.OnMessage事件,
    procedure OnAppMessage(var Msg:Tmsg;var Handled:boolean);我没有用过。
      

  3.   

    在控件里面KEYDOWN根本不能得到方向键的消息,所以这个方法行不通的,我现在是需要在控件里面得到这个消息,实际上通过CMWantSpecialKey已经能够得到方向键的消息了,可是分不清楚是按下还是弹起的事件,我想用来做一个编辑控件