Metoda
Hot Key
Poprzednio poznaliśmy metodę przechwytywania klawiatury o nazwie Key Press. Metoda
Hot Key jest drugą możliwością przechwytywania klawiatury i
tworzenia skrótów klawiaturowych, jaką daje nam Delphi (zakładka
Tools Pallete).
Podobnie,
jak w poprzednim przypadku, do testowania naszych działań
wykorzystamy stworzoną przez nas procedurę o nazwie „Opcja
niedostępna”. Oprócz niej używać będziemy jeszcze procedurę
WMHotKey, którą deklarujemy w sekcji Private.
W
metodzie, którą przedstawiamy, aby przyswoić któryś z klawiszy
do naszych potrzeb, musimy najpierw zarejestrować go w funkcji Hot
Key i przypisać polecenie, które ma zostać wykonane po jego
naciśnięciu. Każdy klawisz i każda kombinacja klawiszy (skróty
klawiaturowe) musi zostać osobno zarejestrowana. Rejestracji
dokonujemy w procedurze Form Create. Jest to chyba oczywiste miejsce:
Przechwytu klawiszy musimy dokonać razem z uruchamiającym się
programem.
Spójrzmy
na zapis z rejestracji pierwszego klawisza:
RegisterHotKey(Handle,$0001,0,VK_F1)
Polecenie
„RegisterHotKey” mówi samo za siebie: „zarejestruj skrót
klawiaturowy”. Po słowie Handle mamy identyfikator tego skrótu,
który jest liczbą kolejną, począwszy od pierwszej, czyli 0001.
Jak widzimy po tej sekcji, w sumie zarejestrowaliśmy 171 różnych
klawiszy i ich kombinacji. Po identyfikatorze umieszczamy kod
klawisza lub klawiszy, które chcemy przejąć. Nie spotkaliśmy się
jeszcze z taką formą identyfikowania klawiszy. Jest ona drugim,
równorzędnym sposobem oznaczania klawiszy. Po literach „VK”
wpisujemy słowną nazwę klawisza, oczywiście w języku angielskim,
który w środowisku Delphi obowiązuje. Chcąc zatem przejąć dany
klawisz, musimy wiedzieć, jak się on nazywa. W materiałach
pomocniczych do Delphi odnajdziemy bez problemu takie informacje.
W
przypadku, gdy chcemy zarejestrować kombinację klawiszy, musimy
podać nazwy obu klawiszy, pamiętając o tym, że dla klawiszy
rozszerzonych (Alt, Ctrl, Shift, Win) nie stosujemy początkowych
liter w postaci VK, lecz MOD, a także musimy pamiętać
o tym, że dla klawisza Ctrl stosujemy jego pełną nazwę, czyli
Control.
Po
rejestracji klawiszy musimy jeszcze oprogramować procedury, które
zostaną wykonane po ich naciśnięciu. Polecenia te zawieramy w
procedurze WMHotKey. Cała ta procedura to zbiór osobnych warunków,
które przypisane są do poszczególnych klawiszy zarejestrowanych
wcześniej. Program sprawdza, czy któryś z klawiszy (opatrzony tu
identyfikatorem „$” został naciśnięty:
if
Msg.wParam= $0001 then
begin
Opcja_niedostepna;
end;
Jeżeli
przyjrzymy się bliżej kodowi metody Hot Key, stwierdzimy, że nie
jest ona zbyt skomplikowana. Wydaje się ona być trudna z uwagi na
jej rozbudowaną formę, wynikającą tylko i wyłącznie z tego, iż
musimy zarejestrować i oprogramować każdy klawisz z osobna.
Całą
ideę metody Hot Key możemy zawrzeć w następujący schemat:
Form
Create: RegisterHotKey(Handle,$0001,0,VK_F1)
WMHotKey:
if
Msg.wParam= $0001
then
...
Najpierw
rejestrujemy klawisz, a następnie przypisujemy do niego polecenie,
które ma zostać wykonane. Taka budowa hooka pozwala nam na wybranie
do przechwytu tylko takie klawisze i skróty, jakie chcemy. Nie
musimy więc stosować pełnej wersji tej metody, którą tu
zamieszczamy. Po wybraniu klawiszy, rejestrujemy je w dowolnej
kolejności, pamiętając o tym, aby poszczególne identyfikatory
($0000) były ciągiem kolejnych liczb naturalnych: 0001, 0002, 0003
itd.
Oto
pełny kod metody Hot Key:
unit
Unit1;
interface
uses
Windows,
Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 =
class(TForm)
procedure
Opcja_niedostepna;
procedure
FormCreate(Sender: TObject);
private
{ Private declarations }
procedure
WMHotKey(var Msg: TMessage); message WM_HOTKEY;
public
{ Public declarations }
end;
var
Form1:
TForm1;
implementation
{$R
*.dfm}
// PROCEDURA OPCJA
NIEDOSTĘPNA //
procedure
TForm1.Opcja_niedostepna;
begin
ShowMessage('Opcja
niedostępna');
end;
//rejestracja skrótów
klawiaturowych
procedure
TForm1.FormCreate(Sender: TObject);
begin
// SKRÓTY KLAWIATUROWE F1-F12
i Esc //
RegisterHotKey(Handle,$0001,0,VK_F1);
// F1
RegisterHotKey(Handle,$0002,0,VK_F2);
// F2
RegisterHotKey(Handle,$0003,0,VK_F3);
// F3
RegisterHotKey(Handle,$0004,0,VK_F4);
// F4
RegisterHotKey(Handle,$0005,0,VK_F5);
// F5
RegisterHotKey(Handle,$0006,0,VK_F6);
// F6
RegisterHotKey(Handle,$0007,0,VK_F7);
// F7
RegisterHotKey(Handle,$0008,0,VK_F8);
// F8
RegisterHotKey(Handle,$0009,0,VK_F9);
// F9
RegisterHotKey(Handle,$0010,0,VK_F10);
// F10
RegisterHotKey(Handle,$0011,0,VK_F11);
// F11
RegisterHotKey(Handle,$0012,0,VK_F12);
// F12
RegisterHotKey(Handle,$0013,0,VK_ESCAPE);
// Esc
// SKRÓTY KLAWIATUROWE Alt+F1-F12,Esc
RegisterHotKey(Handle,$0014,MOD_ALT,VK_F1);
//Alt+F1
RegisterHotKey(Handle,$0015,MOD_ALT,VK_F2);
//Alt+F2
RegisterHotKey(Handle,$0016,MOD_ALT,VK_F3);
//Alt+F3
RegisterHotKey(Handle,$0017,MOD_ALT,VK_F4);
//Alt+F4
RegisterHotKey(Handle,$0018,MOD_ALT,VK_F5);
//Alt+F5
RegisterHotKey(Handle,$0019,MOD_ALT,VK_F6);
//Alt+F6
RegisterHotKey(Handle,$0020,MOD_ALT,VK_F7);
//Alt+F7
RegisterHotKey(Handle,$0021,MOD_ALT,VK_F8);
//Alt+F8
RegisterHotKey(Handle,$0022,MOD_ALT,VK_F9);
//Alt+F9
RegisterHotKey(Handle,$0023,MOD_ALT,VK_F10);
//Alt+F10
RegisterHotKey(Handle,$0024,MOD_ALT,VK_F11);
//Alt+F11
RegisterHotKey(Handle,$0025,MOD_ALT,VK_F12);
//Alt+F12
RegisterHotKey(Handle,$0026,MOD_ALT,VK_ESCAPE);
//Alt+Esc
// SKRÓTY
KLAWIATUROWE Ctrl+ F1-F12,Esc
RegisterHotKey(Handle,$0027,MOD_CONTROL,VK_F1);
//Ctrl+F1
RegisterHotKey(Handle,$0028,MOD_CONTROL,VK_F2);
//Ctrl+F2
RegisterHotKey(Handle,$0029,MOD_CONTROL,VK_F3);
//Ctrl+F3
RegisterHotKey(Handle,$0030,MOD_CONTROL,VK_F4);
//Ctrl+F4
RegisterHotKey(Handle,$0031,MOD_CONTROL,VK_F5);
//Ctrl+F5
RegisterHotKey(Handle,$0032,MOD_CONTROL,VK_F6);
//Ctrl+F6
RegisterHotKey(Handle,$0033,MOD_CONTROL,VK_F7);
//Ctrl+F7
RegisterHotKey(Handle,$0034,MOD_CONTROL,VK_F8);
//Ctrl+F8
RegisterHotKey(Handle,$0035,MOD_CONTROL,VK_F9);
//Ctrl+F9
RegisterHotKey(Handle,$0036,MOD_CONTROL,VK_F10);
//Ctrl+F10
RegisterHotKey(Handle,$0037,MOD_CONTROL,VK_F11);
//Ctrl+F11
RegisterHotKey(Handle,$0038,MOD_CONTROL,VK_F12);
//Ctrl+F12
RegisterHotKey(Handle,$0039,MOD_CONTROL,VK_ESCAPE);
//Ctrl+Esc
//
PRZECHWYT KLAWISZY STRZALEK //
RegisterHotKey(Handle,$0040,0,VK_LEFT);
// strzałka
w lewo
RegisterHotKey(Handle,$0041,0,VK_RIGHT);
// strzałka w
prawo
RegisterHotKey(Handle,$0042,0,VK_UP);
//
strzałka w górę
RegisterHotKey(Handle,$0043,0,VK_DOWN);
// strzałka w
dół
// PRZECHWYT INNYCH
KLAWISZY I SKRÓTÓW KLAWIATUROWYCH //