Горячие клавиши (shortcuts)

Как назначить горячие клавиши (shortcuts), чтобы они были доступны даже если сейчас активна другая программа (как это делает аська).

Попробуй этот код:

 

 type

   TForm1 = class(TForm)

     procedure FormCreate(Sender: TObject);

     procedure FormDestroy(Sender: TObject);

   protected

     procedure hotykey(var msg:TMessage); message WM_HOTKEY;

   end;

 

 var

   Form1: TForm1;

   id,id2:Integer;

 

 implementation

 

 {$R *.DFM}

 

 

 procedure TForm1.hotykey(var msg:TMessage);

 begin

   if (msg.LParamLo=MOD_CONTROL) and (msg.LParamHi=81) then

   begin

     ShowMessage('Ctrl + Q wurde gedrьckt !');

   end;

 

   if (msg.LParamLo=MOD_CONTROL) and (msg.LParamHi=82)

then

   begin

     ShowMessage('Ctrl + R w!

urde gedrьckt !');

   end;

 end;

 

 

 procedure TForm1.FormCreate(Sender: TObject);

 begin

   id:=GlobalAddAtom('hotkey');

   RegisterHotKey(handle,id,mod_control,81);

 

   id2:=GlobalAddAtom('hotkey2');

   RegisterHotKey(handle,id2,mod_control,82);

 end;

 

 procedure TForm1.FormDestroy(Sender: TObject);

 begin

   UnRegisterHotKey(handle,id);

   UnRegisterHotKey(handle,id2);

 end;

 

 

Комментарий от Евгения Гаечкина (johnnycrisjoe@mail.ru)

при смене стиля окна с fsStayOnTop на fsNormal и обратно(предполагаю, что так происходит при смене стиля на любой), у него меняется handle, и соответственно сообщения WM_HOTKEY перестают поступать. Метод реанимации, в принципе прост:

UnRegisterHotKey со старым handle

смена стиля окна

RegisterHotKey - с новым handle

Метод не единственный, но поможет.

Хостинг от uCoz