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

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

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

1.2.5 Π‘ΠΈΡ‚ΠΎΠ²Ρ‹Π΅ ΠΈ ΠΏΠΈΠΊΡΠ΅Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠ°Ρ€Ρ‚Ρ‹

Xlib Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… срСдств для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с популярными графичСскими Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°ΠΌΠΈ, Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ gif, jpeg ΠΈΠ»ΠΈ tiff. На программиста (ΠΈΠ»ΠΈ высокоуровнСвыС графичСскиС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ) оставлСн ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ эти Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π·Π½Π°ΠΊΠΎΠΌ X сСрвСр - Π±ΠΈΡ‚ΠΎΠ²Ρ‹ΠΌΠΈ ΠΈ ΠΏΠΈΠΊΡΠ΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΊΠ°Ρ€Ρ‚Π°ΠΌΠΈ.

Битовая ΠΊΠ°Ρ€Ρ‚Π° X - Π΄Π²ΡƒΡ…Ρ†Π²Π΅Ρ‚Π½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, сохранСнноС Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅, спСцифичСском для X Window. Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½Π½Ρ‹Π΅ Π² Ρ„Π°ΠΉΠ»Π΅, Π΄Π°Π½Π½Ρ‹Π΅ Π±ΠΈΡ‚ΠΎΠ²ΠΎΠΉ ΠΊΠ°Ρ€Ρ‚Ρ‹ выглядят ΠΏΠΎΡ…ΠΎΠΆΠΈΠΌΠΈ Π½Π° исходный Ρ„Π°ΠΉΠ» Π½Π° языкС C. Он содСрТит ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠ΅ ΡˆΠΈΡ€ΠΈΠ½Ρƒ ΠΈ высоту Π±ΠΈΡ‚ΠΎΠ²ΠΎΠ³ΠΎ изобраТСния, массив, содСрТащиС Π±ΠΈΡ‚ΠΎΠ²Ρ‹Π΅ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρ‹ Π±ΠΈΡ‚ΠΎΠ²ΠΎΠ³ΠΎ изобраТСния (Ρ€Π°Π·ΠΌΠ΅Ρ€ массива Ρ€Π°Π²Π΅Π½ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡŽ ΡˆΠΈΡ€ΠΈΠ½Ρ‹ Π½Π° высоту), ΠΈ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ горячСй Ρ‚ΠΎΡ‡ΠΊΠΈ (ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ).

ПиксСльная ΠΊΠ°Ρ€Ρ‚Π° X - Ρ„ΠΎΡ€ΠΌΠ°Ρ‚, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ для хранСния ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π² памяти Π₯ сСрвСра. Π­Ρ‚ΠΎΡ‚ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ ΠΊΠ°ΠΊ Ρ‡Π΅Ρ€Π½ΠΎ-Π±Π΅Π»Ρ‹Π΅ изобраТСния (Ρ‚Π΅ ΠΆΠ΅ Π±ΠΈΡ‚ΠΎΠ²Ρ‹Π΅ ΠΊΠ°Ρ€Ρ‚Ρ‹), Ρ‚Π°ΠΊ ΠΈ Ρ†Π²Π΅Ρ‚Π½Ρ‹Π΅ изобраТСния. Π­Ρ‚ΠΎ СдинствСнный графичСский Ρ„ΠΎΡ€ΠΌΠ°Ρ‚, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹ΠΉ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠΌ X, ΠΈ любоС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π° экранС, Π΄ΠΎΠ»ΠΆΠ½ΠΎ сначала Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Π΅Π½ΠΎ Π² этот Ρ„ΠΎΡ€ΠΌΠ°Ρ‚.

Π’ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, пиксСльная ΠΊΠ°Ρ€Ρ‚Π° X ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚Ρ€Π°ΠΊΡ‚ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ ΠΎΠΊΠ½ΠΎ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½Π΅ появляСтся Π½Π° экранС. МногиС графичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π² ΠΎΠΊΠ½Π°Ρ…, Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² ΠΏΠΈΠΊΡΠ΅Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠ°Ρ€Ρ‚Π°Ρ… - достаточно ΠΏΠΎΠ΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ дСскриптор пиксСльной ΠΊΠ°Ρ€Ρ‚Ρ‹ вмСсто дСскриптора ΠΎΠΊΠ½Π°. Π’ страницах справочного руководства Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ всС эти Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ TDrawable, Π½Π΅ TWindow, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΊΠ°ΠΊ ΠΎΠΊΠ½Π° Ρ‚Π°ΠΊ ΠΈ ΠΏΠΈΠΊΡΠ΅Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠ°Ρ€Ρ‚Ρ‹ - рисуСмыС элСмСнты, ΠΈ ΠΎΠ½ΠΈ ΠΎΠ±Π° ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ Π² Π½ΠΈΡ… Ρ‚Π°ΠΊΠΈΠΌΠΈ функциями, ΠΊΠ°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, XDrawArc(), XDrawText(), ΠΈ Ρ‚.ΠΏ.

Один ΠΈΠ· способов Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π±ΠΈΡ‚ΠΎΠ²ΠΎΠ³ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ· Ρ„Π°ΠΉΠ»Π° Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ - Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²ΠΎΠ³ΠΎ изобраТСния Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΎΠΉ #include прСпроцСссора языка Π‘.

ПокаТСм, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Ρ„Π°ΠΉΠ»Ρƒ нСпосрСдствСнно:

var

 (* эта пСрСмСнная Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ дСскриптор Π½ΠΎΠ²ΠΎΠΉ пиксСльной ΠΊΠ°Ρ€Ρ‚Ρ‹ *)

 bitmap: TPixmap;

 (* эти ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌΠΎΠΉ Π±ΠΈΡ‚ΠΎΠ²ΠΎΠΉ ΠΊΠ°Ρ€Ρ‚Ρ‹ *)

 bitmap_width, bitmap_height: word;

 (* эти ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ горячСй Ρ‚ΠΎΡ‡ΠΊΠΈ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌΠΎΠΉ Π±ΠΈΡ‚ΠΎΠ²ΠΎΠΉ ΠΊΠ°Ρ€Ρ‚Ρ‹ *)

 hotspot_x, hotspot_y: integer;

 (* эта пСрСмСнная Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ дСскриптор ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° экрана, Π΄Π»Ρ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΠΈΠΊΡΠ΅Π»ΡŒΠ½ΡƒΡŽ ΠΊΠ°Ρ€Ρ‚Ρƒ *)

 root_win: TWindow;

 rc: longint;


 root_win:= XDefaultRootWindow(display);


(* Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ Π±ΠΈΡ‚ΠΎΠ²ΡƒΡŽ ΠΊΠ°Ρ€Ρ‚Ρƒ ΠΈΠ· Ρ„Π°ΠΉΠ»Π° "icon.bmp", создаСм ΠΏΠΈΠΊΡΠ΅Π»ΡŒΠ½ΡƒΡŽ ΠΊΠ°Ρ€Ρ‚Ρƒ, ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΡƒΡŽ свои Π΄Π°Π½Π½Ρ‹Π΅ Π² сСрвСрС, ΠΈ сохраняСм Π΅Π΅ дСскриптор Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ bitmap *)

 rc:= XReadBitmapFile(display, root_win, 'icon.bmp', @bitmap_width, @bitmap_height, @bitmap, @hotspot_x, @hotspot_y);

 (* провСряСм, ΡƒΠ΄Π°Π»ΠΎΡΡŒ Π»ΠΈ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΠΈΠΊΡΠ΅Π»ΡŒΠ½ΡƒΡŽ ΠΊΠ°Ρ€Ρ‚Ρƒ *)

 case (rc) of

 BitmapOpenFailed:

  writeln('XReadBitmapFile - Π½Π΅ ΠΌΠΎΠ³Ρƒ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ» "icon.bmp"');

 BitmapFileInvalid:

  writeln('XReadBitmapFile - Ρ„Π°ΠΉΠ» "icon.bmp" Π½Π΅ содСрТит ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ Π±ΠΈΡ‚ΠΎΠ²ΠΎΠ³ΠΎ изобраТСния.');

 BitmapNoMemory:

  writeln('XReadBitmapFile - Π½Π΅ Ρ…Π²Π°Ρ‚Π°Π΅Ρ‚ памяти.');

 BitmapSuccess:

  (* битовая ΠΊΠ°Ρ€Ρ‚Π° ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π° - Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅ΠΌ с нСй… *)

  .

  .

end;

Π˜ΠΌΠ΅ΠΉΡ‚Π΅ Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ root_win Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ ΠΎΠ±Ρ‰Π΅Π³ΠΎ с Π΄Π°Π½Π½Ρ‹ΠΌ Π±ΠΈΡ‚ΠΎΠ²Ρ‹ΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ - битовая ΠΊΠ°Ρ€Ρ‚Π° Π½Π΅ связываСтся с этим ΠΎΠΊΠ½ΠΎΠΌ. Π­Ρ‚ΠΎΡ‚ дСскриптор ΠΎΠΊΠ½Π° использован Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для опрСдСлСния экрана, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΠΈΠΊΡΠ΅Π»ΡŒΠ½ΡƒΡŽ ΠΊΠ°Ρ€Ρ‚Ρƒ. Π­Ρ‚ΠΎ сущСствСнно, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ, пиксСльная ΠΊΠ°Ρ€Ρ‚Π° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎ ΠΆΠ΅ количСство Ρ†Π²Π΅Ρ‚ΠΎΠ², Ρ‡Ρ‚ΠΎ ΠΈ экран.

Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ дСскриптор пиксСльной ΠΊΠ°Ρ€Ρ‚Ρ‹, сгСнСрированный ΠΈΠ· Π±ΠΈΡ‚ΠΎΠ²ΠΎΠ³ΠΎ изобраТСния, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ Π΅Π΅ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠΊΠ½Π΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ XCopyPlane(). Π­Ρ‚Π° функция позволяСт ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, Π² ΠΊΠ°ΠΊΠΎΠΉ рисуСмой области (ΠΎΠΊΠ½Π΅, ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠΉ пиксСльной ΠΊΠ°Ρ€Ρ‚Π΅) ΠΈ Π² ΠΊΠ°ΠΊΠΎΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½Π° данная пиксСльная ΠΊΠ°Ρ€Ρ‚Π°.

(* Π ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π½Π΅Π΅ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½ΡƒΡŽ Π±ΠΈΡ‚ΠΎΠ²ΡƒΡŽ ΠΊΠ°Ρ€Ρ‚Ρƒ Π² Π·Π°Π΄Π°Π½Π½ΠΎΠΌ ΠΎΠΊΠ½Π΅, Π² ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ x=100, y=50. ΠœΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всю Π±ΠΈΡ‚ΠΎΠ²ΡƒΡŽ ΠΊΠ°Ρ€Ρ‚Ρƒ, ΠΏΠΎΡΡ‚ΠΎΠΌΡƒ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ x=0, y=0 для копирования с Π½Π°Ρ‡Π°Π»Π° Π±ΠΈΡ‚ΠΎΠ²ΠΎΠ³ΠΎ изобраТСния ΠΈ Π΅Π³ΠΎ ΠΏΠΎΠ»Π½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ *)

XCopyPlane(display, bitmap, win, gc, 0, 0, bitmap_width, bitmap_height, 100, 50, 1);

ΠœΡ‹ ΠΌΠΎΠ³Π»ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ пиксСльной ΠΊΠ°Ρ€Ρ‚Ρ‹ вмСсто ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ Π΅Π΅ копирования. ПослСдний ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ XCopyPlane() опрСдСляСт, ΠΊΠ°ΠΊΠΎΠΉ слой (Ρ†Π²Π΅Ρ‚ΠΎΠ²ΡƒΡŽ ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΡŒ) исходного изобраТСния ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² Ρ†Π΅Π»Π΅Π²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ. Для Π±ΠΈΡ‚ΠΎΠ²Ρ‹Ρ… ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ всСгда копируСтся ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΡŒ Π½ΠΎΠΌΠ΅Ρ€ 1.

Часто Π±Ρ‹Π²Π°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ ΠΏΠΈΠΊΡΠ΅Π»ΡŒΠ½ΡƒΡŽ ΠΊΠ°Ρ€Ρ‚Ρƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π² дальнСйшСм Π² Π½Π΅ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ. Π­Ρ‚ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ для графичСских Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ΠΎΠ² (созданиС Π½ΠΎΠ²ΠΎΠ³ΠΎ пустого "холста" Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ созданиС Π½ΠΎΠ²ΠΎΠΉ пиксСльной ΠΊΠ°Ρ€Ρ‚Ρ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅). Π­Ρ‚ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΏΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ² ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ - ΠΌΡ‹ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ графичСскиС Π΄Π°Π½Π½Ρ‹Π΅ Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ, создаСм Π½Π° сСрвСрС ΠΏΠΈΠΊΡΠ΅Π»ΡŒΠ½ΡƒΡŽ ΠΊΠ°Ρ€Ρ‚Ρƒ, Π° Π·Π°Ρ‚Π΅ΠΌ рисуСм Ρ€Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ графичСскиС Π΄Π°Π½Π½Ρ‹Π΅ Π½Π° этой пиксСльной ΠΊΠ°Ρ€Ρ‚Π΅.

var

 (* эта пСрСмСнная Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ дСскриптор Π½ΠΎΠ²ΠΎΠΉ пиксСльной ΠΊΠ°Ρ€Ρ‚Ρ‹ *)

 pixmap: TPixmap;

 (* эта пСрСмСнная Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ дСскриптор ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° экрана,  для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΠΈΠΊΡΠ΅Π»ΡŒΠ½ΡƒΡŽ ΠΊΠ°Ρ€Ρ‚Ρƒ *)

 root_win: TWindow;

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

 depth: longint;


 root_win:= XDefaultRootWindow(display);

 depth:= XDefaultDepth(display, XDefaultScreen(display));


 (* создаСм Π½ΠΎΠ²ΡƒΡŽ ΠΏΠΈΠΊΡΠ΅Π»ΡŒΠ½ΡƒΡŽ ΠΊΠ°Ρ€Ρ‚Ρƒ ΡˆΠΈΡ€ΠΈΠ½ΠΎΠΉ 30 ΠΈ высотой Π² 40 пиксСлСй *)

 pixmap:= XCreatePixmap(display, root_win, 30, 40, depth);


 (* для ΠΏΠΎΠ»Π½ΠΎΡ‚Ρ‹ ΠΎΡ‰ΡƒΡ‰Π΅Π½ΠΈΠΉ нарисуСм Ρ‚ΠΎΡ‡ΠΊΡƒ Π² Ρ†Π΅Π½Ρ‚Ρ€Π΅ пиксСльной ΠΊΠ°Ρ€Ρ‚Ρ‹ *)

 XDrawPoint(display, pixmap, gc, 15, 20);

ПослС получСния дСскриптора пиксСльной ΠΊΠ°Ρ€Ρ‚Ρ‹ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ Π΅Π΅ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠΊΠ½Π΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ XCopyArea(). Π­Ρ‚Π° функция позволяСт ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ устройство рисования (ΠΎΠΊΠ½ΠΎ ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ Π΄Ρ€ΡƒΠ³ΡƒΡŽ ΠΏΠΈΠΊΡΠ΅Π»ΡŒΠ½ΡƒΡŽ ΠΊΠ°Ρ€Ρ‚Ρƒ) ΠΈ Π² ΠΊΠ°ΠΊΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ этого устройства пиксСльная ΠΊΠ°Ρ€Ρ‚Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½Π°.

(* Π ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π½Π΅Π΅ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½ΡƒΡŽ Π±ΠΈΡ‚ΠΎΠ²ΡƒΡŽ ΠΊΠ°Ρ€Ρ‚Ρƒ Π² Π·Π°Π΄Π°Π½Π½ΠΎΠΌ ΠΎΠΊΠ½Π΅, Π² ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ x=100, y=50. ΠœΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всю Π±ΠΈΡ‚ΠΎΠ²ΡƒΡŽ ΠΊΠ°Ρ€Ρ‚Ρƒ, ΠΏΠΎΡΡ‚ΠΎΠΌΡƒ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ x=0, y=0 для копирования с Π½Π°Ρ‡Π°Π»Π° Π±ΠΈΡ‚ΠΎΠ²ΠΎΠ³ΠΎ изобраТСния ΠΈ Π΅Π³ΠΎ ΠΏΠΎΠ»Π½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ *)

XCopyArea(display, bitmap, win, gc, 0, 0, bitmap_width, bitmap_height, 100, 50);

ΠœΡ‹ ΠΌΠΎΠ³Π»ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ пиксСльной ΠΊΠ°Ρ€Ρ‚Ρ‹ вмСсто ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ Π΅Π΅ копирования.

ΠžΡ‚ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΈ Ρ‚ΠΎΠΌ ΠΆΠ΅ экранС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΠΈΠΊΡΠ΅Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠ°Ρ€Ρ‚Ρ‹ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π³Π»ΡƒΠ±ΠΈΠ½. Когда ΠΌΡ‹ выполняСм ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ копирования (пиксСльной ΠΊΠ°Ρ€Ρ‚Ρ‹ Π² ΠΎΠΊΠ½ΠΎ ΠΈ Ρ‚.ΠΏ.), ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ источник ΠΈ ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄Π½Ρƒ ΠΈ Ρ‚Ρƒ ΠΆΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Ρƒ. Если ΠΈΡ… Π³Π»ΡƒΠ±ΠΈΠ½Π° различаСтся, опСрация Π½Π΅ удастся. ЕдинствСнноС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ - ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ Π±ΠΈΡ‚ΠΎΠ²ΠΎΠΉ плоскости пиксСльной ΠΊΠ°Ρ€Ρ‚Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠΎΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ Ρ€Π°Π½Π΅Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ XCopyPlane(). Π’ этом случаС ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Π½ΡƒΡŽ ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΡŒ Π² ΠΎΠΊΠ½ΠΎ-ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊ - Π² Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ устанавливаСтся ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Π±ΠΈΡ‚ Π² Ρ†Π²Π΅Ρ‚Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ пиксСля. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использовано для создания Π·Π°Π±Π°Π²Π½Ρ‹Ρ… графичСских эффСктов.

НаконСц, ΠΊΠΎΠ³Π΄Π° всС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π°Π΄ Π΄Π°Π½Π½ΠΎΠΉ пиксСльной ΠΊΠ°Ρ€Ρ‚ΠΎΠΉ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹, Π΅Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ рСсурсы Π₯ сСрвСра. Π­Ρ‚ΠΎ дСлаСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ XFreePixmap():

(* освобоТдСниС пиксСльной ΠΊΠ°Ρ€Ρ‚Ρ‹ с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ дСскриптором *)

XFreePixmap(display, pixmap);

1.2.6 ИзмСнСниС Ρ„ΠΎΡ€ΠΌΡ‹ ΠΌΡ‹ΡˆΠΈΠ½ΠΎΠ³ΠΎ курсора

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ часто ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‚ Ρ„ΠΎΡ€ΠΌΡƒ указатСля ΠΌΡ‹ΡˆΠΈ (Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ X) Π² зависимости ΠΎΡ‚ своСго состояния. НапримСр, занятоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ часто ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ Π½Π°Π΄ своим основным ΠΎΠΊΠ½ΠΎΠΌ пСсочныС часы, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π½Π°ΠΌΠ΅ΠΊ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ. Π‘Π΅Π· Ρ‚Π°ΠΊΠΎΠ³ΠΎ Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π½Π°ΠΌΠ΅ΠΊΠ° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠ³ Π±Ρ‹ ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ зависло.

Π•ΡΡ‚ΡŒ Π΄Π²Π° основных ΠΌΠ΅Ρ‚ΠΎΠ΄Π° создания курсоров. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΈΠ· Π½ΠΈΡ… - использованиС Π½Π°Π±ΠΎΡ€Π° ΠΏΡ€Π΅Π΄ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… курсоров, поставляСмых с Xlib. Π’Ρ‚ΠΎΡ€ΠΎΠΉ - использованиС Π±ΠΈΡ‚ΠΎΠ²Ρ‹Ρ… ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ.

Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΡˆΡ€ΠΈΡ„Ρ‚ "cursor" ΠΈ функция XCreateFontCursor(). Π­Ρ‚Π° функция ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Ρ„ΠΎΡ€ΠΌΡ‹, ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ дСскриптор Π½Π° созданный курсор. Бписок Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠ²Ρ‹Ρ… ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² находится Π² Ρ„Π°ΠΉΠ»Π΅ /usr/include/X11/cursorfont.h. ВсСго ΠΈΡ… Π±ΠΎΠ»Π΅Π΅ 70; Π²ΠΎΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Ρ‚Π°ΠΊΠΈΡ… курсоров:

β€’ XC_arrow - ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ курсор Π² Ρ„ΠΎΡ€ΠΌΠ΅ стрСлки, ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΡ‹ΠΉ сСрвСром.