![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Помогите разобраться, как правильно зарегистрировать глобальные горячие клавиши, что делаю не так, может кто подсказать.
|
#2
|
|||
|
|||
![]() Вот исходник, что не так делаю?
Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls; type TForm1 = class(TForm) HotKey1: THotKey; HotKey2: THotKey; Button1: TButton; procedure Button1Click(Sender: TObject); procedure FormDestroy(Sender: TObject); private hk_1, hk_2: Integer; procedure WMHotKey(var Mess:TWMHotKey);message WM_HOTKEY; public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.WMHotKey(var Mess: TWMHotKey); begin if mess.HotKey=hk_1 then showmessage('Комбинация клавиш 1'); if mess.HotKey=hk_2 then showmessage('Комбинация клавиш 2'); end; procedure TForm1.Button1Click(Sender: TObject); begin hk_1:=GlobalAddAtom('Hotkey1'); RegisterHotKey(Handle, hk_1 , 0, HotKey1.HotKey); hk_2:=GlobalAddAtom('Hotkey2'); RegisterHotKey(Handle, hk_2 , 0, HotKey2.HotKey); end; procedure TForm1.FormDestroy(Sender: TObject); begin UnRegisterHotKey(Handle, hk_1); GlobalDeleteAtom(hk_1); UnRegisterHotKey(Handle, hk_2); GlobalDeleteAtom(hk_2); end; end. |
#3
|
||||
|
||||
![]() для Ctrl+F1 и Ctrl+F2 :
Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TForm1 = class(TForm) procedure FormDestroy(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } procedure WMHOTKEY(var Message: TWMHotKey); message WM_HOTKEY; end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin RegisterHotKey(Handle, 1, MOD_CONTROL, VK_F1); RegisterHotKey(Handle, 2, MOD_CONTROL, VK_F2); end; procedure TForm1.FormDestroy(Sender: TObject); begin UnregisterHotKey(Handle, 1); UnregisterHotKey(Handle, 2); end; procedure TForm1.WMHOTKEY(var Message: TWMHotKey); begin case Message.HotKey of 1: ShowMessage('1'); 2: ShowMessage('2'); end; end; end. Пишу программы за еду. __________________ |
#4
|
|||
|
|||
![]() Это я знаю как сделать, у меня проблема с компонентом THotKey, как с помощью него зарегистрировать клавиши. Нужно менять комбинации горячих клавиш в программе.
|
#5
|
||||
|
||||
![]() Код:
procedure ShortCutToModifiersKey(ShortCut: TShortCut; var Modifiers: Cardinal; var Key: Cardinal); begin Key := ShortCut and not (scShift + scCtrl + scAlt); Modifiers := 0; if ShortCut and scShift <> 0 then Modifiers := Modifiers or MOD_SHIFT; if ShortCut and scCtrl <> 0 then Modifiers := Modifiers or MOD_CONTROL; if ShortCut and scAlt <> 0 then Modifiers := Modifiers or MOD_ALT; end; Код:
var Modifiers: Cardinal; Key: Cardinal; begin ShortCutToModifiersKey(HotKey1.HotKey, Modifiers, Key); RegisterHotKey(Handle, 1, Modifiers, Key); end; Пишу программы за еду. __________________ |
Этот пользователь сказал Спасибо NumLock за это полезное сообщение: | ||
HMR (13.04.2015)
|
#6
|
|||
|
|||
![]() Огромное спасибо, снова выручили)
|