procedure TForm1.FormCreate(Sender: TObject);
begin
OptWinhotkeyid:=GlobalAddAtom(pchar('OptWinHotkey'))-$C000;
end;procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
RegisterHotKey(Handle, OptWinhotkeyid, MOD_ALT, key);//ALT+F1
end;
我用了这个注册了热键但是我只想这个热键在当前程序上如果焦点不在这个程序上    我不想这个热键生效应该怎么做呢?也就是说想程序级的热键  而不是系统级的热键  帮帮偶吧  谢谢

解决方案 »

  1.   

    你这种情况,干脆用FORM.KEYPRVIEW:=TRUE;
    然后在自定义热键就搞定,太简单了,不象问题啊.
      

  2.   

    用Form.KeyPreview好使啊!
    那你试试这个方法,用TActionList控件.// ...  TXXXForm = class(TForm)
        ActLst: TActionList;
        ActHotKey1: TAction;
        ActHotKey2: TAction;
        // ...
        // 注意位置,这两个热键过程不能放在private或public等域中!
        procedure OnHotKey1(Sender: TObject);
        procedure OnHotKey2(Sender: TObject);
      private
        // ...
      public
        // ...
      end;// ...implementationprocedure TXXXForm.OnHotKey1(Sender: TObject);
    begin
      //ShowMessage('HotKey1');
    end;procedure TXXXForm.OnHotKey2(Sender: TObject);
    begin
      //ShowMessage('HotKey2');
    end;在窗体上放一个TActionList控件,双击它,添加动作(TAction)并设置热键(ShortCut属性),然后把这个动作的OnExecute事件指向你定义好的执行过程(这里代码里的OnHotKey1或OnHotKey2),就行了.