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

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

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

Рис. 1.19. Π€ΠΎΡ€ΠΌΠ°, отобраТаСмая ΠΏΠΎΠ²Π΅Ρ€Ρ… Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΠΊΠΎΠ½

Π’Ρ‚ΠΎΡ€ΠΎΠΉ способ пригодится, Ссли Ρ„ΠΎΡ€ΠΌΠ° отобраТаСтся постоянно ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ, ΠΎΠ΄Π½Π°ΠΊΠΎ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΊ сСбС ΠΏΡ€ΠΈΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ внимания, для Ρ‡Π΅Π³ΠΎ ΠΈ помСщаСтся Π½Π°Π²Π΅Ρ€Ρ…. Бпособ основан Π½Π° использовании API-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ SetWindowPos, которая ΠΊΡ€ΠΎΠΌΠ΅ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΎΠΊΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π΅Ρ‰Π΅ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ порядок рисования ΠΎΠΊΠ½Π° (Z-order).

...

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅

Под Z-order подразумСваСтся порядок слСдования ΠΎΠΊΠΎΠ½ вдоль оси Z, Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½ΠΎΠΉ пСрпСндикулярно экрану (оси X ΠΈ Π£Π»Π΅ΠΆΠ°Ρ‚ Π² плоскости экрана).

Π’Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ SetWindowPos для помСщСния ΠΎΠΊΠ½Π° Π½Π°Π²Π΅Ρ€Ρ… выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ (Handle – дСскриптор Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°):

...

SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE)

Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС ΠΎΠΊΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΎΠΊΠ½ΠΎΠΌ, Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‰ΠΈΠΌΡΡ ΠΏΠΎΠ²Π΅Ρ€Ρ… Π΄Ρ€ΡƒΠ³ΠΈΡ… (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ДиспСтчСром Π·Π°Π΄Π°Ρ‡).

Π§Ρ‚ΠΎΠ±Ρ‹ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ (порядок рисования) ΠΎΠΊΠ½Π°, ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ SetWindowPos со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ Π½Π°Π±ΠΎΡ€ΠΎΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²:

...

SetWindowPos(Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE)

ПослС этого Π΄Ρ€ΡƒΠ³ΠΈΠ΅, Π½Π΅ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΡ‹Π΅ ΠΏΠΎΠ²Π΅Ρ€Ρ… ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ…, ΠΎΠΊΠ½Π° ΠΌΠΎΠ³ΡƒΡ‚ снова ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ Π½Π°ΡˆΡƒ Ρ„ΠΎΡ€ΠΌΡƒ.

Π“Π»Π°Π²Π° 2 УмСньшСниС Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π•Π₯Π•-Ρ„Π°ΠΉΠ»Π°. ИспользованиС Windows API

β€’ Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ Π»ΠΈΡˆΠ½ΠΈΡ… ΠΊΠΈΠ»ΠΎΠ±Π°ΠΉΡ‚

β€’ Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠΊΠ½Π° Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ

β€’ ΠžΠΊΠ½ΠΎ с элСмСнтами управлСния

β€’ Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹Π΅ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²Ρ‹Π΅ ΠΎΠΊΠ½Π° Windows

β€’ Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° ΡˆΡ€ΠΈΡ„Ρ‚Π° элСмСнтов управлСния

НС сСкрСт, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ скомпилированного Π•Π₯Π•-Ρ„Π°ΠΉΠ»Π° Delphi часто Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ прСвосходит Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, написанных с использованиСм срСд Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΎΡ‚ Microsoft (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Visual C++, Visual Basic).

...

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅

Π—Π΄Π΅ΡΡŒ ΠΈ Π΄Π°Π»Π΅Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ Π² Π²ΠΈΠ΄Ρƒ прилоТСния с ΠΎΠΊΠΎΠ½Π½Ρ‹ΠΌ интСрфСйсом (Π½Π΅ ΠΊΠΎΠ½ΡΠΎΠ»ΡŒΠ½Ρ‹Π΅).

ΠŸΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΊΡ€ΡƒΠΏΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² этот Ρ„Π°ΠΊΡ‚ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ Π½Π΅ смущаСт. Однако Ρ‡Ρ‚ΠΎ ΠΆΠ΅ Π΄Π΅Π»Π°Ρ‚ΡŒ, Ссли программисту Π½Π° Delphi Π½ΡƒΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‰ΡƒΡŽ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ мСньшС мСста (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, инсталлятор) ΠΈΠ»ΠΈ Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‰ΡƒΡŽΡΡ Π·Π° минимальноС врСмя (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΡΠ΅Ρ€Π²ΠΈΡΠ½ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ). ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π° C++, Π½ΠΎ Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ, Ссли ΠΎΡΠ²Π°ΠΈΠ²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ язык программирования Π½Π΅Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ?

Π’ этой Π³Π»Π°Π²Π΅ Π±ΡƒΠ΄ΡƒΡ‚ рассмотрСны Π΄Π²Π° способа ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π•Π₯Π•-Ρ„Π°ΠΉΠ»Π°: ΠΎΡ‚ΠΊΠ°Π· ΠΎΡ‚ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Borland Π·Π° счСт прямого использования Windows API ΠΈ Ρ€Π°Π·Π±ΠΈΠ΅Π½ΠΈΠ΅ прилоТСния Π½Π° нСсколько DLL. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ способ позволяСт Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ прилоТСния. Однако написаниС Delphi-прилоТСния (Π΄Π° Π΅Ρ‰Π΅ ΠΈ с ΠΎΠΊΠΎΠ½Π½Ρ‹ΠΌ интСрфСйсом) с использованиСм Ρ‚ΠΎΠ»ΡŒΠΊΠΎ API-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ являСтся Π·Π°Π΄Π°Ρ‡Π΅ΠΉ вСсьма Ρ‚Ρ€ΡƒΠ΄ΠΎΠ΅ΠΌΠΊΠΎΠΉ, хотя ΠΈ интСрСсной, Π΄Π° ΠΊ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ ΠΈ экзотичной. Π’Ρ‚ΠΎΡ€ΠΎΠΉ ΠΆΠ΅ способ Π½Π΅ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π² Ρ†Π΅Π»ΠΎΠΌ, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ‚ΡŒ врСмя запуска прилоТСния.

Π’Π½Π°Ρ‡Π°Π»Π΅ нСбольшоС отступлСниС. Π˜Ρ‚Π°ΠΊ, опСрационная систСма (Π² нашСм случаС это Windows) прСдоставляСт интСрфСйс для программирования Π²Π½ΡƒΡ‚Ρ€ΠΈ сСбя – Π½Π°Π±ΠΎΡ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Ρ… Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… систСмных Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ…, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ Windows API (Windows Application Programming Interface – интСрфСйс программирования Windows-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ). Π›ΡŽΠ±ΠΎΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΏΠΎΠ΄ Windows Π½Π° любом языкС программирования Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ счСтС сводится ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΊ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅ΠΌΡƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Windows API. Волько использованиС этих самых Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΠ°ΠΊ явным, Ρ‚Π°ΠΊ ΠΈ скрытым Π·Π° использованиСм Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, поставляСмых вмСстС со срСдой программирования.

И Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΌΠΎΠΌΠ΅Π½Ρ‚. Π’ тСкстС постоянно говорится ΠΎ Windows API, Π° Π½Π΅ просто API. Π­Ρ‚ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ само понятиС Application Programming Interface примСняСтся ΠΊΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠΌ систСмам, Π° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ ОБ, ΠΈ ΡƒΠΆ Ρ‚Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ Windows. Π’ΠΎΡ‚ нСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ²: UNIX API, Linux API, Oracle API (интСрфСйс для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π‘Π£Π‘Π” Oracle) ΠΈ Ρ‚. Π΄.

...

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅

Π’ ΠΊΠ½ΠΈΠ³Π΅ описаны Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ возмоТности Window API, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ нСпосрСд – ствСнно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ…. ПолноС описаниС Windows API являСтся слишком большой Π·Π°Π΄Π°Ρ‡Π΅ΠΉ, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π½Π΅ Ρ…Π²Π°Ρ‚ΠΈΡ‚ ΠΈ ΠΊΠ½ΠΈΠ³ΠΈ. Если Π²Π°ΠΌ захочСтся ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ хотя Π±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ большС ΠΎ Windows API, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ спСциализированным изданиям ΠΏΠΎ этой Ρ‚Π΅ΠΌΠ΅. Однако Π½ΠΈΠΊΠ°ΠΊΠΎΠ΅ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ Π½Π΅ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ MSDN (огромная справочная систСма ΠΎΡ‚ Micr osoft для Visual Studio).

Π’Π΅ΠΏΠ΅Ρ€ΡŒ выясним, Π·Π° счСт Ρ‡Π΅Π³ΠΎ разрастаСтся Π•Π₯Π•-Ρ„Π°ΠΉΠ» прилоТСния ΠΏΡ€ΠΈ использовании срСды программирования Delphi.

2.1. Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ Π»ΠΈΡˆΠ½ΠΈΡ… ΠΊΠΈΠ»ΠΎΠ±Π°ΠΉΡ‚

Для Π½Π°Ρ‡Π°Π»Π° создадим Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Windows-прилоТСния (Pro j ectl. exe). По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΎΠ½ΠΎ создаСт ΠΈ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΎΠ΄Π½Ρƒ ΠΏΡƒΡΡ‚ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ (объявлСна Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅ Unitl. pas). НичСго ΠΌΠ΅Π½ΡΡ‚ΡŒ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ, просто скомпилируСм ΠΈ посмотрим Ρ€Π°Π·ΠΌΠ΅Ρ€ Π•Π₯Π•-Ρ„Π°ΠΉΠ»Π°. Π‘ΠΎΠ»ΡŒΡˆΠ΅ 300 ΠšΠ±Π°ΠΉΡ‚ – Π½Π΅ ΠΌΠ½ΠΎΠ³ΠΎΠ²Π°Ρ‚ΠΎ Π»ΠΈ для Ρ‚Π°ΠΊΠΎΠ³ΠΎ простого прилоТСния?

ΠšΡΡ‚Π°Ρ‚ΠΈ, ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅Π΅ ΠΎΠΊΠΎΠ½Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, написанноС Π½Π° Visual C++ 6.0 (Π² Release-ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π±Π΅Π· ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π² Π•Π₯Π•-Ρ„Π°ΠΉΠ»Π΅) Π±Π΅Π· использования MFC, ΠΈΠΌΠ΅Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ 28 ΠšΠ±Π°ΠΉΡ‚, с использованиСм Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ MFC (ΠΏΡ€Π°Π²Π΄Π°, ΠΎΠΊΠ½ΠΎ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅) – 20 ΠšΠ±Π°ΠΉΡ‚. ΠŸΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅Π΅ ΠΎΠΊΠΎΠ½Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Visual Basic 6.0 Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ всСго 16 ΠšΠ±Π°ΠΉΡ‚.

Из-Π·Π° Ρ‡Π΅Π³ΠΎ такая Ρ€Π°Π·Π½ΠΈΡ†Π°? ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ, ΠΊΠ°ΠΊΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ прилоТСниями, написанными Π½Π° этих языках программирования. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Dependency Walker, входящСй Π² ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚ Microsoft Visual Studio (рис. 2.1).

Рис. 2.1. Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ прилоТСниями

Как Π²ΠΈΠ΄ΠΈΠΌ, ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Delphi (ΠΏΡ€Π°Π²Ρ‹ΠΉ Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ ΡƒΠ³ΠΎΠ» ΠΎΠΊΠ½Π° Π½Π° рис. 2.1) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΈΠ»ΠΈΡ‡Π½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈ ΠΉ, ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½Π½Ρ‹Ρ… Π² стандартныС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы Windows. ΠšΡ€ΠΎΠΌΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы, ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Delphi Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚.

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ WinAPI. Π΅Ρ…Π΅ (Π»Π΅Π²ΠΎΠ΅ Π²Π΅Ρ€Ρ…Π½Π΅Π΅ ΠΎΠΊΠ½ΠΎ Π½Π° рис. 2.1) являСтся ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ чистого Windows API прилоТСния Π² Ρ‚ΠΎΠΌ смыслС, Ρ‡Ρ‚ΠΎ Π² Π½Π΅ΠΌ Π½Π΅ задСйствованы Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ-ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ Π½Π°Π΄ API-функциями, ΠΊΠ°ΠΊΠΈΠΌ-Π»ΠΈΠ±ΠΎ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΎΠ±Π»Π΅Π³Ρ‡Π°ΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅. БобствСнно, ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ ΠΈ «вСсит» ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅Π΅ ΠΎΠΊΠΎΠ½Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

Π‘ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ MFC. Π΅Ρ…Π΅ ΡƒΠΆΠ΅ интСрСснСС: Ρ€Π°Π·ΠΌΠ΅Ρ€ самого Π•Π₯Π•-Ρ„Π°ΠΉΠ»Π° ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΠ»ΡΡ Π·Π° счСт Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° Ρ€Π°Π±ΠΎΡ‚Ρ‹ с API-функциями ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΠ»Π°ΡΡŒ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. Π‘ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π½Π° Visual Basic (ΠΏΡ€Π°Π²ΠΎΠ΅ Π½ΠΈΠΆΠ½Π΅Π΅ ΠΎΠΊΠ½ΠΎ) Π΅Ρ‰Π΅ интСрСснСС – ΠΎΠ½ΠΎ фактичСски прСдставляСт собой Π²Ρ‹Π·ΠΎΠ²Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΎΠ΄Π½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° вся ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° программирования Π½Π° этом языкС (ΠΏΡ€ΠΈ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎΠΌ рассмотрСнии этой Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π² Π½Π΅ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ объявлСния встроСнных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Visual Basic).

К Ρ‡Π΅ΠΌΡƒ это всС? А ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ прилоТСния Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… языках программирования (Π² Π΄Π°Π½Π½ΠΎΠΌ случаС Ρ€Π΅Ρ‡ΡŒ ΠΈΠ΄Π΅Ρ‚ ΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°Ρ… Microsoft) совсСм Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ «тяТСловСсны», Ρ‡Π΅ΠΌ прилоТСния, написанныС Π½Π° Borland Delphi, Ссли ΠΏΡ€ΠΈ ΠΈΡ… написании программист ΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ API-функциями. ОсобСнно ΠΏΡ€ΠΈΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»Π΅Π½ Π² этом случаС ΠΏΡ€ΠΈΠΌΠ΅Ρ€ исполняСмого Ρ„Π°ΠΉΠ»Π° Visual Basic, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ хотя ΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΌΠ°Π»Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€, Π½ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ наличия Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠΊΠΎΠ»ΠΎ 1,32 ΠœΠ±Π°ΠΉΡ‚. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π° Visual C++ с использованиСм, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, MFC, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ классы ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ Π½Π°Π΄ функциями Windows API (ΠΏΡ€Π°Π²Π΄Π°, Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ½ΠΈ), трСбуСтналичия Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… DLL. Для Microsoft это Π½Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ опСрационная систСма Windows выпускаСтся ΠΈΠΌΠ΅Π½Π½ΠΎ этой ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ, Π° ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π½ΠΎΡΠΈΠΌΠΎΡΡ‚ΡŒ (здСсь – Ρ€Π°Π±ΠΎΡ‚ΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ Π±Π΅Π· установки) ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, написанных с использованиСм Π΅Π΅ ΠΆΠ΅ срСд Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, ΠΎΡ‡Π΅Π½ΡŒ просто: достаточно Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½ΡƒΠΆΠ½Ρ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π² состав ОБ.

Π§Ρ‚ΠΎ ΠΆΠ΅ Π² Ρ‚Π°ΠΊΠΎΠΌ случаС ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Borland? Π”Π°Π±Ρ‹ Π½Π΅ Π»ΠΈΡˆΠ°Ρ‚ΡŒ программиста возмоТности ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ с Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ самых ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… классов (VCL ΠΈ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ), ΠΊΠΎΠ΄ с Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ этих самых классов приходится ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΎΠ΄ΠΈΠ½ Ρ„Π°ΠΉΠ» с самой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ. Π’ΠΎΡ‚ ΠΈ получаСтся, Ρ‡Ρ‚ΠΎ рСализация этих самых классов Π² Π•Π₯Π•-Ρ„Π°ΠΉΠ»Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒ мСста Π³ΠΎΡ€Π°Π·Π΄ΠΎ большС, Ρ‡Π΅ΠΌ рСализация собствСнно прилоТСния. Π’Π°ΠΊ Π² нашСм случаС ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ....

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅

ΠšΡΡ‚Π°Ρ‚ΠΈ, ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π½Π° Visual C++ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ статичСски ΡΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Π°Ρ‚ΡŒ с Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ MFC (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ классов Π² сам Π•Π₯Π•-Ρ„Π°ΠΉΠ»). Π’Π°ΠΊΠΈΠΌ способом ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ нСзависимости прилоТСния ΠΎΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚Π΅Ρ…, Ρ‡Ρ‚ΠΎ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎ ΠΏΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ с Windows. Но ΠΏΡ€ΠΈ этом Ρ€Π°Π·ΠΌΠ΅Ρ€ Π•Π₯Π•-Ρ„Π°ΠΉΠ»Π° рассмотрСнного Π²Ρ‹ΡˆΠ΅ прилоТСния (Π² Release-ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ) возрастаСт Π΄ΠΎ 192 ΠšΠ±Π°ΠΉΡ‚.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ обратимся ΠΊ Π½Π°ΡˆΠ΅ΠΌΡƒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρƒ Π½Π° Delphi. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ, Ρ‡Ρ‚ΠΎ записано Π² Ρ„Π°ΠΉΠ»Π°Ρ… Unitl.pas ΠΈ Projectl. dpr. ВСкст Ρ„Π°ΠΉΠ»Π° Unitl.pas приводится Π½ΠΈΠΆΠ΅ (листинг 2.1).

...

Листинг 2.1.

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ Unitl.pas

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics,

Controls, Forms,

Dialogs;

type

TForm1 = class(TForm)

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

end.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠ΅ΠΊΡ†ΠΈΡŽ uses. Π—Π΄Π΅ΡΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ дСвяти ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, объявлСниС собствСнно класса Ρ„ΠΎΡ€ΠΌΡ‹ TForml, Π° Ρ‚Π°ΠΊΠΆΠ΅ строку, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΡƒΡŽ компилятору Π½Π° использованиС Ρ„Π°ΠΉΠ»Π° рСсурсов. ВсС ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, ΠΊΡ€ΠΎΠΌΠ΅ ΠΏΠ΅Ρ€Π²Ρ‹Ρ… Π΄Π²ΡƒΡ…, β€“ это ΡƒΠΆΠ΅ Ρ‚Ρ€ΡƒΠ΄Ρ‹ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Borland, ΠΎΠ±Π»Π΅Π³Ρ‡Π°ΡŽΡ‰ΠΈΠ΅ Тизнь простым программистам. ΠœΠΎΠ΄ΡƒΠ»ΡŒ Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΆΠ΅ Ρ€ΠΎΠ΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΈ Π² Ρ„Π°ΠΉΠ»Π΅ Pro j ectl. dpr (листинг 2.2).

...

Листинг

2.2. Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ Ρ„Π°ΠΉΠ»Π° Project1.dpr

program Project1;

uses

Forms,

Unit1 in \'Unit1.pas\' {Form1};