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

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

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

β€’ 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).

β€’ time: TTime - врСмя (Π² миллисСкундах), ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ длилось событиС.

Как ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ опрСдСляСт Ρ€Π΅ΠΆΠΈΠΌ рисования для графичСского Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ, Ссли ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ ΠΌΡ‹ΡˆΡŒ, удСрТивая ΠΏΠ΅Ρ€Π²ΡƒΡŽ Π΅Π΅ ΠΊΠ½ΠΎΠΏΠΊΡƒ, ΠΌΡ‹ рисуСм Π½Π° экранС. Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄ ΠΈΠΌΠ΅Π΅Ρ‚ нСдостаток: ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΌΡ‹ΡˆΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ событий, Π²ΠΏΠΎΠ»Π½Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ событиС двиТСния ΠΌΡ‹ΡˆΠΈ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ пиксСля, Π½Π°Π΄ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ ΠΌΡ‹ΡˆΡŒ. Один ΠΈΠ· способов разрСщСния этой ситуации состоит Π² Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΠΈ послСднСго пиксСля, Π½Π°Π΄ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π±Ρ‹Π»Π° "ΠΏΡ€ΠΎΡ‚Π°Ρ‰Π΅Π½Π°" ΠΌΡ‹ΡˆΡŒ, ΠΈ рисованиСм Π»ΠΈΠ½ΠΈΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ Π·Π°ΠΏΠΎΠΌΠ½Π΅Π½Π½ΠΎΠΉ ΠΈ Π½ΠΎΠ²ΠΎΠΉ позициями указатСля ΠΌΡ‹ΡˆΠΈ.

…

 MotionNotify:

 begin

  (* сохраняСм ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΌΡ‹ΡˆΠΈ Π² Ρ†Π΅Π»Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ‚Π°ΠΊΠΆΠ΅ сохраняСм ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΎΠΊΠ½Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±Ρ‹Π»Π° ΠΏΡ€ΠΎΡ‚Π°Ρ‰Π΅Π½Π° ΠΌΡ‹ΡˆΡŒ *)

  x:= an_event.xmotion.x;

  y:= an_event.xmotion.y;

  the_win:= an_event.xbutton.window;


  (* Ссли пСрвая ΠΊΠ½ΠΎΠΏΠΊΠ° ΠΌΡ‹ΡˆΠΈ ΡƒΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Π»Π°ΡΡŒ Π²ΠΎ врСмя этого события, Ρ€ΠΈΡΡƒΠ΅ΠΌ пиксСль Π² ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ΠΌΡ‹ΡˆΠΈΠ½ΠΎΠ³ΠΎ курсора *)

  if (an_event.xmotion.state AND Button1Mask) then begin

  XDrawPoint(display, the_win, gc_draw, x, y);

 end;

end;

…

Π”Ρ€ΡƒΠ³ΠΎΠΉ Ρ‚ΠΈΠΏ ΠΌΡ‹ΡˆΠΈΠ½Ρ‹Ρ… событий - Π²Ρ…ΠΎΠ΄ указатСля ΠΌΡ‹ΡˆΠΈ Π² ΠΎΠΊΠ½ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈΠ»ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· ΠΎΠΊΠ½Π°. НСкоторыС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ эти события, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎ фокус. Для рСгистрации событий этого Ρ‚ΠΈΠΏΠ° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΎΠ΄Π½Ρƒ (ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅) ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… масок Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ XSelectInput():

β€’ EnterWindowMask - ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»ΡΡ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΌΡ‹ΡˆΠΈ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² любоС ΠΈΠ· ΠΎΠΊΠΎΠ½ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

β€’ LeaveWindowMask - ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»ΡΡ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΌΡ‹ΡˆΠΈ Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΈΠ· ΠΎΠΊΠ½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Π’ Ρ†ΠΈΠΊΠ»Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ сообщСний провСряСтся ΠΎΠ΄Π½ΠΎ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… событий:

β€’ EnterNotify - ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΌΡ‹ΡˆΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ вошСл Π² ΠΎΠ΄Π½ΠΎ ΠΈΠ· ΠΎΠΊΠΎΠ½ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

β€’ LeaveNotify - ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΌΡ‹ΡˆΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ Π²Ρ‹ΡˆΠ΅Π» ΠΈΠ· ΠΎΠΊΠ½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° для этих сообщСний получаСтся доступом ΠΊ полю xcrossing объСдинСния TXEvent ΠΈ содСрТит, Π² частности, Ρ‚Π°ΠΊΠΈΠ΅ поля:

β€’ window: TWindow - ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΎΠΊΠ½Π°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π±Ρ‹Π»ΠΎ послано сообщСниС ΠΎΡ‚ ΠΌΡ‹ΡˆΠΈ (Π² случаС, Ссли ΠΎΠ½ΠΎ Π±Ρ‹Π»ΠΎ зарСгистрировано для Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΎΠΊΠΎΠ½ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹).

β€’ subwindow: TWindow - ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅Π³ΠΎ ΠΎΠΊΠ½Π° Ρ€Π΅Π±Π΅Π½ΠΊΠ°, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΡ‹ΡˆΡŒ ΠΏΠ΅Ρ€Π΅ΡˆΠ»Π° Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ (Π² событии EnterNotify), ΠΈΠ»ΠΈ Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΌΡ‹ΡˆΠΈ пСрСмСстился (Π² событии LeaveNotify), ΠΈΠ»ΠΈ None, Ссли ΠΌΡ‹ΡˆΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΠ»Π°ΡΡŒ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ ΠΎΠΊΠΎΠ½ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

β€’ x, y: longint - ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ x ΠΈ y (Π² пиксСлях) ΠΌΡ‹ΡˆΠΈΠ½ΠΎΠ³ΠΎ курсора Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ сообщСния.

β€’ mode: longint - Π½ΠΎΠΌΠ΅Ρ€ Π½Π°ΠΆΠ°Ρ‚ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΈ (ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ значСния Button1, Button2, Button3).

β€’ time: TTime - врСмя (Π² миллисСкундах), ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ длилось событиС. ΠœΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для опрСдСлСния "Π΄Π²ΠΎΠΉΠ½ΠΎΠ³ΠΎ Ρ‰Π΅Π»Ρ‡ΠΊΠ°".

β€’ state: cardinal - маска ΠΊΠ½ΠΎΠΏΠΎΠΊ (ΠΈΠ»ΠΈ клавиш), ΡƒΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… Π²ΠΎ врСмя этого события (Ссли Ρ‚Π°ΠΊΠΎΠ²Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ). Π­Ρ‚Π° ΠΏΠΎΠ»Π΅ - ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²ΠΎΠ΅ "Π˜Π›Π˜" любого ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ: Button1Mask, Button2Mask, Button3Mask, Button4Mask, Button5Mask, ShiftMask, LockMask, ControlMask, Mod1Mask, Mod2Mask, Mod3Mask, Mod4Mask, Mod5Mask. ΠŸΠ΅Ρ€Π²Ρ‹Π΅ ΠΏΡΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΌΡ‹ΡˆΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°ΠΆΠΈΠΌΠ°ΡŽΡ‚ΡΡ, ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ клавишам (Mod1 - ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ клавиша Alt ΠΈΠ»ΠΈ Meta).

β€’ focus: TBool - устанавливаСтся Π² True, Ссли ΠΎΠΊΠ½ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π½Ρ‹ΠΉ фокус, ΠΈ False Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС.

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ фокус Π²Π²ΠΎΠ΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ свободно ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΎΡ‚ ΠΎΠΊΠ½Π° ΠΊ ΠΎΠΊΠ½Ρƒ. Но ΠΈΠ½ΠΎΠ³Π΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ фокуса. Π­Ρ‚ΠΎ называСтся Π·Π°Ρ…Π²Π°Ρ‚ΠΎΠΌ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹. Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΅Π³ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° XGrabKeyboard().

Ѐункция XGrabKey() Π·Π°ΠΏΡ€Π΅Ρ‰Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ фокуса послС наТатия ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ клавиш. ΠžΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρƒ ΠΌΠΎΠΆΠ½ΠΎ, ΠΎΠ±Ρ€Π°Ρ‚ΠΈΠ²ΡˆΠΈΡΡŒ ΠΊ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅ XUngrabKeyboard() (XGrabKey()).

Рассмотрим ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ систСмы ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ событий ΠΎΡ‚ ΠΌΡ‹ΡˆΠΈ. Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Ссли Π΅Π΅ ΠΊΠ½ΠΎΠΏΠΊΠ° Π½Π°ΠΆΠ°Ρ‚Π° Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΊΠΎΠ³Π΄Π° Π΅Π΅ курсор находится Π² Π½Π΅Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΌ ΠΎΠΊΠ½Π΅, Ρ‚ΠΎ послСднСС активизируСтся, ΠΈ события ΠΎΡ‚ ΠΌΡ‹ΡˆΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ Π΅ΠΌΡƒ. Π‘ΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π² Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΌ состоянии ΠΎΠΊΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ события ΠΎΡ‚ ΠΌΡ‹ΡˆΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ сигналам, ΠΏΡ€ΠΈΡˆΠ΅Π΄ΡˆΠΈΠΌ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Π΅Π΅ курсор находится Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… ΠΎΠΊΠ½Π°. Но Ссли ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚

function XGrabPointer(prDisplay: PDisplay; nGrabWnd: TWindow; nOwnerEvents: TBool; nEventMask: cardinal; nPointerMode: longint; nKeyboardMode: longint; nConfineTo: TWindow; nCursor: TCursor; nTime: TTime): longint; cdecl; external;

Ρ‚ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ мСняСтся. Π’Π΅ΠΏΠ΅Ρ€ΡŒ всС события Π±ΡƒΠ΄ΡƒΡ‚ Π½Π°ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒΡΡ ΠΎΠΊΠ½Ρƒ с дСскриптором nGrabWnd. ΠžΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅Ρ‚ΡΡ ΠΌΡ‹ΡˆΡŒ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ XUngrabPointer(). ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° XGrabButton() ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ курсор Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π·Π°Ρ…Π²Π°Ρ‡Π΅Π½ послС наТатия ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΈ. ΠžΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ ΠΊ Π½Π΅ΠΉ являСтся ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° XUngrabButton().

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹, Π·Π°Ρ…Π²Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ устройство - ΠΌΡ‹ΡˆΡŒ ΠΈΠ»ΠΈ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρƒ - ΠΈΠΌΠ΅ΡŽΡ‚ ряд Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², Π²Π»ΠΈΡΡŽΡ‰ΠΈΡ… Π½Π° ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ систСмы.

Π’Π°ΠΊ, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ nConfineTo Π΅ΡΡ‚ΡŒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΎΠΊΠ½Π°, Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ курсор ΠΌΡ‹ΡˆΠΈ, Ссли ΠΎΠ½ Π·Π°Ρ…Π²Π°Ρ‡Π΅Π½.

Если Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ nOwnerEvents Ρ€Π°Π²Π΅Π½ Π’rue, Ρ‚ΠΎ события ΠΌΡ‹ΡˆΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒΡΡ ΠΎΠΊΠ½Π°ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Если nOwnerEvents - False, ΠΈΠ»ΠΈ курсор находится Π² ΠΎΠΊΠ½Π΅, Π½Π΅ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰Π΅ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, Ρ‚ΠΎ события ΠΌΡ‹ΡˆΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ ΠΎΠΊΠ½Ρƒ nGrabWnd.

Если nOwnerEvents Ρ€Π°Π²Π΅Π½ False, Ρ‚ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ nEventMask ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΊΠ°ΠΊΠΈΠ΅ события слСдуСт ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠΊΠ½Ρƒ nGrabWnd.

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° событий ΠΎΡ‚ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ ΠΈΠ»ΠΈ Π½Ρ‹ΡˆΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ приостановлСна, Ссли nPointerMode ΠΈΠ»ΠΈ nKeyboardMode Ρ€Π°Π²Π΅Π½ GrabModeSync. Π’ этом случаС события Π±ΡƒΡ„Π΅Ρ€ΠΈΠ·ΡƒΡŽΡ‚ΡΡ сСрвСром, ΠΏΠΎΠΊΠ° устройство Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ освобоТдСно с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ XUngrabKeyboard(), XUngrabKey(), XUngrabPointer() ΠΈΠ»ΠΈ XUngrabButton().

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ nCursor Π·Π°Π΄Π°Π΅Ρ‚ Ρ„ΠΎΡ€ΠΌΡƒ курсора Π²ΠΎ врСмя Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΌΡ‹ΡˆΡŒ Π·Π°Ρ…Π²Π°Ρ‡Π΅Π½Π°. АргумСнт nTime ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΊΠΎΠ³Π΄Π° систСма Π΄ΠΎΠ»ΠΆΠ½Π° Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅ΠΆΠΈΠΌ Π·Π°Ρ…Π²Π°Ρ‚Π°.

1.3.3 Лабораторная Ρ€Π°Π±ΠΎΡ‚Π° #3 "Π Π°Π±ΠΎΡ‚Π° с внСшними устройствами"

1. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ XKeysymToString() ΠΈ XKeycodeToKeysym(), Π½Π°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, которая Ρ€Π΅Π°Π³ΠΈΡ€ΡƒΠ΅Ρ‚ Π½Π° Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ клавиш Π² ΠΎΠΊΠ½Π΅ Π²Ρ‹Π΄Π°Ρ‡Π΅ΠΉ Π² Π½Π΅Π³ΠΎ ΠΊΠΎΠ΄Π° символа, состояния ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² ΠΈ символьной Ρ€Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²ΠΊΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΎΠΉ клавиши.


2. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ ΠΌΡ‹ΡˆΠΈ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ наТатия ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΈ ΠΏΠ΅Ρ‡Π°Ρ‚Π°ΡŽΡ‰ΡƒΡŽ Π² ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ ΠΌΡ‹ΡˆΠΈΠ½ΠΎΠ³ΠΎ курсора ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ ΠΌΡ‹ΡˆΠΈ ΠΈ Π½ΠΎΠΌΠ΅Ρ€ Π½Π°ΠΆΠ°Ρ‚ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΈ.


3. ΠœΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ для рисования Ρ‚ΠΎΡ‡Π΅ΠΊ Π² мСстах Π½Π°ΠΆΠ°Ρ‚ΠΈΠΉ ΠΌΡ‹ΡˆΠΈ ΠΈ ΠΏΡ€ΠΈ Π΅Π΅ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠΈ с Π½Π°ΠΆΠ°Ρ‚ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ.


4. ΠœΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ для рисования ΠΎΡ‚Ρ€Π΅Π·ΠΊΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρƒ наТатиями ΠΌΡ‹ΡˆΠΈ ΠΈ ΠΏΡ€ΠΈ Π΅Π΅ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠΈ с Π½Π°ΠΆΠ°Ρ‚ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ.


5. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‰ΡƒΡŽ Π² ΠΎΠΊΠ½Π΅ содСрТимоС тСкстового Ρ„Π°ΠΉΠ»Π°, имя ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ задаСтся Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС. Для скроллинга тСкста ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ клавиши Up, Down, Left, Right, PageUp, PageDown, Home, End.


6. Π‘ΠΎΡΡ‚Π°Π²ΡŒΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΈΠ³Ρ€Ρ‹ "ΠŸΡΡ‚Π½Π°ΡˆΠΊΠΈ", выбирая ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅ΠΌΡƒΡŽ ячСйку ΠΌΡ‹ΡˆΡŒΡŽ.


7. Π‘ΠΎΡΡ‚Π°Π²ΡŒΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, которая ΠΏΠΎ Π½Π°ΠΆΠ°Ρ‚ΠΈΡŽ Π»Π΅Π²ΠΎΠΉ клавиши ΠΎΡ‡ΠΈΡ‰Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‡ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ, ΠΏΡ€ΠΈ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠΈ с Π½Π°ΠΆΠ°Ρ‚ΠΎΠΉ Π»Π΅Π²ΠΎΠΉ клавишСй рисуСт Ρ‚ΠΎΡ‡ΠΊΡƒ Π² ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ указатСля ΠΌΡ‹ΡˆΠΈ, Π° ΠΏΡ€ΠΈ отпускании Π»Π΅Π²ΠΎΠΉ клавиши соСдиняСт всС Ρ‚ΠΎΡ‡ΠΊΠΈ Π² Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ области Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ.

1.4 ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ ΠΈΡ… рСсурсы

МногиС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π·Π°Ρ€Π°Π½Π΅Π΅ ΠΏΠΎΠ΄Π³ΠΎΡ‚Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Ρ… X Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ - рСсурсами. Π­Ρ‚ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ†Π²Π΅Ρ‚Π° ΠΎΠΊΠΎΠ½ прилоТСния, строки сообщСний ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ ΠΈ Ρ‚.Π΄.

Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, программисты ΡΠΎΠ·Π΄Π°ΡŽΡ‚ рСсурсы ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠΎ-своСму. Π’ X Window сдСлана ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΡƒΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ этот процСсс.

1.4.1 Π€ΠΎΡ€ΠΌΠ°Ρ‚ Ρ„Π°ΠΉΠ»Π° рСсурсов

Π’ X Ρ„Π°ΠΉΠ» рСсурсов Π΅ΡΡ‚ΡŒ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ тСкстовый Ρ„Π°ΠΉΠ», каТдая строка ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π·Π°Π΄Π°Π΅Ρ‚ Ρ‚ΠΎΡ‚ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ (рСсурс) ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. (ΠŸΡ€ΠΈ этом прСдполагаСтся, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ "Π½Π°ΡΠ΅Π»ΡΡŽΡ‚" ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, связанныС Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΡŽ). ΠžΠ±Ρ‰ΠΈΠΉ Π²ΠΈΠ΄ строки ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ:

‹имя ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹β€Ί.β€ΉΠΏΠΎΠ΄ΠΎΠ±ΡŠΠ΅ΠΊΡ‚1β€Ί.β€ΉΠΏΠΎΠ΄ΠΎΠ±ΡŠΠ΅ΠΊΡ‚2β€Ί. . .β€ΉΠΏΠΎΠ΄ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Nβ€Ί.‹имя рСсурса›: β€ΉΠ·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ рСсурса›

Подобная строка Π·Π°Π΄Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ рСсурса для ΠΏΠΎΠ΄ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. НапримСр, запись

myprog.dialogwnd.background: Red

Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ myprog Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° с ΠΈΠΌΠ΅Π½Π΅ΠΌ dialogwnd ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ background (Ρ†Π²Π΅Ρ‚ Ρ„ΠΎΠ½Π°) ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Red (красный Ρ†Π²Π΅Ρ‚).

ВмСсто ΠΈΠΌΠ΅Π½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΌΠΎΠ³ΡƒΡ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΈΡ… классы. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ класс ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΎ ΠΆΠ΅ самоС имя, Ρ‡Ρ‚ΠΎ ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π½ΠΎ начинаСтся с Π·Π°Π³Π»Π°Π²Π½ΠΎΠΉ Π±ΡƒΠΊΠ²Ρ‹, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€,

Myprog.dialogwnd.Background: Red

Π§Π°ΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈΠ»ΠΈ классов Π² Π»Π΅Π²ΠΎΠΉ части строки, Π·Π°Π΄Π°ΡŽΡ‰Π΅ΠΉ рСсурс, ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ символом '*', Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, строка