从F3到F12,我都是同样的注册了热键。但是F12热键很奇怪,明明注册成功了,按F12也收到了热键消息,但是程序不执行处理F12热键那部分的代码!一下子就跳过去了!有大虾
知道是如何回事吗?

解决方案 »

  1.   

    procedure TfrmMain.FormCreate(Sender: TObject);
       Application.OnActivate := RegisterAppHotKey;
       Application.OnDeactivate := UnRegisterAppHotKey;
       RegisterAppHotKey(nil);
    End;procedure TfrmMain.RegisterAppHotKey(Sender: TObject);
    begin
        RegisterHotKey(handle,$0003,0,VK_F3);
        RegisterHotKey(handle,$0004,0,VK_F4);
        ......
        RegisterHotKey(handle,$000B,0,VK_F11);
        RegisterHotKey(handle,$000C,0,VK_F12);
    end;procedure TFrmMain.UnRegisterAppHotKey(Sender: TObject);
    begin
      UnRegisterHotKey(handle,$0003);
      UnRegisterHotKey(handle,$0004);
      ......
      UnRegisterHotKey(handle,$000B);
      UnRegisterHotKey(handle,$000C);
    end;procedure TfrmMain.HotKey_Message_Proc(var Msg: TMessage);
    Begin
      Case Msg.LParamHi Of
        VK_F3:
          Begin
               ......
          End;
        VK_F4:
          Begin
              ......
          End;
        ......
        VK_F11:
          Begin
             ......
          End;
        VK_F12:
          Begin
           //程序会跳到这里,但下面的语句都不会执行
           application.MessageBox('You have pressed a Hotkey: F12!','hint',mb_ok);
          End;
        Else
          exit;  
      End;
    End;
      

  2.   

    都是系统热键,你要先屏蔽key:=0;
      

  3.   

    比如
    Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)Select Case KeyCode
    Case 116:
      KeyCode = 0
     
    Case 117:
    KeyCode = 0
    Case 118:
    KeyCode = 0
    btn_add_Click
    Case 119
    'Me.btn_update.OnClick
    Case 120
    'Me.btn_delete.OnClick
    Case 121
    'Me.btn_copy.OnClick
    Case 122
    KeyCode = 0
    btn_refresh_Click
    Case 123
    'Me.btn_exit.OnClickEnd Select
    End Sub上段代码是在vba里写的
      

  4.   

    比如
    Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)Select Case KeyCode
    Case 116:
      KeyCode = 0
     
    Case 117:
    KeyCode = 0
    Case 118:
    KeyCode = 0
    btn_add_Click
    Case 119
    'Me.btn_update.OnClick
    Case 120
    'Me.btn_delete.OnClick
    Case 121
    'Me.btn_copy.OnClick
    Case 122
    KeyCode = 0
    btn_refresh_Click
    Case 123
    'Me.btn_exit.OnClickEnd Select
    End Sub上段代码是在vba里写的
      

  5.   

    其他的热键都是成功了的。
      To  IORILI: 我在keydown事件中这样写了,但是没用阿procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
      If Key = 123 Then
        key := 0;
    end;
      

  6.   

    好奇怪阿!!!又发现一个问题:在主窗口的keydown事件中,只有F12键会响应。也就是说,设置断点在上面那个过程的开始,只有按F12键的时候才会断进去,按其他键根本没有反应! 但是其他控件的keydown事件就是正常的。
      

  7.   

    唉,连F12键也不能响应。虽然断在了keydown事件里,但继续执行的话,就跟热键的问题一样,里面的代码都不会执行。也就是说,主窗口的keydown事件根本什么键都不能响应。
      

  8.   

    gyf,好人阿,给我回了一贴,不然我都回不了。我已经知道是keypreview的问题了,把它置为
    true就好了。但是注册不上F12热键的问题还是没有解决,可能是有别的软件注册了,但是我把所有可以关的程序都关了,再重新运行程序也还是不行。