在FORM中有一些BTN和几个TRACKBAR,我想用键盘上的左,右方向键控制焦点在几个TRACKBAR之间进行变变换,用上,下方向键控制TRACKBAR的拖动,应该怎么实现,请给出代码

解决方案 »

  1.   

    利用RETURN代替TAB    
        
    Shift + Tabperform(WM_NEXTDLGCTL,0,0);这是向下移动,请问如何向上移动??????perform(WM_NEXTDLGCTL,1,0);即可向上移动为什么不看MSDN,不看HELP你当然不知道了。perform(WM_NEXTDLGCTL,0,1)控制焦点移动,还可以利用TWinControl.SelectNext()方法来做!*********************Form.KeyPreview := true; 在Form的KeyDown中if Key = VK_RETURN thenbeginif ActiveControl is TDBGrid or ... thenPostMessage(ActiveControl.Handle, WM_KEYDOWN, VK_TAB, 0);elsePostMessage(Handle, WM_KEYDOWN, VK_TAB, 0);Key := 0;end---------------procedure EnterToTab(aForm: TForm; var Key: Char);beginif Key = #13 thenbeginkey := #0;aForm.Perform(CM_DialogKey, VK_TAB, 0);end;end;***************或者拦截Application.OnMessage即可,添加代码:if Msg.Message = WM_KEYDOWN thenbeginif Msg.wParam = VK_RETURN thenKeybd_event(VK_TAB, 0, 0, 0);end; //if
     
       
      

  2.   

    PostMessage(ActiveControl.Handle, WM_KEYDOWN, VK_TAB, 0);
    还是这个比较好Tab键
      

  3.   

    //獲得輸入焦點
    procedure GetFocus(frm :TForm;Key :Char);
    begin
      case key of
        #13: //如果單擊回車鍵,則焦點跳往下一個控件
          begin
           // key := #0;
          
           SendMessage(frm.Handle,WM_NEXTDLGCTL, 0, 0);      
       // #$27: //如果單擊空格鍵,則焦點跳往上一個輸入框
        #27: //如果單擊Esc鍵,則焦點跳往上一個控件
          begin
          //  key := #0;
            SendMessage(frm.Handle, WM_NEXTDLGCTL, 1, 0);
           end;
      end;
    end;
      

  4.   

    谢谢miky(miky) ,谢谢各位,问题已解决