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

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

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

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

1.1.3 Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΠΊΠ½Π°ΠΌΠΈ

Окна ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ Π½Π° экранС ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, пСрСкрывая Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π°. X ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π°Π±ΠΎΡ€ срСдств, ΠΏΠΎΠ»ΡŒΠ·ΡƒΡΡΡŒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°-ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΎΠΊΠΎΠ½ ΠΈ ΠΈΡ… ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° экранС. ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ систСмы являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ встроСнной возмоТности ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΎΠΊΠ½Π°ΠΌΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ ΠΈΠ»ΠΈ ΠΌΡ‹ΡˆΠΈ. Π§Ρ‚ΠΎΠ±Ρ‹ это ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚ΡŒ, Π½ΡƒΠΆΠ΅Π½ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ называСтся ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ ΠΎΠΊΠΎΠ½ (Window manager). Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹ΠΉ дистрибутив X содСрТит Ρ‚Π°ΠΊΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ - twm. ВозмоТности этого ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Ρ‹, Π½ΠΎ, Ρ‚Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΎΠ½ позволяСт ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ дСйствия: ΠΏΠ΅Ρ€Π΅Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒ ΠΎΠΊΠ½Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΡ‹ΡˆΠΈ, ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΈΡ… Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΈ Ρ‚.Π΄. Π‘ΠΎΠ»Π΅Π΅ Ρ€Π°Π·Π²ΠΈΡ‚Ρ‹ΠΌ ΠΎΠΊΠΎΠ½Π½Ρ‹ΠΌ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ΠΎΠΌ являСтся, ΠΏΠΎ всСй видимости, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° mwm (Motif Window Manager), которая поставляСтся Π² Ρ€Π°ΠΌΠΊΠ°Ρ… систСмы OpenMotif.

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

1.1.4 ГрафичСскиС возмоТности X Window

БистСма X Window ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° для Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π° растровых дисплСях. Π’ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ Ρ€ΠΎΠ΄Π° устройствах ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ прСдставляСтся ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅ΠΉ свСтящихся Ρ‚ΠΎΡ‡Π΅ΠΊ - пиксСлСй. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ пиксСль кодируСтся ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ числом Π±ΠΈΡ‚ (ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ 2, 4, 8, 16 ΠΈΠ»ΠΈ 24). Число Π±ΠΈΡ‚-Π½Π°-пиксСль Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ "Ρ‚ΠΎΠ»Ρ‰ΠΈΠ½ΠΎΠΉ" ΠΈΠ»ΠΈ Π³Π»ΡƒΠ±ΠΈΠ½ΠΎΠΉ дисплСя. Π‘ΠΈΡ‚Ρ‹ с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ Π½ΠΎΠΌΠ΅Ρ€Π°ΠΌΠΈ Π²ΠΎ всСх пиксСлях ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ ΠΊΠ°ΠΊ Π±Ρ‹ ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΡŒ, ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΡƒΡŽ экрану. Π•Π΅ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠΉ ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΡŒΡŽ. X позволяСт Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ Π² любой Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠΉ плоскости (ΠΈΠ»ΠΈ плоскостях), Π½Π΅ затрагивая ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅.

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ пиксСля Π½Π΅ Π·Π°Π΄Π°Π΅Ρ‚ нСпосрСдствСнно Ρ†Π²Π΅Ρ‚ Ρ‚ΠΎΡ‡ΠΊΠΈ Π½Π° экранС. ПослСдний опрСдСляСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ массива Π΄Π°Π½Π½Ρ‹Ρ…, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΏΠ°Π»ΠΈΡ‚Ρ€ΠΎΠΉ. Π¦Π²Π΅Ρ‚ Π΅ΡΡ‚ΡŒ содСрТимоС ячСйки ΠΏΠ°Π»ΠΈΡ‚Ρ€Ρ‹, Π½ΠΎΠΌΠ΅Ρ€ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ€Π°Π²Π΅Π½ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ пиксСля.

X ΠΈΠΌΠ΅Π΅Ρ‚ большой Π½Π°Π±ΠΎΡ€ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΡ… Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ графичСскиС ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Ρ‹ - Ρ‚ΠΎΡ‡ΠΊΠΈ, Π»ΠΈΠ½ΠΈΠΈ, Π΄ΡƒΠ³ΠΈ, Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ тСкст ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с областями ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΡ‹.

1.1.5 Бвойства ΠΈ Π°Ρ‚ΠΎΠΌΡ‹

Π’ X Window встроСны срСдства для обСспСчСния ΠΎΠ±ΠΌΠ΅Π½Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ-ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ. Для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ свойств (properties). Бвойство - это порция Π΄Π°Π½Π½Ρ‹Ρ…, связанная с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎΠΊΠ½ΠΎΠΌ), ΠΈ которая доступна всСм ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ X.

КаТдоС свойство ΠΈΠΌΠ΅Π΅Ρ‚ имя ΠΈ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ - Π°Ρ‚ΠΎΠΌ. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΠΌΠ΅Π½Π° свойств Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ большими Π±ΡƒΠΊΠ²Π°ΠΌΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€: MY_SPECIAL_PROPERTY. Атомы ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для доступа ΠΊ содСрТимому свойств с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ количСство ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, пСрСсылаСмой ΠΏΠΎ сСти ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ ΠΈ X сСрвСром.

Π’ X прСдусмотрСн Π½Π°Π±ΠΎΡ€ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΡ… пСрСвСсти имя свойства Π² ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π°Ρ‚ΠΎΠΌ, ΠΈ, Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, ΠΏΠΎ Π°Ρ‚ΠΎΠΌΡƒ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅.

НСкоторыС свойства ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΈΠΌ Π°Ρ‚ΠΎΠΌΡ‹ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΡ€Π΅Π΄ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ ΠΈ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ сСрвСра. Π­Ρ‚ΠΈΠΌ Π°Ρ‚ΠΎΠΌΠ°ΠΌ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ символичСскиС константы, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π² Ρ„Π°ΠΉΠ»Π°Ρ…-Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Xlib. Π­Ρ‚ΠΈ константы Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ с прСфикса XA_.

1.1.6 ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€

ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΈ ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΈΠ·Π΄Π°Π½ΠΈΠΉ, посвящСнных ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ, Π½Π°Ρ‡Π½Π΅ΠΌ с ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Ρ€ΠΈΡΡƒΡŽΡ‰Π΅ΠΉ Π½Π° экранС строку "Hello, world!". Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ основныС шаги, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π² X Window.

uses x,xlib,x11,xutil,strings;


const

 WND_X=0;

 WND_Y=0;

 WND_WDT=100;

 WND_HGH=100;

 WND_MIN_WDT=50;

 WND_MIN_HGH=50;

 WND_BORDER_WDT=5;

 WND_TITLE='Hello!';

 WND_ICON_TITLE='Hello!';

 PRG_CLASS='Hello!';


(* SetWindowManagerHints - ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΡΠ²ΠΎΠΉΡΡ‚Π²Π°Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Ρƒ ΠΎΠΊΠΎΠ½. *)

procedure SetWindowManagerHints(

 prDisplay: PDisplay; (*Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° структуру TDisplay *)

 psPrgClass: PChar; (*Класс ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ *)

 argv: PPChar; (*АргумСнты ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ *)

 argc: integer; (*Число Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² *)

 nWnd: TWindow; (*Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΎΠΊΠ½Π° *)

  x, (*ΠšΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π»Π΅Π²ΠΎΠ³ΠΎ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ *)

  y, (*ΡƒΠ³Π»Π° ΠΎΠΊΠ½Π° *)

  nWidth,

  nHeight, (*Π¨ΠΈΡ€ΠΈΠ½Π° ΠΈ высота ΠΎΠΊΠ½Π° *)

  nMinWidth,

  nMinHeight:integer; (*ΠœΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ ΡˆΠΈΡ€ΠΈΠ½Π° ΠΈ высота ΠΎΠΊΠ½Π° *)

 psTitle: PChar; (*Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΎΠΊΠ½Π° *)

 psIconTitle: PChar; (*Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΏΠΈΠΊΡ‚ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΎΠΊΠ½Π° *)

 nIconPixmap: TPixmap (*Рисунок ΠΏΠΈΠΊΡ‚ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ *)

);


var

 rSizeHints: TXSizeHints; (*Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°Ρ… ΠΎΠΊΠ½Π°*)

 rWMHints: TXWMHints;

 rClassHint: TXClassHint;

 prWindowName, prIconName: TXTextProperty;

begin


if (XStringListToTextProperty(@psTitle, 1, @prWindowName)=0) or

    (XStringListToTextProperty(@psIconTitle, 1, @prIconName)=0) then

 begin

  writeln('No memory!');

  halt(1);

end;


 rSizeHints.flags:= PPosition OR PSize OR PMinSize;

 rSizeHints.min_width:= nMinWidth;

 rSizeHints.min_height:= nMinHeight;

 rWMHints.flags:= StateHint OR IconPixmapHint OR InputHint;

 rWMHints.initial_state:= NormalState;

 rWMHints.input:= True;

 rWMHints.icon_pixmap:= nIconPixmap;


 rClassHint.res_name:= argv[0];

 rClassHint.res_class:= psPrgClass;


 XSetWMProperties(prDisplay, nWnd, @prWindowName, @prIconName, argv, argc, @rSizeHints, @rWMHints, @rClassHint);

end;


(* main - основная ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ *)

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

var

 prDisplay: PDisplay; (* Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° структуру Display *)

 nScreenNum: integer; (* НомСр экрана *)

 prGC: TGC;

 rEvent: TXEvent;

 nWnd: TWindow;

begin

(* УстанавливаСм связь с сСрвСром *)

 prDisplay:= XOpenDisplay(nil);

if prDisplay = nil then begin

  writeln('Can not connect to the X server!');

  halt (1);

 end;


 (* ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π½ΠΎΠΌΠ΅Ρ€ основного экрана *)

 nScreenNum:= XDefaultScreen(prDisplay);


 (* Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΎΠΊΠ½ΠΎ *)

 nWnd:= XCreateSimpleWindow(prDisplay, XRootWindow (prDisplay, nScreenNum), WND_X, WND_Y, WND_WDT, WND_HGH, WND_BORDER_WDT, XBlackPixel (prDisplay, nScreenNum),

 XWhitePixel (prDisplay, nScreenNum));


 (* Π—Π°Π΄Π°Π΅ΠΌ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ для ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π° ΠΎΠΊΠΎΠ½ *)

 SetWindowManagerHints(prDisplay, PRG_CLASS, argv, argc, nWnd, WND_X, WND_Y, WND_WDT, WND_HGH, WND_MIN_WDT, WND_MIN_HGH, WND_TITLE, WND_ICON_TITLE, 0);


 (* Π’Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ события, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ *)

 XSelectInput(prDisplay, nWnd, ExposureMask OR KeyPressMask);


 (* ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ ΠΎΠΊΠ½ΠΎ *)

 XMapWindow(prDisplay, nWnd);


 (* Π¦ΠΈΠΊΠ» получСния ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ событий *)

while (true) do begin

  XNextEvent(prDisplay, @rEvent);


case (rEvent.eventtype) of

  Expose:

begin

   (* Запрос Π½Π° пСрСрисовку *)

if (rEvent.xexpose.count β€Ήβ€Ί 0) then continue;

    prGC:= XCreateGC (prDisplay, nWnd, 0, nil);


   XSetForeground(prDisplay, prGC, XBlackPixel (prDisplay, 0));

   XDrawString(prDisplay, nWnd, prGC, 10, 50, 'Hello, world!', strlen ('Hello, world!'));

   XFreeGC (prDisplay, prGC);

end;


 KeyPress:

   begin

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

    XCloseDisplay(prDisplay);

    halt(0);

   end;

end;

 end;

end.

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

fpc hello.pas

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