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

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

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

β€’ SouthGravity - ΠΎΡΡ‚Π°ΡŽΡ‰Π°ΡΡΡ Ρ‡Π°ΡΡ‚ΡŒ смСщаСтся ΠΊ Π½ΠΈΠΆΠ½Π΅ΠΌΡƒ ΠΊΡ€Π°ΡŽ ΠΎΠΊΠ½Π°;

β€’ SouthEastGravity - ΠΎΡΡ‚Π°ΡŽΡ‰Π°ΡΡΡ Ρ‡Π°ΡΡ‚ΡŒ смСщаСтся ΠΊ ΠΏΡ€Π°Π²ΠΎΠΌΡƒ Π½ΠΈΠΆΠ½Π΅ΠΌΡƒ ΡƒΠ³Π»Ρƒ.

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ win_gravity Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ с ΠΏΠΎΠ΄ΠΎΠΊΠ½Π°ΠΌΠΈ ΠΎΠΊΠ½Π° послС измСнСния Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² послСднСго. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ значСния ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ (ΠΏΡ€ΠΈ пСрСчислСнии ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ обозначСния: H - ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² ΠΎΠΊΠ½Π° ΠΏΠΎ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΠΈ, V - ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² ΠΏΠΎ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΠΈ, (H, V) - смСщСниС ΠΏΠΎΠ΄ΠΎΠΊΠ½Π° Π½Π° H пиксСлСй ΠΏΠΎ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΠΈ ΠΈ Π½Π° V пиксСлСй ΠΏΠΎ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΠΈ):

β€’ UnmapGravity - ΠΏΠΎΠ΄ΠΎΠΊΠ½Π° ΡƒΠ΄Π°Π»ΡΡŽΡ‚ΡΡ с экрана; ΠΎΠΊΠ½Ρƒ посылаСтся событиС UnmapNotify, Π² ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΎΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ свои ΠΏΠΎΠ΄ΠΎΠΊΠ½Π° ΠΈ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΈΡ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ XMapSubWindow();

β€’ StaticGravity - ΠΏΠΎΠ΄ΠΎΠΊΠ½Π° ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ Π½Π° мСстС ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ Π³Π»Π°Π²Π½ΠΎΠΌΡƒ (ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΌΡƒ) ΠΎΠΊΠ½Ρƒ сСрвСра;

β€’ NorthWestGravity - устанавливаСтся ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ; соотвСтствуСт ΡΠΌΠ΅Ρ‰Π΅Π½ΠΈΡŽ (0, 0);

β€’ NorthGravity - смСщСниС (H/2, 0);

β€’ NorthEastGravity - смСщСниС (H, 0);

β€’ WestGravity - смСщСниС (0, V/2);

β€’ CenterGravity - смСщСниС (H/2, V/2);

β€’ EastGravity - смСщСниС (H, V/2);

β€’ SouthWestGravity - смСщСниС (0, V);

β€’ SouthGravity - смСщСниС (H/2, V);

β€’ SouthEastGravity - смСщСниС (H, V).

АвтоматичСскоС сохранСниС содСрТимого ΠΎΠΊΠ½Π°, ΠΊΠΎΠ³Π΄Π° Π΅Π³ΠΎ Ρ‡Π°ΡΡ‚ΡŒ пСрСкрываСтся Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΎΠΊΠ½Π°ΠΌΠΈ, ΠΈΠ»ΠΈ, ΠΊΠΎΠ³Π΄Π° ΠΎΠΊΠ½ΠΎ удаляСтся с экрана, опрСдСляСтся ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ backing_store, backing_planes ΠΈ backing_pixel. Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для восстановлСния ΠΎΠΊΠ½Π°, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ быстрСС, Ρ‡Π΅ΠΌ Π΅Π³ΠΎ пСрСрисовка ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ Π² ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° событиС Expose. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ backing_store ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ значСния:

β€’ NotUseful (устанавливаСтся ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ) - сСрвСру Π½Π΅ рСкомСндуСтся ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ содСрТимоС ΠΎΠΊΠ½Π°;

β€’ WhenMapped - сСрвСру рСкомСндуСтся спасти содСрТимоС Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΡ‹Ρ… частСй ΠΎΠΊΠ½Π°, ΠΊΠΎΠ³Π΄Π° ΠΎΠΊΠ½ΠΎ показываСтся Π½Π° экранС;

β€’ Always - сСрвСру рСкомСндуСтся ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ содСрТимоС ΠΎΠΊΠ½Π° Π΄Π°ΠΆΠ΅, Ссли ΠΎΠ½ΠΎ Π½Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° экранС.

Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, довольно большого расхода памяти. Атрибуты backing_planes ΠΈ backing_pixel ΠΏΡ€ΠΈΠ·Π²Π°Π½Ρ‹ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ этот расход. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΈΠ· ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ сСрвСру, ΠΊΠ°ΠΊΠΈΠ΅ плоскости изобраТСния Π½Π°Π΄ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ; backing_pixel ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, ΠΊΠ°ΠΊΠΎΠΉ Ρ†Π²Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ восстановлСнии изобраТСния Π² Ρ‚Π΅Ρ… плоскостях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΡΠΎΡ…Ρ€Π°Π½ΡΠ»ΠΈΡΡŒ. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ backing_planes - маска, состоящая ΠΈΠ· Π΅Π΄ΠΈΠ½ΠΈΡ†, Π° backing_pixel Ρ€Π°Π²Π½ΠΎ 0.

Иногда ΠΏΡ€ΠΈ ΠΏΠΎΠΊΠ°Π·Π΅ ΠΎΠΊΠ½Π° ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ содСрТимоС экрана ΠΏΠΎΠ΄ ΠΎΠΊΠ½ΠΎΠΌ. Если ΠΎΠΊΠ½ΠΎ Π½Π΅Π²Π΅Π»ΠΈΠΊΠΎ, ΠΈ показываСтся Π½Π΅Π½Π°Π΄ΠΎΠ»Π³ΠΎ, Ρ‚ΠΎ это позволяСт ΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ‚ΡŒ врСмя, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½Π°Π΄ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π½Π° пСрСрисовку экрана послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠΊΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΎ. Если Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ save_under Ρ€Π°Π²Π΅Π½ True, Ρ‚ΠΎ сСрвСр Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄ ΠΎΠΊΠ½ΠΎΠΌ. Если ΠΆΠ΅ ΠΎΠ½ Ρ€Π°Π²Π΅Π½ False (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ), Ρ‚ΠΎ сСрвСр Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ ΠΏΡ€Π΅Π΄ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚.

Когда ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ (ΠΈΠ»ΠΈ Π½Π΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚) событиС, послСднСС ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ΠΎ Π΅Π³ΠΎ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΌΡƒ ΠΎΠΊΠ½Ρƒ. Атрибут do_not_propagate_mask (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ 0) Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΈ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊΠΈΠ΅ события Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π΄ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π΄ΠΎ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ.

ИзмСнСниС Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² ΠΎΠΊΠ½Π° ΠΈ Π΅Π³ΠΎ полоТСния Π½Π° экранС контролируСтся Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠΌ override_redirect. Если ΠΎΠ½ Ρ€Π°Π²Π΅Π½ False, Ρ‚ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΎΠΊΠ½Π° ΠΈ Π΅Π³ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π° ΠΎΠΊΠΎΠ½. Если ΠΆΠ΅ ΠΎΠ½ Ρ€Π°Π²Π΅Π½ True, Ρ‚ΠΎ ΠΎΠΊΠ½ΠΎ само Ρ€Π΅ΡˆΠ°Π΅Ρ‚, Π³Π΄Π΅ Π΅ΠΌΡƒ Π±Ρ‹Ρ‚ΡŒ, ΠΈ ΠΊΠ°ΠΊΡƒΡŽ ΡˆΠΈΡ€ΠΈΠ½Ρƒ ΠΈ высоту ΠΈΠΌΠ΅Ρ‚ΡŒ.

Π¦Π²Π΅Ρ‚ΠΎΠ²ΡƒΡŽ Π³Π°ΠΌΠΌΡƒ ΠΎΠΊΠ½Π° Π·Π°Π΄Π°Π΅Ρ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ colormap. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ - CopyFromParent, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΎΠΊΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΏΠ°Π»ΠΈΡ‚Ρ€Ρƒ своСго нСпосрСдствСнного родитСля.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ рассмотрим "нСизмСняСмыС" ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΎΠΊΠ½Π°. Π‘Ρ‚Ρ€ΠΎΠ³ΠΎ говоря, Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠΎΠΉΠ΄Π΅Ρ‚ Ρ€Π΅Ρ‡ΡŒ, нСльзя Π½Π°Π·Π²Π°Ρ‚ΡŒ нСизмСняСмыми. НСкоторыС ΠΈΠ· Π½ΠΈΡ… ΠΌΠΎΠ³ΡƒΡ‚ ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ сСрвСром ΠΈΠ»ΠΈ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ΠΎΠΌ ΠΎΠΊΠΎΠ½. Но для ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ-ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² ΠΎΠ½ΠΈ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‚Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ.

ПолоТСниС ΠΎΠΊΠ½Π° ΠΈ Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΡΠΎΠΎΠ±Ρ‰Π°ΡŽΡ‚ поля x, y, width ΠΈ height. Они Π΄Π°ΡŽΡ‚ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π»Π΅Π²ΠΎΠ³ΠΎ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ ΡƒΠ³Π»Π°, ΡˆΠΈΡ€ΠΈΠ½Ρƒ ΠΈ высоту ΠΎΠΊΠ½Π° соотвСтствСнно. ΠšΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ ΠΈΠ·ΠΌΠ΅Ρ€ΡΡŽΡ‚ΡΡ Π² пиксСлях ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΌΡƒ ΠΎΠΊΠ½Ρƒ.

Π¨ΠΈΡ€ΠΈΠ½Π° края ΠΎΠΊΠ½Π° опрСдСляСтся ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ border_width.

Маска, говорящая ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊΠΈΠ΅ события Π²Ρ‹Π±Ρ€Π°Π½Ρ‹ для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΎΠΊΠ½Ρƒ ΠΏΠΎΡ€ΠΎΠ΄ΠΈΠ²ΡˆΠΈΠΌ Π΅Π³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ, содСрТится Π² ΠΏΠΎΠ»Π΅ Ρ„Π»Π°Π³ΠΎΠ² your_event_mask. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° образуСтся ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠ΅ΠΉ Ρ„Π»Π°Π³ΠΎΠ², ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… события.

Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΎ дисплСС, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ ΠΎΠΊΠ½ΠΎ, содСрТится Π² структурС Visual, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠΎΠ»Π΅ visual. Π­Ρ‚ΠΈ Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π½Π΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ-ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ (Π·Π°ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ для получСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ дисплСС, Π² систСмС прСдусмотрСна ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° XGetVisualInfo()).

Класс ΠΎΠΊΠ½Π° сообщаСт ΠΏΠΎΠ»Π΅ class. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ значСния: InputOutput ΠΈ InputOnly.

Число Ρ†Π²Π΅Ρ‚ΠΎΠ²Ρ‹Ρ… плоскостСй дисплСя (число Π±ΠΈΡ‚-Π½Π°-пиксСл) помСщаСтся Π² ΠΏΠΎΠ»Π΅ depth.

На ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± экранС, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ помСщаСтся ΠΎΠΊΠ½ΠΎ, ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠΎΠ»Π΅ screen. Она, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ.

Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ (ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠ³ΠΎ) ΠΎΠΊΠ½Π° экрана, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ помСщаСтся ΠΎΠΊΠ½ΠΎ, находится Π² ΠΏΠΎΠ»Π΅ root.

Если ΠΎΠΊΠ½ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΠ°Π»ΠΈΡ‚Ρ€Ρƒ, ΠΈ ΠΎΠ½Π° Π² настоящСС врСмя Π°ΠΊΡ‚ΠΈΠ²Π½Π°, Ρ‚ΠΎ ΠΏΠΎΠ»Π΅ map_installed Ρ€Π°Π²Π½ΠΎ True, Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС - False.

Π’ΠΈΠ΄Π½ΠΎ Π² настоящСС врСмя ΠΎΠΊΠ½ΠΎ Π½Π° экранС ΠΈΠ»ΠΈ Π½Π΅Ρ‚, сообщаСт Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ map_state.

Маска всСх событий, Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹Ρ… всСми ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ для Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°, содСрТится Π² Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π΅ all_event_mask. Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠΊΠ½ΠΎ обрабатываСтся Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°ΡŽΡ‰ΠΈΠΌ Π΅Π³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ, Π½ΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ прилоТСниями, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ΠΎΠΌ ΠΎΠΊΠΎΠ½.

ΠœΡ‹ рассказали ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ ΠΎΠΊΠ½Π°, ΠΈ Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚. Π’Π΅ΠΏΠ΅Ρ€ΡŒ рассмотрим, ΠΊΠ°ΠΊ ΠΈΡ… ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ. Для этого ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ нСсколько ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ X Window, основной ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… являСтся XChangeWindowAttributes(), ΠΈΠΌΠ΅ΡŽΡ‰Π°Ρ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ:

function XChangeWindowAttributes(prDisplay: PDisplay; nWnd: TWindow; nValueMask: cardinal; prWinAttr: PXSetWindowAttributes): longint; cdecl; external;

Π’Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹Π΅ установки Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ Ρ‡Π΅Ρ€Π΅Π· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ prWinAttr. Он ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ‚ΠΈΠΏΠ° TXSetWindowAttributes. Π•Π΅ поля Ρ‚Π΅ ΠΆΠ΅, Ρ‡Ρ‚ΠΎ ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ поля TXWindowAttributes. Π Π°Π·Π½ΠΈΡ†Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ лишь Π² Ρ€Π°Π·Π½Ρ‹Ρ… ΠΈΠΌΠ΅Π½Π°Ρ… Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΠ· Π½ΠΈΡ…. Π’Π°ΠΊ, ΠΏΠΎΠ»Π΅ your_event_mask Π² TXWindowAttributes соотвСтствуСт полю event_mask Π² TXSetWindowAttributes.

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° TXSetWindowAttributes содСрТит Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΏΠΎΠ»Π΅ cursor. Оно опрСдСляСт Π²ΠΈΠ΄ курсора ΠΌΡ‹ΡˆΠΈ, ΠΊΠΎΠ³Π΄Π° послСдний находится Π² ΠΎΠΊΠ½Π΅. Если ΠΏΠΎΠ»Π΅ Ρ€Π°Π²Π½ΠΎ None (Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ), Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ курсор Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°, Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Ρ‚ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠ³ΠΎ курсора.

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ nValueMask ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ прСдставляСт ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΡŽ Ρ„Π»Π°Π³ΠΎΠ², говорящих ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΈΠ· ΠΏΠΎΠ»Π΅ΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ prWinAttr ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π²ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅.

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠ΄Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ border_pixmap ΠΈ win_gravity Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°:

…

var

 prDisplay: PDisplay;

 prWnd: TWindow;

 rWndAttr: TXSetWindowAttributes;

 nValMask: cardinal;

const

 nPixmap: TPixmap = 0;

…

 nValMask:= CWBorderPixmap or CWWinGravity;

 rWndAttr.border_pixmap:= nPixmap;

 rWndAttr.win_gravity:= StaticGravity;

…

 XChangeWindowAttributes (prDisplay, prWnd, nValMask, @rWndAttr);

…

ΠžΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ ΠΎΠΊΠ½Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ просто с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€. Π’Π°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, функция XSetWindowBackground() мСняСт Ρ„ΠΎΠ½ ΠΎΠΊΠ½Π°, XSetWindowBorder() - Π΅Π³ΠΎ ΠΊΡ€Π°ΠΉ.

1.1.9 ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π°Π΄ ΠΎΠΊΠ½Π°ΠΌΠΈ

ΠœΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΊΠ½Π°ΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ²: Xlib прСдоставляСт Π½Π°Π±ΠΎΡ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ для измСнСния ΠΈΡ… Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ², пСрСмСщСния Π½Π° экранС ΠΈ Π² стСкС ΠΎΠΊΠΎΠ½, сворачивания ΠΈ Ρ‚.ΠΏ.

ΠŸΠ΅Ρ€Π²Π°Ρ ΠΏΠ°Ρ€Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊ ΠΎΠΊΠ½Ρƒ - ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ скрытиС. ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠΊΠ½Π° Π·Π°ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΎΠΊΠ½ΠΎ ΠΏΠΎΡΠ²ΠΈΡ‚ΡŒΡΡ Π½Π° экранС, скрытиС ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΡŽ с экрана (хотя логичСскоС ΠΎΠΊΠ½ΠΎ Π² памяти всС Π΅Ρ‰Π΅ сущСствуСт). НапримСр, Ссли Π² вашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π΅ΡΡ‚ΡŒ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ, вмСсто создания Π΅Π³ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΠΏΠΎ запросу ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠΊΠ½ΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· Π² скрытом Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΈ, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ запросит ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Π΄ΠΈΠ°Π»ΠΎΠ³, просто ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ ΠΎΠΊΠ½ΠΎ Π½Π° экранС. Когда ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π°ΠΆΠΈΠΌΠ°Π΅Ρ‚ "OK" ΠΈΠ»ΠΈ "Cancel", ΠΎΠΊΠ½ΠΎ скрываСтся. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ быстрСС создания ΠΈ уничтоТСния ΠΎΠΊΠ½Π°, ΠΎΠ΄Π½Π°ΠΊΠΎ стоит рСсурсов, ΠΊΠ°ΠΊ Π½Π° сторонС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, Ρ‚Π°ΠΊ ΠΈ Π½Π° сторонС X сСрвСра.

ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠΊΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ XMapWindow(), скрытиС - с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ XUnmapWindow(). Ѐункция отобраТСния заставит событиС Expose ΠΏΠΎΡΠ»Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, Ссли Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠΊΠ½ΠΎ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π½Π΅ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΎΠΊΠ½Π°ΠΌΠΈ.

Π”Ρ€ΡƒΠ³ΠΎΠ΅ дСйствиС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π½Π°Π΄ ΠΎΠΊΠ½Π°ΠΌΠΈ - ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΈΡ… Π² Π΄Ρ€ΡƒΠ³ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ XMoveWindow(), которая ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π½ΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ ΠΎΠΊΠ½Π°. Π˜ΠΌΠ΅ΠΉΡ‚Π΅ Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ послС пСрСмСщСния ΠΎΠΊΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ частично скрытым Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΎΠΊΠ½Π°ΠΌΠΈ (ΠΈΠ»ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎ ΠΈΠΌΠΈ), ΠΈ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ сгСнСрировано сообщСниС Expose.

Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΎΠΊΠ½Π° ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ XResizeWindow(). ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΎΠ΄Π½Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ XMoveResizeWindow().