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

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

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

end;


 KeyPress:

   begin

    (* НаТатиС клавиши ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ *)

    XCloseDisplay(prDisplay);

    halt(0);

   end;

end;

 end;

end.

Для сборки ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π°:

fpc hello.pas

Π—Π΄Π΅ΡΡŒ fpc - имя исполняСмого Ρ„Π°ΠΉΠ»Π° компилятора. Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, это символичСская ссылка Π½Π° Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ΅ имя компилятора (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ppc386).

Π’ соврСмСнных вСрсиях UNIX для создания ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ компиляторы ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки, Π½ΠΎ ΠΈ самыС Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·Π½Ρ‹Π΅ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ срСды. Одной ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π½Ρ‹Ρ…, ΠΏΠΎ Π½Π°ΡˆΠ΅ΠΌΡƒ мнСнию, являСтся интСгрированная срСда Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΠ½ΡŽΡ‚Π° (Anjuta). Π•Π΅ ΡΠΎΠ·Π΄Π°Ρ‚Π΅Π»ΡŒ - индийский программист Наба ΠšΡƒΠΌΠ°Ρ€ - позаботился ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΡ‹ чувствовали сСбя Π² Π½Π΅ΠΉ ΠΊΠΎΠΌΡ„ΠΎΡ€Ρ‚Π½ΠΎ.

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Π² ΠΠ½ΡŽΡ‚Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ русского языка, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² Ρ„Π°ΠΉΠ» свойств этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (~/.anjuta/session.properties) строку

character.set=204

Для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ компилятора FreePascal Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² Π΄ΠΈΠ°Π»ΠΎΠ³ "ΠšΠΎΠΌΠ°Π½Π΄Ρ‹" ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ установки:


На рис. 1.3 ΠΏΠΎΠΊΠ°Π·Π°Π½ внСшний Π²ΠΈΠ΄ прилоТСния послС Π΅Π³ΠΎ запуска.

Рис. 1.3. Окно прилоТСния xhello Π² срСдС KDE

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ряд Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, прСдоставляСмых Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ Xlib: XOpenDisplay(), XCreateSimpleWindow() ΠΈ Π΄Ρ€. Π˜Ρ… ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΡ‹, стандартныС структуры Π΄Π°Π½Π½Ρ‹Ρ…, макросы ΠΈ константы описаны Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… основных Ρ„Π°ΠΉΠ»Π°Ρ…-модулях: Xlib, Xutil, X, X11.

ΠŸΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Π½ΠΈΡŽ самой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Она начинаСтся установлСниСм связи с Π₯-сСрвСром. Π”Π΅Π»Π°Π΅Ρ‚ это функция XOpenDisplay(). Π•Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ опрСдСляСт сСрвСр, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π½Π°Π΄ΠΎ ΡΠ²ΡΠ·Π°Ρ‚ΡŒΡΡ. Если Π² качСствС своСго ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° XOpenDisplay () ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ nil, Ρ‚ΠΎ ΠΎΠ½Π° ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ доступ ΠΊ сСрвСру, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ задаСтся ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ срСды (environment) DISPLAY. И Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ этой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚: host:server.screen, Π³Π΄Π΅ host - имя ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ выполняСтся сСрвСр, server - Π½ΠΎΠΌΠ΅Ρ€ сСрвСра (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ это 0), Π° screen - это Π½ΠΎΠΌΠ΅Ρ€ экрана. НапримСр, запись kiev:0.0 Π·Π°Π΄Π°Π΅Ρ‚ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ kiev, Π° Π² качСствС Π½ΠΎΠΌΠ΅Ρ€Π° сСрвСра ΠΈ экрана ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ 0. Π—Π°ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π½ΠΎΠΌΠ΅Ρ€ экрана ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ.

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° XOpenDisplay() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° структуру Ρ‚ΠΈΠΏΠ° TDisplay. Π­Ρ‚ΠΎ большой Π½Π°Π±ΠΎΡ€ Π΄Π°Π½Π½Ρ‹Ρ…, содСрТащий ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ сСрвСрС ΠΈ экранах. Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ слСдуСт Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‚.ΠΊ. ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°Ρ… Xlib.

XOpenDisplay() соСдиняСт ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ с X сСрвСром, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρ‹ TCP ΠΈΠ»ΠΈ DECnet, ΠΈΠ»ΠΈ ΠΆΠ΅ с использованиСм Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ локального ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° мСТпроцСссного взаимодСйствия. Если имя ΠΌΠ°ΡˆΠΈΠ½Ρ‹ ΠΈ Π½ΠΎΠΌΠ΅Ρ€ дисплСя Ρ€Π°Π·Π΄Π΅Π»ΡΡŽΡ‚ΡΡ ΠΎΠ΄Π½ΠΈΠΌ Π·Π½Π°ΠΊΠΎΠΌ двоСточия (:), Ρ‚ΠΎ XOpenDisplay() ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ соСдинСниС с использованиСм ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° TCP. Если ΠΆΠ΅ имя ΠΌΠ°ΡˆΠΈΠ½Ρ‹ ΠΎΡ‚Π΄Π΅Π»Π΅Π½ΠΎ ΠΎΡ‚ Π½ΠΎΠΌΠ΅Ρ€Π° дисплСя Π΄Π²ΠΎΠΉΠ½Ρ‹ΠΌ Π΄Π²ΠΎΠ΅Ρ‚ΠΎΡ‡ΠΈΠ΅ΠΌ (::), Ρ‚ΠΎ для соСдинСния ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» DECnet. ΠŸΡ€ΠΈ отсутствии поля ΠΈΠΌΠ΅Π½ΠΈ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ Π² ΠΈΠΌΠ΅Π½ΠΈ дисплСя, Ρ‚ΠΎ для соСдинСния ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ быстрыС ΠΈΠ· доступных ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠ². ΠšΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ X сСрвСр ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ всС, Ρ‚Π°ΠΊ ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· этих ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠ² связи. ΠšΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Xlib ΠΌΠΎΠ³ΡƒΡ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρ‹.

Если соСдинСниС ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½ΠΎ ΡƒΠ΄Π°Ρ‡Π½ΠΎ, XOpenDisplay() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° структуру TDisplay, которая опрСдСляСтся Π² Xlib.pp. Если ΠΆΠ΅ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ соСдинСниС Π½Π΅ ΡƒΠ΄Π°Π»ΠΎΡΡŒ, Ρ‚ΠΎ XOpenDisplay() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ NIL. ПослС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° XOpenDisplay() клиСнтской ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ всС экраны дисплСя. НомСр экрана возвращаСтся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ XDefaultScreen(). Доступ ΠΊ полям структур TDisplay ΠΈ TScreen Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ посрСдством использования ΠΌΠ°ΠΊΡ€ΠΎΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ связь с сСрвСром установлСна, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° "Hello" опрСдСляСт Π½ΠΎΠΌΠ΅Ρ€ экрана. Для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ функция XDefaultScreen(), Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠΉ Π½ΠΎΠΌΠ΅Ρ€ основного экрана. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ nScreenNum ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΡ‚ 0 Π΄ΠΎ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρ‹ (ScreenCount(prDisplay)-1). ΠœΠ°ΠΊΡ€ΠΎΡ XScreenCount() позволяСт ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ число экранов, обслуТиваСмых сСрвСром.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ шаг - созданиС ΠΎΠΊΠ½Π° ΠΈ ΠΏΠΎΠΊΠ°Π· Π΅Π³ΠΎ Π½Π° дисплСС. Для этого ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° обращаСтся ΠΊ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅ XCreateWindow() ΠΈΠ»ΠΈ XCreateSimpleWindow(). Для простоты ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π²Ρ‚ΠΎΡ€ΡƒΡŽ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π·Π°Π΄Π°ΡŽΡ‚ характСристики ΠΎΠΊΠ½Π°.

PrWind:= XCreateSimpleWindow (

 prDisplay, (* ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° структуру TDisplay, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΡƒΡŽ сСрвСр *)

 XRootWindow(prDisplay, nScreenNum), (* Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ΅ ΠΎΠΊΠ½ΠΎ, Π² Π΄Π°Π½Π½ΠΎΠΌ случаС, это основноС ΠΎΠΊΠ½ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ *)

 WND_X, WND_Y, (* Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ x ΠΈ y ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ Π»Π΅Π²ΠΎΠ³ΠΎ ΡƒΠ³Π»Π° ΠΎΠΊΠ½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ *)

 WND_WIDTH, WND_HEIGHT, (* ΡˆΠΈΡ€ΠΈΠ½Π° ΠΎΠΊΠ½Π° ΠΈ высота ΠΎΠΊΠ½Π° *)

 WND_BORDER_WIDTH, (* ΡˆΠΈΡ€ΠΈΠ½Π° края ΠΎΠΊΠ½Π° *)

 XBlackPixel(prDisplay, nScreenNum), (* Ρ†Π²Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π½Π΅Π³ΠΎ ΠΏΠ»Π°Π½Π° ΠΎΠΊΠ½Π° *)

 XWhitePixel(prDisplay, nScreenNum) (* Ρ†Π²Π΅Ρ‚ Ρ„ΠΎΠ½Π° ΠΎΠΊΠ½Π° *)

);

Для задания Ρ†Π²Π΅Ρ‚ΠΎΠ² ΠΎΠΊΠ½Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ XBlackPixel() ΠΈ XWhitePixel(). Они Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ значСния пиксСлСй, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ Π½Π° Π΄Π°Π½Π½ΠΎΠΌ дисплСС ΠΈ экранС ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ "Ρ‡Π΅Ρ€Π½ΠΎΠΌΡƒ" ΠΈ "Π±Π΅Π»ΠΎΠΌΡƒ" Ρ†Π²Π΅Ρ‚Π°ΠΌ. Ѐункция XCreateSimpleWindow() (XCreateWindow()) Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° TWindow. Π­Ρ‚ΠΎ Ρ†Π΅Π»ΠΎΠ΅ число, ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‰Π΅Π΅ созданноС ΠΎΠΊΠ½ΠΎ.

Π‘Ρ€Π΅Π΄ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΡΠΎΠ·Π΄Π°ΡŽΡ‰ΠΈΡ… ΠΎΠΊΠ½Π°, Π΅ΡΡ‚ΡŒ Ρ‚Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠΊΠ½Π° ΠΈ Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹. Π­Ρ‚ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ΡΡ Π²ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ систСмой X Window. Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ составляСт случай, ΠΊΠΎΠ³Π΄Π° Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ для создаваСмого ΠΎΠΊΠ½Π° являСтся "ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠ΅" ΠΎΠΊΠ½ΠΎ экрана. Π’ этом случаС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠΊΠ½Π° ΠΈ Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°Ρ… ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ ΠΎΠΊΠΎΠ½. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠ²Π»ΠΈΡΡ‚ΡŒ Π½Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π° ΠΎΠΊΠΎΠ½, сообщив Π΅ΠΌΡƒ свои "поТСлания" с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ XSetWMProperties().

Из листинга Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Ρƒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹:

β€’ имя (Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ) ΠΎΠΊΠ½Π°;

β€’ имя ΠΏΠΈΠΊΡ‚ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΎΠΊΠ½Π°;

β€’ саму ΠΏΠΈΠΊΡ‚ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ;

β€’ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ argc ΠΈ argv, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Π΅ ΠΎΡ‚ UNIX ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅;

β€’ ΠΆΠ΅Π»Π°Π΅ΠΌΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠΊΠ½Π°, Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹, Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ ΠΎ Π΅Π³ΠΎ Π³Π΅ΠΎΠΌΠ΅Ρ‚Ρ€ΠΈΠΈ.

Имя ΠΎΠΊΠ½Π° ΠΈ имя ΠΏΠΈΠΊΡ‚ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½Ρ‹ Π² "тСкстовыС свойства", описываСмыС структурами Ρ‚ΠΈΠΏΠ° TXTextProperty. Π­Ρ‚ΠΎ выполняСтся ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ΠΎΠΉ XStringListToTextProperty().

Для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ ΠΆΠ΅Π»Π°Π΅ΠΌΠΎΠΉ Π³Π΅ΠΎΠΌΠ΅Ρ‚Ρ€ΠΈΠΈ ΠΎΠΊΠ½Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ структура TXSizeHints.

X Window позволяСт ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Ρƒ Ρ‚Π°ΠΊΠΆΠ΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

β€’ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ состояниС ΠΎΠΊΠ½Π°: Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ ΠΈΠ»ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅;

β€’ воспринимаСт Π»ΠΈ ΠΎΠΊΠ½ΠΎ Π²Π²ΠΎΠ΄ с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹;

β€’ класс ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ Π΅Π΅ имя для чтСния рСсурсов ΠΈΠ· Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… рСсурсов.

ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ "Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ" ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Ρƒ ΠΎΠΊΠΎΠ½ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Ρ‹, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ события, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π΅Π°Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. Для этого вызываСтся функция XSelectInput(). Π•Π΅ послСдний Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π΅ΡΡ‚ΡŒ комбинация Π±ΠΈΡ‚ΠΎΠ²Ρ‹Ρ… масок (Ρ„Π»Π°Π³ΠΎΠ²). Π’ нашСм случаС это (ExposureMask or KeyPressMask). ExposureMask сообщаСт X Window, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ событиС Expose. Оно посылаСтся сСрвСром ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΎΠΊΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ пСрСрисовано. KeyPressMask Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ событиС KeyPress - Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ клавиши ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΠΊΠ½ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ создано, Π½ΠΎ Π½Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° экранС. Π§Ρ‚ΠΎΠ±Ρ‹ это ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ, Π½Π°Π΄ΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ XMapWindow(). Π—Π°ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΈΠ·-Π·Π° Π±ΡƒΡ„Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ событий Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ Xlib, ΠΎΠΊΠ½ΠΎ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ нарисовано, ΠΏΠΎΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π΅ обратится ΠΊ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅ получСния сообщСний ΠΎΡ‚ сСрвСра XNextEvent().

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ для X построСны ΠΏΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ управляСмости событиями. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠΊΠ½ΠΎ создано, Π·Π°Π΄Π°Π½Ρ‹ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ для ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π° ΠΎΠΊΠΎΠ½, основная Π΅Π΅ Ρ€Π°Π±ΠΎΡ‚Π° - это ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ сообщСния ΠΎΡ‚ сСрвСра ΠΈ ΠΎΡ‚ΠΊΠ»ΠΈΠΊΠ°Ρ‚ΡŒΡΡ Π½Π° Π½ΠΈΡ…. ВыполняСтся это Π² бСсконСчном Ρ†ΠΈΠΊΠ»Π΅. ΠžΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠ΅ событиС "вынимаСтся" ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ΠΎΠΉ XNextEvent(). Π‘Π°ΠΌΠΎ ΠΎΠ½ΠΎ Π΅ΡΡ‚ΡŒ пСрСмСнная Ρ‚ΠΈΠΏΠ° XEvent, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдставляСт собой объСдинСниС структур. КаТдоС событиС (Expose, KeyPress ΠΈ Ρ‚.Π΄.) ΠΈΠΌΠ΅Π΅Ρ‚ свои Π΄Π°Π½Π½Ρ‹Π΅ (ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, своС ΠΏΠΎΠ»Π΅ Π² объСдинСнии XEvent).

ΠŸΡ€ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ сообщСния Expose ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° пСрСрисовываСт ΠΎΠΊΠ½ΠΎ. Π­Ρ‚ΠΎ событиС являСтся ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½Ρ‹Ρ… событий, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ. Оно Π±ΡƒΠ΄Π΅Ρ‚ послано Π½Π°ΡˆΠ΅ΠΌΡƒ ΠΎΠΊΠ½Ρƒ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… случаСв:

β€’ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Π»ΠΎ Ρ‡Π°ΡΡ‚ΡŒ нашСго;

β€’ нашС ΠΎΠΊΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π²Ρ‹Π²Π΅Π΄Π΅Π½ΠΎ ΠΏΠΎΠ²Π΅Ρ€Ρ… всСх Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΠΊΠΎΠ½;

β€’ нашС ΠΎΠΊΠ½ΠΎ Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ прорисовываСтся Π½Π° экранС;

β€’ нашС ΠΎΠΊΠ½ΠΎ Π±Ρ‹Π»ΠΎ восстановлСно послС сворачивания.

Когда ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ событиС Expose, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Π·ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ события ΠΈΠ· Ρ‡Π»Π΅Π½Π° xexpose объСдинСния XEvent. Он содСрТит Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ интСрСсныС поля:

β€’ count - количСство Π΄Ρ€ΡƒΠ³ΠΈΡ… событий Expose, ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΠ΅ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ событий сСрвСра. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ, Ссли ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ нСсколько Ρ‚Π°ΠΊΠΈΡ… сообщСний подряд - рСкомСндуСтся ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Ρ€ΠΈΡΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΠΊΠ½ΠΎ, ΠΏΠΎΠΊΠ° ΠΌΡ‹ Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ послСднСС ΠΈΠ· ΠΈΡ… (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΠΎΠΊΠ° count Π½Π΅ Ρ€Π°Π²Π½ΠΎ 0).

β€’ window - ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΎΠΊΠ½Π°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π±Ρ‹Π»ΠΎ послано сообщСниС Expose (Π² случаС, Ссли ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ зарСгистрировало это событиС Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΎΠΊΠ½Π°Ρ…).

β€’ x, y - ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ Π»Π΅Π²ΠΎΠ³ΠΎ ΡƒΠ³Π»Π° области ΠΎΠΊΠ½Π°, которая Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ пСрСрисована.

β€’ width, height - ΡˆΠΈΡ€ΠΈΠ½Π° ΠΈ высота области ΠΎΠΊΠ½Π°, которая Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ пСрСрисована.