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

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

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

ВсС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ Π²Ρ‹ΡˆΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ измСняли свойства ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°. БущСствуСт ряд свойств, связанных с Π΄Π°Π½Π½Ρ‹ΠΌ ΠΎΠΊΠ½ΠΎΠΌ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΎΠΊΠ½Π°ΠΌΠΈ. Одно ΠΈΠ· Π½ΠΈΡ… - порядок засылки Π² стСк: порядок, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠΊΠ½Π° Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ Π΄Ρ€ΡƒΠ³ Π½Π°Π΄ Π΄Ρ€ΡƒΠ³ΠΎΠΌ. Говорят, Ρ‡Ρ‚ΠΎ ΠΎΠΊΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π½Π΅Π³ΠΎ ΠΏΠ»Π°Π½Π° находится Π½Π° Π²Π΅Ρ€Ρ…Π΅ стСка, Π° ΠΎΠΊΠ½ΠΎ Π·Π°Π΄Π½Π΅Π³ΠΎ ΠΏΠ»Π°Π½Π° - Π½Π° Π΄Π½Π΅ стСка. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΎΠΊΠ½Π° Π½Π° Π²Π΅Ρ€ΡˆΠΈΠ½Ρƒ стСка осущСствляСт функция XRaiseWindow(), ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΎΠΊΠ½Π° Π½Π° Π΄Π½ΠΎ стСка - функция XLowerWindow().

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ XIconifyWindow() ΠΎΠΊΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ свСрнуто, Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ XMapWindow() - восстановлСно. Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ для XIconifyWindow() Π½Π΅Ρ‚ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ, ΠΊΠΎΠ³Π΄Π° ΠΎΠΊΠ½ΠΎ сворачиваСтся, Π½Π° самом Π΄Π΅Π»Π΅ ΠΎΠ½ΠΎ скрываСтся, Π° вмСсто Π½Π΅Π³ΠΎ отобраТаСтся ΠΎΠΊΠ½ΠΎ ΠΈΠΊΠΎΠ½ΠΊΠΈ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ исходноС ΠΎΠΊΠ½ΠΎ, Π½ΡƒΠΆΠ½ΠΎ просто ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ Π΅Π³ΠΎ снова. Иконка являСтся Π½Π° самом Π΄Π΅Π»Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΎΠΊΠ½ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ просто тСсно связано сильно с нашим Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΎΠΊΠ½ΠΎΠΌ - это Π½Π΅ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ состояниС нашСго ΠΎΠΊΠ½Π°.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ дСмонстрируСт использованиС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π½Π°Π΄ ΠΎΠΊΠ½Π°ΠΌΠΈ:

uses x,xlib,xutil,crt,dos;


(* create_simple_window - создаСт ΠΎΠΊΠ½ΠΎ с Π±Π΅Π»Ρ‹ΠΌ Ρ„ΠΎΠ½ΠΎΠΌ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°.

 ΠŸΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² дисплСй, Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΎΠΊΠ½Π° (Π² пиксСлях) ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠΊΠ½Π° (Ρ‚Π°ΠΊΠΆΠ΅ Π² пиксСлях). Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ дСскриптор ΠΎΠΊΠ½Π°.

 ΠžΠΊΠ½ΠΎ создаСтся с Ρ‡Π΅Ρ€Π½ΠΎΠΉ Ρ€Π°ΠΌΠΊΠΎΠΉ ΡˆΠΈΡ€ΠΈΠ½ΠΎΠΉ Π² 2 пиксСля ΠΈ автоматичсСки отобраТаСтся послС создания. *)

function create_simple_window(display: PDisplay; width, height, x, y: integer): TWindow;

var

 screen_num, win_border_width: integer;

 win: TWindow;

begin

 screen_num:= XDefaultScreen(display);

 win_border_width:= 2;


(* создаСм простоС ΠΎΠΊΠ½ΠΎ ΠΊΠ°ΠΊ прямой ΠΏΠΎΡ‚ΠΎΠΌΠΎΠΊ ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° экрана, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ‡Π΅Ρ€Π½Ρ‹ΠΉ ΠΈ Π±Π΅Π»Ρ‹ΠΉ Ρ†Π²Π΅Ρ‚Π° Π² качСствС основного ΠΈ Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠ³ΠΎ, ΠΈ размСщая Π½ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ Π»Π΅Π²ΠΎΠΌ ΡƒΠ³Π»Ρƒ ΠΏΠΎ Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌ *)


 win:= XCreateSimpleWindow(display, XRootWindow(display, screen_num), x, y, width, height, win_border_width, XBlackPixel(display, screen_num), XWhitePixel(display, screen_num));


(* ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌ ΠΎΠΊΠ½ΠΎ Π½Π° экранС. *)

 XMapWindow(display, win);


(* ЗаставляСм Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒΡΡ всС запросы ΠΊ Π₯ сСрвСру. *)

 XFlush(display);


 create_simple_window:=win;

end;


//void main(int argc, char* argv[])

var

 display: PDisplay; (* ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° структуру дисплСя Π₯ *)

 screen_num: integer; (* количСство экранов для размСщСния ΠΎΠΊΠΎΠ½ *)

 win: TWindow; (* дСскриптор создаваСмого ΠΎΠΊΠ½Π° *)

 display_width, display_height: word; (* высота ΠΈ ΡˆΠΈΡ€ΠΈΠ½Π° Π₯ дисплСя *)

 win_width, win_height: word; (* высота ΠΈ ΡˆΠΈΡ€ΠΈΠ½Π° Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° *)

 display_name: array [0…30] of Char;

 name: string;

 i: integer;

 win_attr: TXWindowAttributes;

 xx, y, scr_x, scr_y: integer;

 child_win: TWindow; (* пСрСмСнная для хранСния дСскриптора Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° *)

 parent_win: TWindow; (* эта пСрСмСнная Π±ΡƒΠ΄Π΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ дСскриптор ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°  экрана, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΎ нашС ΠΎΠΊΠ½ΠΎ *)

 root_win: TWindow; (* эта пСрСмСнная Π±ΡƒΠ΄Π΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ массив дСскрипторов Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… ΠΎΠΊΠΎΠ½ нашСго ΠΎΠΊΠ½Π°, *)

 child_windows: PWindow; (* Π° эта - ΠΈΡ… количСство *)

 num_child_windows: integer;


begin

 name:= getenv('DISPLAY'); (* имя Π₯ дисплСя *)

 for i:=1 to byte(name[0]) do display_name[i-1]:=name[i];

 display_name[byte(name[0])]:=#0;

 (* устанавливаСм соСдинСниС с Π₯ сСрвСром *)

 display:= XOpenDisplay(display_name);

 if (display = NIL) then begin

  writeln(paramstr(0),': Π½Π΅ ΠΌΠΎΠ³Ρƒ ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒΡΡ с Π₯ сСрвСром ',  display_name);

  halt(1);

 end;


 (* ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π³Π΅ΠΎΠΌΠ΅Ρ‚Ρ€ΠΈΡŽ экрана ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для нашСго дисплСя *)

 screen_num:= XDefaultScreen(display);

 display_width:= XDisplayWidth(display, screen_num);

 display_height:= XDisplayHeight(display, screen_num);


 (* создаСм Π½ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ Π² 1/9 ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΈ экрана *)

 win_width:= (display_width div 3);

 win_height:= (display_height div 3);

 (* отладочная ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ Π² стандартный Π²Ρ‹Π²ΠΎΠ΄ *)

 writeln('ΡˆΠΈΡ€ΠΈΠ½Π° ΠΎΠΊΠ½Π° - ', win_width, '; высота - ', win_height);


(* создаСм простоС ΠΎΠΊΠ½ΠΎ ΠΊΠ°ΠΊ прямой ΠΏΠΎΡ‚ΠΎΠΌΠΎΠΊ ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° экрана, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ‡Π΅Ρ€Π½Ρ‹ΠΉ ΠΈ Π±Π΅Π»Ρ‹ΠΉ Ρ†Π²Π΅Ρ‚Π° Π² качСствС основного ΠΈ Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠ³ΠΎ, ΠΈ размСщая Π½ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ Π»Π΅Π²ΠΎΠΌ ΡƒΠ³Π»Ρƒ ΠΏΠΎ Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌ *)

 win:= create_simple_window(display, win_width, win_height, 0, 0);

 XFlush(display);


 (* ΠΎΡ‚Π΄ΠΎΡ…Π½Π΅ΠΌ послС Ρ‚Ρ€ΡƒΠ΄ΠΎΠ² ΠΏΡ€Π°Π²Π΅Π΄Π½Ρ‹Ρ… *)

 delay(3000);


 (* ΠΏΡ€ΠΈΠΌΠ΅Ρ€ измСнСния Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² ΠΎΠΊΠ½Π° *)

 begin


  (* Π² Ρ†ΠΈΠΊΠ»Π΅ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅ΠΌ ΠΎΠΊΠ½ΠΎ *)

  for i:=0 to 39 do begin

   dec(win_width,3);

   dec(win_height,3);

   XResizeWindow(display, win, win_width, win_height);

   XFlush(display);

   delay(20);

  end;


  (* Π² Ρ†ΠΈΠΊΠ»Π΅ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅ΠΌ ΠΎΠΊΠ½ΠΎ *)

  for i:=0 to 39 do begin

   inc(win_width,3);

   inc(win_height,3);

   XResizeWindow(display, win, win_width, win_height);

   XFlush(display);

   delay(20);

  end;

 end;


 delay(1000);


 (* ΠΏΡ€ΠΈΠΌΠ΅Ρ€ пСрСмСщСния ΠΎΠΊΠ½Π° *)

 begin


  (* Π²Π½Π°Ρ‡Π°Π»Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠ΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ ΠΎΠΊΠ½Π° *)

  XGetWindowAttributes(display, win, @win_attr);


  xx:= win_attr.x;

  y:= win_attr.y;


  (* Π·Π°Ρ‚Π΅ΠΌ Π½Π°Ρ…ΠΎΠ΄ΠΈΠΌ ΠΎΠΊΠ½ΠΎ родитСля *)

  begin


   (* Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ запрос Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ *)

   XQueryTree(display, win, @root_win, @parent_win,@child_windows, @num_child_windows);


   (* ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ список Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… дСскрипторов, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ Π±Ρ‹Π» динамичСски Π²Ρ‹Π΄Π΅Π»Π΅Π½ XQueryTree() *)

   XFree(child_windows);

  end;


  (* ВранслируСм Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π² экранныС, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΊΠ°ΠΊ ΠΎΠΊΠ½ΠΎ, ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ выполняСтся Ρ‚рансляция. Π­Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ всСгда Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ вСсь экран, ΠΈ Π΅Π³ΠΎ Π»Π΅Π²Ρ‹ΠΉ Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ ΡƒΠ³ΠΎΠ» совпадаСт Ρ Π»Π΅Π²Ρ‹ΠΌ Π²Π΅Ρ€Ρ…Π½ΠΈΠΌ ΡƒΠ³Π»ΠΎΠΌ экрана *)

  XTranslateCoordinates(display, parent_win, win_attr.root, xx, y, @scr_x, @scr_y, @child_win);


  (* ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅ΠΌ ΠΎΠΊΠ½ΠΎ Π²Π»Π΅Π²ΠΎ *)

  for i:=0 to 39 do begin

   dec(scr_x,3);

   XMoveWindow(display, win, scr_x, scr_y);

   XFlush(display);

   delay(20);

  end;


  (* ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅ΠΌ ΠΎΠΊΠ½ΠΎ Π²Π½ΠΈΠ· *)

  for i:=0 to 39 do begin

   inc(scr_y,3);

   XMoveWindow(display, win, scr_x, scr_y);

   XFlush(display);

   delay(20);

  end;


  (* ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅ΠΌ ΠΎΠΊΠ½ΠΎ Π²ΠΏΡ€Π°Π²ΠΎ *)

  for i:=0 to 39 do begin

   inc(scr_x,3);

   XMoveWindow(display, win, scr_x, scr_y);

   XFlush(display);

   delay(20);

  end;


  (* ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅ΠΌ ΠΎΠΊΠ½ΠΎ Π²Π²Π΅Ρ€Ρ… *)

  for i:=0 to 39 do begin

   dec(scr_y,3);

   XMoveWindow(display, win, scr_x, scr_y);

   XFlush(display);

   delay(20);

  end;

 end;


 delay(1000);


 (* ΠΏΡ€ΠΈΠΌΠ΅Ρ€ сворачивания ΠΈ восстановлСния ΠΎΠΊΠ½Π° *)

 begin

  (* сворачиваСм ΠΎΠΊΠ½ΠΎ *)

  XIconifyWindow(display, win, XDefaultScreen(display));

  XFlush(display);

  delay(2000);

  (* восстанавливаСм ΠΎΠΊΠ½ΠΎ *)

  XMapWindow(display, win);

  XFlush(display);

  delay(2000);

 end;


 XFlush(display);


 (* короткая ΠΏΠ΅Ρ€Π΅Π΄Ρ‹ΡˆΠΊΠ° *)

 delay(2000);


 (* Π·Π°ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ соСдинСниС с Π₯ сСрвСром *)

 XCloseDisplay(display);

end.

1.1.10 Лабораторная Ρ€Π°Π±ΠΎΡ‚Π° #1 "ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ понятия Xlib"

1. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ компилятор ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΈΠ· ΠΏ. 1.1 ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ.

2. НастройтС ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ срСду ΠΠ½ΡŽΡ‚Π° для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΊΠΈΡ€ΠΈΠ»Π»ΠΈΡ†Π΅ΠΉ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ Π² Π½Π΅ΠΉ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

3. На основС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π½Π°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, которая ΠΏΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ клавиши ΠΌΡ‹ΡˆΠΈ ΠΏΠΈΡˆΠ΅Ρ‚ сообщСниС Pressed, Π° ΠΏΡ€ΠΈ отпускании - Released.

4. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ XFlush() / XSync() ΠΈ delay(), Π½Π°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π±Π΅Π· Ρ†ΠΈΠΊΠ»Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ сообщСний, ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‰ΡƒΡŽ Ρ‡Π΅Ρ€Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 100Ρ…100 пиксСлСй Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ 5 сСкунд.