X Π½Π΅ ΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ Π½Π° Π·Π°Π΄Π°Π½ΠΈΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΡ ΠΊΠΎΠ΄ ΠΊΠ»Π°Π²ΠΈΡΠΈ - ΡΠΈΠΌΠ²ΠΎΠ»Ρ, Π° ΠΈΠ΄Π΅Ρ Π΄Π°Π»ΡΡΠ΅. Π‘ΠΈΡΡΠ΅ΠΌΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΡΠΎΠΏΠΎΡΡΠ°Π²ΠΈΡΡ Π»ΡΠ±ΠΎΠΉ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΈ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ² ΠΈ ΠΊΠ»Π°Π²ΠΈΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, βΉShift+Ctrl+AβΊ) ASCII ΡΡΡΠΎΠΊΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, "EXIT"). ΠΠ»Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΊΠ»Π°Π²ΠΈΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΡΡΡΠΎΠΊΠΈ Π·Π°Π΄Π°ΡΡΡΡ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ. Π’Π°ΠΊ, ΡΠΈΠΌΠ²ΠΎΠ»Ρ XK_A ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΡΡΡΠΎΠΊΠ° "A".
ΠΠ°ΠΊΡΠΎΡ XRebindKeysym() Π±Π΅ΡΠ΅Ρ ΡΠΈΠΌΠ²ΠΎΠ», ΡΠΏΠΈΡΠΎΠΊ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ² ΠΈ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΈΠΌ ΡΡΡΠΎΠΊΡ.
ΠΡΠΎΡΠ΅Π΄ΡΡΠ° XLookupString(), Π½Π°ΠΎΠ±ΠΎΡΠΎΡ, Π±Π΅ΡΠ΅Ρ ΡΠΎΠ±ΡΡΠΈΠ΅ ΠΎ Π½Π°ΠΆΠ°ΡΠΈΠΈ (ΠΎΡΠΏΡΡΠΊΠ°Π½ΠΈΠΈ) ΠΊΠ»Π°Π²ΠΈΡΠΈ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ Π΅ΠΌΡ ΡΠΈΠΌΠ²ΠΎΠ» ΠΈ ΡΡΡΠΎΠΊΡ. ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ Π΅Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ - ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΡΡΡΠΊΡΡΡΡ ΡΠΈΠΏΠ° XComposeStatus. ΠΠ΅Π»ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ ΠΈΠΌΠ΅ΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΡ ΠΊΠ»Π°Π²ΠΈΡΡ Compose, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠ΅ΡΠ°ΡΠ°ΡΡ ΡΠΈΠΌΠ²ΠΎΠ»Ρ, ΠΊΠΎΡΠΎΡΡΠΌ Π½Π΅Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΡ ΡΡΠ΅Π΄ΠΈ ΠΊΠ»Π°Π²ΠΈΡ. Π‘ΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½Π°Ρ ΡΠ°Π±Π»ΠΈΡΠ° ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΠΊΠ°ΠΊΠΎΠΉ ΡΠΈΠΌΠ²ΠΎΠ» Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΠΎΠ·Π΄Π°Π½, Π΅ΡΠ»ΠΈ ΠΎΠ±ΡΡΠ½Π°Ρ ΠΊΠ»Π°Π²ΠΈΡΠ° Π½Π°ΠΆΠΈΠΌΠ°Π΅ΡΡΡ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Ρ Compose. Π‘ΡΡΠ»ΠΊΠ° Π½Π° ΡΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ Π² ΡΡΡΡΠΊΡΡΡΠ΅ XComposeStatus.
ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡΡ ΡΡΠ°Π³ΠΌΠ΅Π½Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠ΅ ΠΊΠ»Π°Π²ΠΈΡΠΈ βΉF1βΊ-βΉF5βΊ, ΠΈ ΠΏΡΠΈ ΠΈΡ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΏΠ΅ΡΠ°ΡΠ°Π΅Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΡΡ ΡΡΡΠΎΠΊΡ. ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΠ°ΠΊΠΆΠ΅ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΈ βΉShift+Control+AβΊ ΡΡΡΠΎΠΊΡ "EXIT". ΠΡΠ° ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
β¦
var
prDisplay: PDisplay;
nScreenNum: integer;
prGC: TGC;
rEvent: TXEvent;
nWnd: TWindow;
sKeyStr: array [0β¦19] of char;
nKeySym: TKeySym;
naModList: array [0β¦1] of TKeySym;
n: integer;
r: char;
const
XK_Control_L=$FFE3; (* Left control *)
XK_Shift_L=$FFE1; (* Left shift *)
XK_F1=$FFBE;
XK_F2=$FFBF;
XK_F3=$FFC0;
XK_F4=$FFC1;
XK_F5=$FFC2;
XK_F6=$FFC3;
(* Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ ΡΠ²ΡΠ·Ρ Ρ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ, ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ Π½ΠΎΠΌΠ΅Ρ ΡΠΊΡΠ°Π½Π°β¦ *)
β¦
(* ΠΠ°Π΄Π°Π΅ΠΌ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»-ΡΡΡΠΎΠΊΠ° *)
naModList[0]:= XK_Control_L;
naModList[1]:= XK_Shift_L;
XRebindKeysym (prDisplay, XK_F6, naModList, 2, 'EXIT', strlen('EXIT'));
(* Π¦ΠΈΠΊΠ» ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΎΠ±ΡΡΠΈΠΉ *)
while true do begin
XNextEvent (prDisplay, @rEvent);
case (rEvent.eventtype) of
β¦
KeyPress:
begin
(* ΠΡΠΈΡΠ°Π΅ΠΌ ΡΡΡΠΎΠΊΡ *)
for n:=0 to 19 do sKeyStr[n]:=#0;
(* ΠΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΡΡΠΎΠΊΡ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΡΡ ΡΠΎΠ±ΡΡΠΈΡ *)
XLookupString (@rEvent.xkey, sKeyStr, 20, @nKeySym, NIL);
if (strcomp (sKeyStr, 'EXIT')=0) then
begin
XFreeGC (prDisplay, prGC);
XCloseDisplay (prDisplay);
halt (0);
end;
case nKeySym of
XK_F1: r:='1';
XK_F2: r:='2';
XK_F3: r:='3';
XK_F4: r:='4';
XK_F5: r:='5';
else r:='0';
end;
if (n<>0) then begin
sKeyStr[0]:='F';
sKeyStr[1]:=r;
sKeyStr[2]:=#0;
strcat(sKeyStr, ' pressed.');
XClearWindow (prDisplay, nWnd);
XDrawString (prDisplay, nWnd, prGC, 10, 50, sKeyStr, strlen (sKeyStr));
end;
end;
end;
end;
β¦
Π‘Π΅ΡΠ²Π΅Ρ ΠΈΠΌΠ΅Π΅Ρ ΡΡΠ΄ Π°ΡΡΠΈΠ±ΡΡΠΎΠ², Π²ΠΎΠ·Π΄Π΅ΠΉΡΡΠ²ΡΡΡΠΈΡ Π½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ ΡΠΈΠ³Π½Π°Π»ΠΎΠ² ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ. ΠΠΎΠ»ΡΡΠΈΡΡ ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ XGetKeyboardControl(). ΠΠ½Π° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΊΠ°Π·Π°Π½Π½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΈΠΌΠ΅ΡΡΠ΅ΠΉ ΡΠΈΠΏ TXKeyboardState, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
TXKeyboardControl = record
key_click_percent: longint;
bell_percent: longint;
bell_pitch: longint;
bell_duration: longint;
led: longint;
led_mode: longint;
key: longint;
auto_repeat_mode: longint;
end;
PXKeyboardControl = ^TXKeyboardControl;
ΠΠ΅ΡΠ²ΡΠ΅ ΡΠ΅ΡΡΡΠ΅ ΠΏΠΎΠ»Ρ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡ Ρ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠΌΠΈ ΠΏΠΎΠ»ΡΠΌΠΈ ΡΡΡΡΠΊΡΡΡΡ TXKeyboardState. ΠΠΎΠ»Ρ led ΠΈ led_mode ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΡΠΎΠΎΠ±ΡΠΈΡΡ ΡΠ΅ΡΠ²Π΅ΡΡ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΈΠ· ΠΊΠ»Π°Π²ΠΈΡ-ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ² Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π°ΡΡΡΡ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΊΠΎΠΉ. ΠΡΠ»ΠΈ ΠΏΠΎΠ»Π΅ led Π½Π΅ Π·Π°Π΄Π°Π½ΠΎ, ΠΈ led_mode ΡΠ°Π²Π½ΠΎ LedModeOn, ΡΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π²ΡΠ΅Ρ ΠΊΠ»Π°Π²ΠΈΡ, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ ΡΠ²Π΅ΡΠΎΠ²ΠΎΠ΅ ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅. ΠΡΠ»ΠΈ led_mode ΡΠ°Π²Π½ΠΎ LedModeOff, ΡΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΊΠ»Π°Π²ΠΈΡ Π½Π΅ ΠΌΠ΅Π½ΡΠ΅ΡΡΡ. ΠΡΠ»ΠΈ ΠΏΠΎΠ»Π΅ led Π·Π°Π΄Π°Π½ΠΎ, ΡΠΎ ΡΡΠΎ Π΅ΡΡΡ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ ΡΠ»Π°Π³ΠΎΠ², ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΠΈΡ , Π΄Π»Ρ ΠΊΠ°ΠΊΠΈΡ ΠΊΠ»Π°Π²ΠΈΡ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΊΡ Π²ΠΊΠ»ΡΡΠΈΡΡ (led_mode ΡΠ°Π²Π½ΠΎ LedModeOn) ΠΈΠ»ΠΈ Π²ΡΠΊΠ»ΡΡΠΈΡΡ (led_mode ΡΠ°Π²Π½ΠΎ LedModeOff).
ΠΠΎΠ»Ρ key ΠΈ auto_repeat_mode ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ, Π΄Π»Ρ ΠΊΠ°ΠΊΠΎΠΉ ΠΊΠ»Π°Π²ΠΈΡΠΈ (ΠΊΠ»Π°Π²ΠΈΡ) Π²ΠΊΠ»ΡΡΠΈΡΡ (auto_repeat_mode ΡΠ°Π²Π½ΠΎ AutoRepeatModeOn) ΠΈΠ»ΠΈ Π²ΡΠΊΠ»ΡΡΠΈΡΡ (auto_repeat_mode ΡΠ°Π²Π½ΠΎ AutoRepeatModeOff) ΡΠ΅ΠΆΠΈΠΌ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ²ΡΠΎΡΠ°. ΠΡΠ»ΠΈ ΠΏΠΎΠ»Π΅ key Π·Π°Π΄Π°Π½ΠΎ, ΡΠΎ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΏΠΎΠ²ΡΠΎΡ Π²ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ ΠΈΠ»ΠΈ Π²ΡΠΊΠ»ΡΡΠ°Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΠΊΠ»Π°Π²ΠΈΡΠΈ Ρ ΠΊΠΎΠ΄ΠΎΠΌ key.
1.3.2 ΠΡΡΡ
Π‘ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Ρ ΠΌΡΡΡΡ ΠΏΠΎΡ ΠΎΠΆΠ΅ Π½Π° ΡΠ°Π±ΠΎΡΡ Ρ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΠΎΠΉ. X ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΡΠΈΠ³Π½Π°Π»Ρ ΠΎΡ ΡΡΡΡΠΎΠΉΡΡΠ²Π°, ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅Ρ ΠΈΡ Π² ΡΠΎΠ±ΡΡΠΈΡ ΠΈ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅Ρ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ Π² ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠ΄Π½Π°ΠΊΠΎ Π΅ΡΡΡ ΠΈ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½Π°Ρ ΡΠ°Π·Π½ΠΈΡΠ°. ΠΡΠ»ΠΈ ΡΠΎΠ±ΡΡΠΈΡ ΠΎΡ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ Π»ΠΈΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅, ΠΎΠΊΠ½ΠΎ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΈΠΌΠ΅Π΅Ρ ΡΠΎΠΊΡΡ Π²Π²ΠΎΠ΄Π°, ΡΠΎ ΡΠΎΠ±ΡΡΠΈΡ ΠΎΡ ΠΌΡΡΠΈ ΠΌΠΎΠ³ΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡΡΡ, Π² ΠΏΡΠΈΠ½ΡΠΈΠΏΠ΅, Π»ΡΠ±ΠΎΠΉ Π·Π°Π΄Π°ΡΠ΅, ΠΎΠΊΠ½ΠΎ (ΠΎΠΊΠ½Π°) ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΡΡ Π½Π° ΡΠΊΡΠ°Π½Π΅.
Π§Π°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΡΠΎΠ±ΡΡΠΈΡ Π½Π°ΠΆΠ°ΡΠΈΡ (ΠΎΡΠΏΡΡΠΊΠ°Π½ΠΈΡ) ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΌΡΡΠΈ. ΠΠ»Ρ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΠΈΠΏΠ° ΡΠΎΠ±ΡΡΠΈΠΉ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΎΠ΄Π½Ρ ΠΈΠ· ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΠΌΠ°ΡΠΎΠΊ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ XSelectInput():
β’ ButtonPressMask - ΡΠ²Π΅Π΄ΠΎΠΌΠ»ΡΡΡ ΠΎ Π½Π°ΠΆΠ°ΡΠΈΠΈ Π»ΡΠ±ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· ΠΎΠΊΠΎΠ½ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
β’ ButtonReleaseMask - ΡΠ²Π΅Π΄ΠΎΠΌΠ»ΡΡΡ ΠΎΠ± ΠΎΡΠΏΡΡΠΊΠ°Π½ΠΈΠΈ Π»ΡΠ±ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· ΠΎΠΊΠΎΠ½ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
Π ΡΠΈΠΊΠ»Π΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΌΠΎΠ³ΡΡ ΠΏΡΠΎΠ²Π΅ΡΡΡΡΡΡ ΡΠ°ΠΊΠΈΠ΅ ΡΠΎΠ±ΡΡΠΈΡ:
β’ ButtonPress - Π½Π°ΠΆΠ°ΡΠ° ΠΊΠ½ΠΎΠΏΠΊΠ° Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· ΠΎΠΊΠΎΠ½ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
β’ ButtonRelease - ΠΎΡΠΏΡΡΠ΅Π½Π° ΠΊΠ½ΠΎΠΏΠΊΠ° Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· ΠΎΠΊΠΎΠ½ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
Π‘ΡΡΡΠΊΡΡΡΠ° Π΄Π»Ρ ΡΡΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ Π΄ΠΎΡΡΡΠΏΠΎΠΌ ΠΊ ΠΏΠΎΠ»Ρ xbutton ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ TXEvent ΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ, Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, ΡΠ°ΠΊΠΈΠ΅ ΠΏΠΎΠ»Ρ:
β’ window: TWindow - ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΎΠΊΠ½Π°, ΠΊΠΎΡΠΎΡΠΎΠΌΡ Π±ΡΠ»ΠΎ ΠΏΠΎΡΠ»Π°Π½ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ (Π² ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΎ Π±ΡΠ»ΠΎ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΎ Π΄Π»Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΎΠΊΠΎΠ½ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ).
β’ x, y: longint - ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ x ΠΈ y (Π² ΠΏΠΈΠΊΡΠ΅Π»ΡΡ ) ΠΌΡΡΠΈΠ½ΠΎΠ³ΠΎ ΠΊΡΡΡΠΎΡΠ° Π² ΠΌΠΎΠΌΠ΅Π½Ρ Π½Π°ΠΆΠ°ΡΠΈΡ.
β’ button: cardinal - Π½ΠΎΠΌΠ΅Ρ Π½Π°ΠΆΠ°ΡΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΈ (ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Button1, Button2, Button3).
β’ time: TTime - Π²ΡΠ΅ΠΌΡ (Π² ΠΌΠΈΠ»Π»ΠΈΡΠ΅ΠΊΡΠ½Π΄Π°Ρ ), ΠΊΠΎΡΠΎΡΠΎΠ΅ Π΄Π»ΠΈΠ»ΠΎΡΡ ΡΠΎΠ±ΡΡΠΈΠ΅. ΠΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ "Π΄Π²ΠΎΠΉΠ½ΠΎΠ³ΠΎ ΡΠ΅Π»ΡΠΊΠ°".
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΠΏΡΠΈΠ²Π΅Π΄Π΅ΠΌ ΡΡΠ°Π³ΠΌΠ΅Π½Ρ ΠΊΠΎΠ΄Π°, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠΈΡΡΠ΅ΡΡΡ ΡΠ΅ΡΠ½ΡΠΉ ΠΏΠΈΠΊΡΠ΅Π»Ρ Π² ΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΠΌΡΡΠΈ Π²ΡΡΠΊΠΈΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° ΠΌΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΠΎΠ±ΡΡΠΈΠ΅ "Π½Π°ΠΆΠ°ΡΠΈΠ΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ" ΠΎΡ ΠΏΠ΅ΡΠ²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΌΡΡΠΈ, ΠΈ ΡΡΠΈΡΠ°Π΅ΡΡΡ ΠΏΠΈΠΊΡΠ΅Π»Ρ (ΡΠΎ Π΅ΡΡΡ ΡΠΈΡΡΠ΅ΡΡΡ Π±Π΅Π»ΡΠΉ), ΠΊΠΎΠ³Π΄Π° Π½Π°ΠΆΠ°ΡΠ° Π²ΡΠΎΡΠ°Ρ ΠΊΠ½ΠΎΠΏΠΊΠ° ΠΌΡΡΠΈ. ΠΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π²ΡΡ GC: gc_draw Ρ ΡΠ΅ΡΠ½ΡΠΌ ΡΠ²Π΅ΡΠΎΠΌ ΠΏΠ΅ΡΠ΅Π΄Π½Π΅Π³ΠΎ ΠΏΠ»Π°Π½Π° ΠΈ gc_erase Ρ Π±Π΅Π»ΡΠΌ ΡΠ²Π΅ΡΠΎΠΌ ΠΏΠ΅ΡΠ΅Π΄Π½Π΅Π³ΠΎ ΠΏΠ»Π°Π½Π°.
β¦
ButtonPress:
begin
(* ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΠΌ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΌΡΡΠΈ Π² ΡΠ΅Π»ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ *)
(* ΡΠ°ΠΊΠΆΠ΅ ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΠΌ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΎΠΊΠ½Π°, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π±ΡΠ»Π° Π½Π°ΠΆΠ°ΡΠ° ΠΊΠ½ΠΎΠΏΠΊΠ° ΠΌΡΡΠΈ *)
x:= an_event.xbutton.x;
y:= an_event.xbutton.y;
the_win:= an_event.xbutton.window;
(* ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ, ΠΊΠ°ΠΊΠ°Ρ ΠΈΠ· ΠΊΠ½ΠΎΠΏΠΎΠΊ Π±ΡΠ»Π° Π½Π°ΠΆΠ°ΡΠ°, ΠΈ Π΄Π΅ΠΉΡΡΠ²ΡΠ΅ΠΌ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ *)
case (an_event.xbutton.button) of
Button1:
(* ΡΠΈΡΡΠ΅ΠΌ ΠΏΠΈΠΊΡΠ΅Π»Ρ Π² ΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΠΌΡΡΠΈ *)
XDrawPoint(display, the_win, gc_draw, x, y);
Button2:
(* ΡΡΠΈΡΠ°Π΅ΠΌ ΠΏΠΈΠΊΡΠ΅Π»Ρ Π² ΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΠΌΡΡΠΈ *)
XDrawPoint(display, the_win, gc_erase, x, y);
else (* Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΡΠ΅ΡΡΡ ΠΊΠ½ΠΎΠΏΠΊΠ° - ΠΈΠ³Π½ΠΎΡΠΈΡΡΠ΅ΠΌ *)
;
end;
end;
β¦
ΠΠΎΠ΄ΠΎΠ±Π½ΠΎ ΡΠΎΠ±ΡΡΠΈΡΠΌ Π½Π°ΠΆΠ°ΡΠΈΡ ΠΈ ΠΎΡΠΏΡΡΠΊΠ°Π½ΠΈΡ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΌΡΡΠΈ, Π½Π°Ρ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡΡ ΠΈΠ·Π²Π΅ΡΠ°ΡΡ ΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠΎΠ±ΡΡΠΈΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΠΌΡΡΠΈ. ΠΠ½ΠΈ Π΄Π΅Π»ΡΡΡΡ Π½Π° Π΄Π²Π° ΡΠ΅ΠΌΠ΅ΠΉΡΡΠ²Π°. ΠΠ΅ΡΠ²ΠΎΠ΅ - ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΠΌΡΡΠΈ, ΠΏΠΎΠΊΠ° Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ Π½Π΅ Π½Π°ΠΆΠΈΠΌΠ°ΡΡΡΡ, ΠΈ Π²ΡΠΎΡΠΎΠ΅ - Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΠΌΡΡΠΈ ΠΏΡΠΈ ΠΎΠ΄Π½ΠΎΠΉ (ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅) Π½Π°ΠΆΠ°ΡΡΡ ΠΊΠ½ΠΎΠΏΠΊΠ°Ρ (ΡΡΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ΅ΠΉ "ΠΏΠ΅ΡΠ΅ΡΠ°ΡΠΊΠΈΠ²Π°Π½ΠΈΡ" (drag)). Π‘Π»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΌΠ°ΡΠΊΠΈ ΡΠΎΠ±ΡΡΠΈΠΉ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ Π² Π²ΡΠ·ΠΎΠ² XSelectInput() Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈΠ·Π²Π΅ΡΠ΅Π½ΠΈΠΉ ΠΎ ΡΠ°ΠΊΠΈΡ ΡΠΎΠ±ΡΡΠΈΡΡ :
β’ PointerMotionMask - ΡΠΎΠ±ΡΡΠΈΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ, ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°ΡΡΠ΅Π³ΠΎΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· ΠΎΠΊΠΎΠ½ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠΎΠ³Π΄Π° Π½ΠΈ ΠΎΠ΄Π½Π° ΠΊΠ½ΠΎΠΏΠΊΠ° ΠΌΡΡΠΈ Π½Π΅ Π½Π°ΠΆΠ°ΡΠ°.
β’ ButtonMotionMask - ΡΠΎΠ±ΡΡΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ, ΠΏΠΎΠΊΠ° ΠΎΠ΄Π½Π° (ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅) ΠΊΠ½ΠΎΠΏΠΎΠΊ ΠΌΡΡΠΈ ΡΠ΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ Π½Π°ΠΆΠ°ΡΠΎΠΉ.
β’ Button1MotionMask - ΡΠΎΠΆΠ΅, ΡΡΠΎ ΠΈ ButtonMotionMask, Π½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠ³Π΄Π° ΠΏΠ΅ΡΠ²Π°Ρ ΠΊΠ½ΠΎΠΏΠΊΠ° ΠΌΡΡΠΈ ΡΠ΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ Π½Π°ΠΆΠ°ΡΠΎΠΉ.
β’ Button2MotionMask, Button3MotionMask, Button4MotionMask, Button5MotionMask - Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ Π΄Π»Ρ ΠΊΠ½ΠΎΠΏΠΎΠΊ 2, 3, 4 ΠΈΠ»ΠΈ 5.
Π ΡΠΈΠΊΠ»Π΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΡΡΡ ΡΠΎΠ±ΡΡΠΈΠ΅ MotionNotify - ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΠΌΡΡΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π»ΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· ΠΎΠΊΠΎΠ½, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΡΡ ΠΌΡ Π·Π°ΠΏΡΠΎΡΠΈΠ»ΠΈ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ ΠΎ ΡΠ°ΠΊΠΈΡ ΡΠΎΠ±ΡΡΠΈΡΡ .
Π‘ΡΡΡΠΊΡΡΡΠ° Π΄Π»Ρ ΡΡΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ Π΄ΠΎΡΡΡΠΏΠΎΠΌ ΠΊ ΠΏΠΎΠ»Ρ xmotion ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ TXEvent ΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ, Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, ΡΠ°ΠΊΠΈΠ΅ ΠΏΠΎΠ»Ρ:
β’ window: TWindow - ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΎΠΊΠ½Π°, ΠΊΠΎΡΠΎΡΠΎΠΌΡ Π±ΡΠ»ΠΎ ΠΏΠΎΡΠ»Π°Π½ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ ΠΌΡΡΠΈ (Π² ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΎ Π±ΡΠ»ΠΎ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΎ Π΄Π»Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΎΠΊΠΎΠ½ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ).
β’ x, y: longint - ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ x ΠΈ y (Π² ΠΏΠΈΠΊΡΠ΅Π»ΡΡ ) ΠΌΡΡΠΈΠ½ΠΎΠ³ΠΎ ΠΊΡΡΡΠΎΡΠ° Π² ΠΌΠΎΠΌΠ΅Π½Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ.
β’ state: cardinal - ΠΌΠ°ΡΠΊΠ° ΠΊΠ½ΠΎΠΏΠΎΠΊ (ΠΈΠ»ΠΈ ΠΊΠ»Π°Π²ΠΈΡ), ΡΠ΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΡΠΎΠ³ΠΎ ΡΠΎΠ±ΡΡΠΈΡ (Π΅ΡΠ»ΠΈ ΡΠ°ΠΊΠΎΠ²ΡΠ΅ ΠΈΠΌΠ΅ΡΡΡΡ). ΠΡΠ° ΠΏΠΎΠ»Π΅ - ΠΏΠΎΠ±ΠΈΡΠΎΠ²ΠΎΠ΅ "ΠΠΠ" Π»ΡΠ±ΠΎΠ³ΠΎ ΠΈΠ· ΡΠ»Π΅Π΄ΡΡΡΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ: Button1Mask, Button2Mask, Button3Mask, Button4Mask, Button5Mask, ShiftMask, LockMask, ControlMask, Mod1Mask, Mod2Mask, Mod3Mask, Mod4Mask, Mod5Mask. ΠΠ΅ΡΠ²ΡΠ΅ ΠΏΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΡΡΡΠ»Π°ΡΡΡΡ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΌΡΡΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π°ΠΆΠΈΠΌΠ°ΡΡΡΡ, ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΌ ΠΊΠ»Π°Π²ΠΈΡΠ°ΠΌ (Mod1 - ΠΎΠ±ΡΡΠ½ΠΎ ΠΊΠ»Π°Π²ΠΈΡΠ° Alt ΠΈΠ»ΠΈ Meta).