Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² X Window срСдствами Free PascalΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 12

Автор А. ΠŸΠΎΠ»ΠΈΡ‰ΡƒΠΊ

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).