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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Delphi. Π’Ρ€ΡŽΠΊΠΈ ΠΈ эффСкты». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 28

Автор Π’Π°Π»Π΅Ρ€ΠΈΠΉ Борисок

Π’ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ трСбуСтся контСкст устройства экрана ΠΏΡ€Π΅ΠΆΠ΄Π΅, Ρ‡Π΅ΠΌ ΠΎΠ½ΠΎ смоТСт ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π²Ρ‹Π²ΠΎΠ΄Π° Π² ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΡΠΊΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ ΠΎΠΊΠ½Π°, Π½ΡƒΠΆΠ΅Π½ контСкст устройства ΠΏΡ€ΠΈΠ½Ρ‚Π΅Ρ€Π° ΠΏΡ€Π΅ΠΆΠ΄Π΅, Ρ‡Π΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π²Ρ‹Π²ΠΎΠ΄Π° Π½Π° ΠΏΡ€ΠΈΠ½Ρ‚Π΅Ρ€. ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚ устройства ΠΏΡ€ΠΈΠ½Ρ‚Π΅Ρ€Π°, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ контСксту устройства экрана, содСрТит ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ графичСских ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Ρ… ΠΈ ΠΈΡ… Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°Ρ…, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΎ графичСских Ρ€Π΅ΠΆΠΈΠΌΠ°Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΎΠ·Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π²Ρ‹Π²ΠΎΠ΄Π°. ГрафичСскиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ ΠΊΠ°Ρ€Π°Π½Π΄Π°Ρˆ (для рисования Π»ΠΈΠ½ΠΈΠΉ), ΠΊΠΈΡΡ‚ΡŒ (для Π·Π°Π»ΠΈΠ²ΠΊΠΈ) ΠΈ ΡˆΡ€ΠΈΡ„Ρ‚ (для Π²Ρ‹Π²ΠΎΠ΄Π° тСкста).

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ контСкста устройства экрана, контСксты устройства ΠΏΡ€ΠΈΠ½Ρ‚Π΅Ρ€Π° Π½Π΅ связаны с ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠΌ управлСния ΠΎΠΊΠ½Π° Win32 API ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Ρ‹ посрСдством Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ GetDC. ВмСсто этого ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ обязано Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΎΠ΄Π½Ρƒ ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ: CreateDC ΠΈΠ»ΠΈ PrintDlgEx.

Если Π²Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ CreateDC, Ρ‚ΠΎ обязаны ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΡ€ΠΈΠ½Ρ‚Π΅Ρ€Π° ΠΈ ΠΏΠΎΡ€Ρ‚. Для получСния этих Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ: GetPrinter ΠΈΠ»ΠΈ EnumPrinters.

ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚ устройства памяти

Π§Ρ‚ΠΎΠ±Ρ‹ Π΄Π°Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ прилоТСниям ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π²Ρ‹Π²ΠΎΠ΄Π° Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ вмСсто Ρ€Π°Π±ΠΎΡ‚Ρ‹ с фактичСским устройством, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ контСкст устройства для растровых ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ называСтся контСкстом устройства памяти. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π²Ρ‹Π²ΠΎΠ΄Π° Π² памяти ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ для ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ характСристик Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ. ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚ устройства памяти Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ систСмС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ‡Π°ΡΡ‚ΡŒ памяти ΠΊΠ°ΠΊ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ устройство. Π­Ρ‚ΠΎ массив Π±ΠΈΡ‚ΠΎΠ² Π² памяти, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для сохранСния Π΄Π°Π½Π½Ρ‹Ρ… растрового изобраТСния, созданного Π½Π° Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ повСрхности для рисования. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ‚ΠΎΡ‡Π΅Ρ‡Π½Ρ‹ΠΉ рисунок совмСстим с устройством, Ρ‚ΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° контСкст устройства памяти упоминаСтся ΠΊΠ°ΠΊ совмСстимый.

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

ΠŸΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² контСкстС устройства памяти ΠΈΠΌΠ΅Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ 1x1 пиксСл. ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ смоТСт Π½Π°Ρ‡Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ, ΠΎΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π±ΠΈΡ‚ΠΎΠ²Ρ‹ΠΉ массив с ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ ΡˆΠΈΡ€ΠΈΠ½ΠΎΠΉ ΠΈ высотой Π² контСкст устройства, вызывая Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ SelectOb j ect.

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

Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ контСкст устройства

Win32 API ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ контСкст устройства, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π·Π°Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ устройства. Для создания ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ контСкста ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ CreatelC. Для получСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎΠ± ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Ρ…, Π·Π°Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‰Π΅Π³ΠΎ устройства, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ GetCurrentOb j ect ΠΈ GetObject. ИспользованиС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ контСкста устройства Π±ΠΎΠ»Π΅Π΅ эффСктивно, Ρ‡Π΅ΠΌ контСкстов Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ², ΠΏΠΎΡ‚ΠΎΠΌΡƒ ΠΊΠ°ΠΊ Win32 API Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΌ контСкстом Π½Π° Π±ΠΎΠ»Π΅Π΅ Π½ΠΈΠ·ΠΊΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΈ Π½Π΅ создаСт структур, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… для ΠΈΡ… Ρ€Π°Π±ΠΎΡ‚Ρ‹. ПослС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ€Π°Π±ΠΎΡ‚Ρ‹ прилоТСния с ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΌ контСкстом устройства Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ DeleteDC для удалСния созданного контСкста.

6.4. ГрафичСскиС Ρ€Π΅ΠΆΠΈΠΌΡ‹

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ систСма Windows ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΏΡΡ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… графичСских Ρ€Π΅ΠΆΠΈΠΌΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ прилоТСниям ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Ρ‚ΠΈΠΏ смСшивания Ρ†Π²Π΅Ρ‚ΠΎΠ², мСсто ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈ Ρ‚. Π΄.:

β€’ настройки Ρ„ΠΎΠ½Π° – опрСдСляСт, ΠΊΠ°ΠΊ происходит смСшиваниС Ρ†Π²Π΅Ρ‚ΠΎΠ² Ρ„ΠΎΠ½Π° тСкстовых ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ растровых ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ с Ρ†Π²Π΅Ρ‚ΠΎΠΌ Ρ„ΠΎΠ½Π° поля Π²Ρ‹Π²ΠΎΠ΄Π°;

β€’ отобраТСния – опрСдСляСт, ΠΊΠ°ΠΊ происходит смСшиваниС Ρ†Π²Π΅Ρ‚Π° ΠΊΠ°Ρ€Π°Π½Π΄Π°ΡˆΠ΅ΠΉ, кистСй, тСкстовых ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ растровых ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ с Ρ†Π²Π΅Ρ‚ΠΎΠΌ Ρ„ΠΎΠ½Π°;

β€’ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ – опрСдСляСт ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ логичСских ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ ΠΏΡ€ΠΈ графичСском Π²Ρ‹Π²ΠΎΠ΄Π΅ Π² ΠΎΠΊΠ½Π°, Π½Π° экран ΠΈΠ»ΠΈ ΠΏΡ€ΠΈΠ½Ρ‚Π΅Ρ€;

β€’ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ‚ΡƒΡ€ΠΎΠ² – опрСдСляСт, ΠΊΠ°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ кисти ΠΏΡ€ΠΈ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΠ½Ρ‚ΡƒΡ€ΠΎΠ²;

β€’ сТатия – опрСдСляСт, ΠΊΠ°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ происходит ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ†Π²Π΅Ρ‚ΠΎΠ² растровых ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΏΡ€ΠΈ ΠΈΡ… ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠΈ (ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΠΈ).

6.5. Π Π°Π±ΠΎΡ‚Π° со ΡˆΡ€ΠΈΡ„Ρ‚Π°ΠΌΠΈ

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π²ΠΈΠ΄Π° Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ ΡˆΡ€ΠΈΡ„Ρ‚Π° для отобраТСния ΠΈ ΠΏΠ΅Ρ‡Π°Ρ‚ΠΈ тСкста:

β€’ растровыС;

β€’ Π²Π΅ΠΊΡ‚ΠΎΡ€Π½Ρ‹Π΅;

β€’ TrueType;

β€’ ΠžΡ€Π΅ΠΏΠ’ΡƒΡ€Π΅.

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

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ‚ΠΎΡ‡Π΅Ρ‡Π½Ρ‹Π΅ рисунки для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ символа Π² растровом ΡˆΡ€ΠΈΡ„Ρ‚Π΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°ΡŽΡ‰Π΅ΠΉ способности устройства, Ρ‚ΠΎ, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, качСство ΠΈΡ… отобраТСния зависит ΠΎΡ‚ устройства Π²Ρ‹Π²ΠΎΠ΄Π°. Напротив, Π²Π΅ΠΊΡ‚ΠΎΡ€Π½Ρ‹Π΅ ΡˆΡ€ΠΈΡ„Ρ‚Ρ‹ Π½Π΅ зависят ΠΎΡ‚ устройства Π²Ρ‹Π²ΠΎΠ΄Π°, ΠΎΠ΄Π½Π°ΠΊΠΎ врСмя, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ для ΠΈΡ… отобраТСния, большС, Ρ‡Π΅ΠΌ Ρƒ растровых ΠΈΠ»ΠΈ ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠ² TrueType. ПослСдниС ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ ΠΏΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌΡƒΡŽ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ с сохранСниСм ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° символов.

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

6.6. РисованиС ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ²

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅ хотя Π±Ρ‹ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ Ρ‚Π΅ΠΎΡ€ΠΈΠΈ, поэтому ΠΏΠΎΡ€Π° Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒΡΡ. Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ простоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ Π½Π° Ρ„ΠΎΡ€ΠΌΠ΅ ряд ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ². Для этого Π² Π½ΠΎΠ²ΠΎΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ для Ρ„ΠΎΡ€ΠΌΡ‹ сдСлаСм ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ события OnPaint (листинг 6.1).

...

Листинг 6.1.

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ события Ρ„ΠΎΡ€ΠΌΡ‹ OnPaint

procedure TfmShapes.FormPaint(Sender: TObject);

var

hCurDC: HDC;

hCurPen, hOldPen: HPEN;

hCurBrush, hOldBrush: HBRUSH;

begin

//ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΎΠ±Ρ‰ΠΈΠΉ контСкст устройства

hCurDC := GetDC(Handle);

//создаСм графичСский ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠšΠ°Ρ€Π°Π½Π΄Π°Ρˆ

hCurPen := CreatePen(PS_SOLID, 2, RGB(255, 64, 0));

//Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ Π΅Π³ΠΎ для ΠΎΠ±Ρ‰Π΅Π³ΠΎ контСкста устройства экрана

//ΠΈ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅ΠΌ Ρ€Π°Π½Π΅Π΅ Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΉ

hOldPen := SelectObject(hCurDC, hCurPen);

//создаСм графичСский ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠšΠΈΡΡ‚ΡŒ

hCurBrush := CreateSolidBrush(RGB(0, 128, 255));

//Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ Π΅Π΅ для ΠΎΠ±Ρ‰Π΅Π³ΠΎ контСкста устройства экрана

//ΠΈ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅ΠΌ Ρ€Π°Π½Π΅Π΅ Π²Ρ‹Π±Ρ€Π°Π½Π½ΡƒΡŽ

hOldBrush := SelectObject(hCurDC, hCurBrush);

//рисуСм эллипс

Ellipse(hCurDC, 10, 10, 100, 70);

//рисуСм ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ

Rectangle(hCurDC, 110, 10, 210, 70);

//ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ с ΠΎΠΊΡ€ΡƒΠ³Π»Π΅Π½Π½Ρ‹ΠΌΠΈ ΡƒΠ³Π»Π°ΠΌΠΈ

RoundRect(hCurDC, 10, 80, 100, 140, 10, 10);

//ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ Π² Π²ΠΈΠ΄Π΅ Β«Π±ΠΎΡ‡ΠΊΠΈΒ»

RoundRect(hCurDC, 110, 80, 210, 140, 10, 100);

//рисуСм ΠΏΡ€ΡΠΌΡƒΡŽ

MoveToEx(hCurDC, 10, 150, nil);

LineTo(hCurDC, 100, 220);

//рисуСм Π΄ΡƒΠ³Ρƒ

Arc(hCurDC, 110, 150, 210, 220, 110, 150, 210, 220);

//восстанавливаСм Ρ€Π°Π½Π΅Π΅ Π²Ρ‹Π±Ρ€Π°Π½Π½ΡƒΡŽ ΠΊΠΈΡΡ‚ΡŒ

SelectObject(hCurDC, hOldBrush);

//удаляСм ΡΠΎΠ·Π΄Π°Π½Π½ΡƒΡŽ ΠΊΠΈΡΡ‚ΡŒ

DeleteObject(hCurBrush);

//восстанавливаСм Ρ€Π°Π½Π΅Π΅ Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΉ ΠΊΠ°Ρ€Π°Π½Π΄Π°Ρˆ

SelectObject(hCurDC, hOldPen);

//удаляСм созданный ΠΊΠ°Ρ€Π°Π½Π΄Π°Ρˆ

DeleteObject(hCurPen);

//освобоТдаСм ΠΎΠ±Ρ‰ΠΈΠΉ контСкст устройства

ReleaseDC(Handle, hCurDC);

end;

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π½Π°Ρ‡Π°Ρ‚ΡŒ Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ, трСбуСтся ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ контСкст устройства нашСй Ρ„ΠΎΡ€ΠΌΡ‹. Для этого ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ GetDC:

...

hCurDC := GetDC(Handle);

Она ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΎΠΏΠΈΡΠ°Ρ‚Π΅Π»ΡŒ контСкста устройства экрана для клиСнтской области ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° ΠΈΠ»ΠΈ всСго экрана. Ѐункция ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°:

...

Function GetDC(hWnd: HWND): HDC;

Π—Π΄Π΅ΡΡŒ hWnd – дСскриптор ΠΎΠΊΠ½Π°, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ получаСтся контСкст устройства. Если это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π²Π½ΠΎ nil, Ρ‚ΠΎ GetDC Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ контСкст устройства для всСго экрана. Π’ случаС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ выполнСния функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ контСкст устройства. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС Π΅Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π²Π΅Π½ nil.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ контСкста устройства ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π½Π° Ρ‚Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹. ИзмСним Ρ†Π²Π΅Ρ‚ ΠΊΠ°Ρ€Π°Π½Π΄Π°ΡˆΠ° ΠΈ Π΅Π³ΠΎ Ρ‚ΠΎΠ»Ρ‰ΠΈΠ½Ρƒ, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ†Π²Π΅Ρ‚ кисти. Для этого создадим Π½ΠΎΠ²Ρ‹ΠΉ графичСский ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ CreatePen.

...

hCurPen := CreatePen(PS_SOLID, 2, RGB(255, 64, 0));

Π€ΠΎΡ€ΠΌΠ°Ρ‚ Π΄Π°Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ: