![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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
|
|||
|
|||
|
Огромное спасибо, снова выручили)
|