Π”ΠΈΠΏΠ»ΠΎΠΌΡ‹, курсовыС, Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚Ρ‹, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Π΅...
Брочная ΠΏΠΎΠΌΠΎΡ‰ΡŒ Π² ΡƒΡ‡Ρ‘Π±Π΅

Π€Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€

ΠšΡƒΡ€ΡΠΎΠ²Π°ΡΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈΠ£Π·Π½Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΠΌΠΎΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹

ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Ρ„ΠΎΡ€ΠΌΡ‹ FPropertyFile осущСствляСтся Π² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Prepare, ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‰Π΅ΠΉ Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΏΡƒΡ‚ΡŒ ΠΊ Ρ„Π°ΠΉΠ»Ρƒ. НиТС пСрСчислСны основныС ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΡ‹Π΅ свойства ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈΡ… ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΡ: ΠΈΠΊΠΎΠ½ΠΊΠ° Ρ„Π°ΠΉΠ»Π°/ΠΏΠ°ΠΏΠΊΠΈ, Ρ‚ΠΈΠΏ Ρ„Π°ΠΉΠ»Π° (функция SHGetFileInfo); имя Ρ„Π°ΠΉΠ»Π°/ΠΏΠ°ΠΏΠΊΠΈ (функция ExtractFileName); ΠΏΠ°ΠΏΠΊΠΈ (ExtractFilePath); Ρ€Π°Π·ΠΌΠ΅Ρ€Π° (функция GetFileAttributesEx), Ρ€Π°Π·ΠΌΠ΅Ρ€Π°… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

Π€Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

Π—Π°Π΄Π°Π½ΠΈΠ΅ Π½Π° ΠΊΡƒΡ€ΡΠΎΠ²ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ:

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π°. (Аналог Far Manager, Total Commander ΠΈ Ρ‚. ΠΏ.).

ОглавлСниС Π—Π°Π΄Π°Π½ΠΈΠ΅ Π½Π° ΠΊΡƒΡ€ΡΠΎΠ²ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

1. АналитичСская Ρ‡Π°ΡΡ‚ΡŒ

2. ВСоритичСская Ρ‡Π°ΡΡ‚ΡŒ

2.1 Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅

2.2 ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

3. ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ΡΠΊΠ°Ρ Ρ‡Π°ΡΡ‚ΡŒ

3.1 Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ возмоТности

3.1.1 ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅/ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ пСрСтаскиваниСм

3.1.2 Π Π°Π±ΠΎΡ‚Π° с Π΄ΠΈΡΠΊΠ΅Ρ‚Π°ΠΌΠΈ ΠΈ Π΄ΠΈΡΠΊΠ°ΠΌΠΈ

3.1.3 Бвойства Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΏΠ°ΠΏΠΎΠΊ ΠΈ Π΄ΠΈΡΠΊΠΎΠ²

4. ВСхничСская докумСнтация

5. Π­ΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ Π’Ρ‹Π²ΠΎΠ΄ Бписок использованной Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹

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

НаличиС Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π° Π² ΡΠ°ΠΌΠΈΡ… ΠžΠ‘ Π½Π΅ ΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ Π² ΠΏΠΎΠΈΡΠΊΠ°Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ «Π΄Π»Ρ сСбя». Π’ Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ сдСлана ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ самыС Π½ΡƒΠΆΠ½Ρ‹Π΅ для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎ Ρ€Π°Π±ΠΎΡ‚Π΅ с Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмой Π² Π½Π°Π³Π»ΡΠ΄Π½ΠΎΠΌ ΠΈ ΠΏΡ€ΠΎΡΡ‚ΠΎΠΌ Π²ΠΈΠ΄Π΅. Π’ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ всСх Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π½Π΅ Π±Ρ‹Π»ΠΎ Π³Π»Π°Π²Π½ΠΎΠΉ Ρ†Π΅Π»ΡŒΡŽ Π°Π²Ρ‚ΠΎΡ€Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, основная Π·Π°Π΄Π°Ρ‡Π° — Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ Π² ΡΠΎΡ‡Π΅Ρ‚Π°Π½ΠΈΠΈ с ΠΏΡ€ΠΎΡΡ‚ΠΎΡ‚ΠΎΠΉ. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ Π² ΡΠ΅Π±Π΅ всС способы взаимодСйствия с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ, прСдоставляСмыС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ срСдой Windows, ΠΊΠ°ΠΊ Ρ‚ΠΎ: Ρ€Π°Π±ΠΎΡ‚Π° с Π±ΡƒΡ„Π΅Ρ€ΠΎΠΌ Clipboard, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΈ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ посрСдством пСрСтаскивания (Drag'n'Drop), контСкстныС мСню, панСль управлСния ΠΈ Π΄Ρ€.

Π”Π°Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ Π½Π΅ ΠΏΡ€Π΅Ρ‚Π΅Π½Π΄ΡƒΠ΅Ρ‚ Π½Π° Π·Π²Π°Π½ΠΈΠ΅ самого ΡƒΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ самого ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ, Π° Π»ΠΈΡˆΡŒ ΠΎΡ‚Ρ€Π°ΠΆΠ°Π΅Ρ‚ взгляд Π°Π²Ρ‚ΠΎΡ€Π° Π½Π° Ρ‚ΠΎ, ΠΊΠ°ΠΊΠΈΠΌ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ простой, Π½ΠΎ Π²ΠΌΠ΅ΡΡ‚Π΅ с Ρ‚Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ²ΠΎΠ΄Π½ΠΈΠΊ ΠΏΠΎ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмС. Доступ ΠΊ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ ΡΠΈΡΡ‚Π΅ΠΌΠ΅ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ осущСствляСтся Ρ‡Π΅Ρ€Π΅Π· API Windows, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π»Π΅Π³ΠΊΠΎ пСрСносимой срСди ΠžΠ‘ этого класса. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° написана Π² ΡΡ€Π΅Π΄Π΅ Microsoft Visual Studio 2008.

1. АналитичСская Ρ‡Π°ΡΡ‚ΡŒ Основной ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠ΅ΠΉ стало сосрСдоточСниС максимума ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΎΠΊΠ½Π΅ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ простой ΠΈ Π±Ρ‹ΡΡ‚Ρ€Ρ‹ΠΉ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΏΠΎ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ичСской Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмС. Для этого Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π±Ρ‹Π»ΠΎ Ρ€Π°Π·Π±ΠΈΡ‚ΠΎ мыслСнно Π½Π° 4 части: иСрархичСскоС ΠΎΠΊΠ½ΠΎ ΠΏΠ°ΠΏΠΎΠΊ, ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ список Ρ„Π°ΠΉΠ»ΠΎΠ², ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ мСню ΠΈ ΠΏΠ°Π½Π΅Π»ΡŒ ΠΈ ΠΎΠΊΠ½ΠΎ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ (панСль состояния). ВсС эти ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ бСзусловно связаны ΠΌΠ΅ΠΆΠ΄Ρƒ собой ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ ΠΎΠ±Ρ‰ΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ — Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ.

Π”Π΅Ρ€Π΅Π²ΠΎ ΠΏΠ°ΠΏΠΎΠΊ прСдставляСт собой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса TTreeView, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ загруТаСтся иСрархичСская файловая структура носитСлСй ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠŸΠš. Π”Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ быстрый доступ ΠΊ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌ (ΠΏΠ°ΠΏΠΊΠ°ΠΌ, дирСкториям, дискам) Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы, ΠΊΠΎΡ€Π½Π΅ΠΌ Π΄Π΅Ρ€Π΅Π²Π° слуТит Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ «ΠœΠΎΠΉ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€», Π·Π°ΠΌΡ‹ΠΊΠ°ΡŽΡ‰ΠΈΠΉ Π½Π° ΡΠ΅Π±Π΅ всС диски. Бписок Ρ„Π°ΠΉΠ»ΠΎΠ² прСдставлСн ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ класса TListView ΠΈ ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ список содСрТимого, Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π² Π΄Π΅Ρ€Π΅Π²Π΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ. ΠŸΡ€ΠΈ этом связь ΠΌΠ΅ΠΆΠ΄Ρƒ списком ΠΈ Π΄Π΅Ρ€Π΅Π²ΠΎΠΌ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ прямая, Π½ΠΎ ΠΈ ΠΎΠ±Ρ€Π°Ρ‚ная — ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… ΠΏΠ°ΠΏΠΎΠΊ Π² ΡΠΏΠΈΡΠΊΠ΅ Π²Π»Π΅Ρ‡Π΅Ρ‚ Π·Π° ΡΠΎΠ±ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ раскрытиС Π΄Π΅Ρ€Π΅Π²Π°. Бписок содСрТит довольно ΠΏΠΎΠ»Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ„Π°ΠΉΠ»Π΅ (Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ), начиная с ΠΈΠΌΠ΅Π½ΠΈ ΠΈ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°Ρ Π΄Π°Ρ‚ΠΎΠΉ создания. Π”Π΅Ρ€Π΅Π²ΠΎ ΠΈ ΡΠΏΠΈΡΠΎΠΊ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ ΠΌΠ΅ΠΆΠ΄Ρƒ собой ΠΈ Π² ΠΏΡ€ΠΎΡ†Π΅ΡΡΠ΅ ΠΎΠ±ΠΌΠ΅Π½Π° Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ посрСдством пСрСтаскивания. ΠŸΠ΅Ρ€Π΅Ρ‚Π°ΡΠΊΠΈΠ²Π°Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒΡΡ ΠΊΠ°ΠΊ Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° (ΠΏΠ°ΠΏΠΊΠΈ Π² ΠΏΠ°ΠΏΠΊΡƒ Π² TreeView, Ρ„Π°ΠΉΠ»Π° Π² ΠΏΠ°ΠΏΠΊΡƒ Π² ListView), Ρ‚Π°ΠΊ ΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ.

МСню (класс TMainMenu) ΠΈ ΠΏΠ°Π½Π΅Π»ΡŒ управлСния (класс TControlBar) Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ Π½Π°Π±ΠΎΡ€ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π½Π°Π΄ элСмСнтами Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы: созданиС ΠΏΠ°ΠΏΠΊΠΈ, ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅, Π²Ρ‹Ρ€Π΅Π·Π°Π½ΠΈΠ΅ ΠΈ Ρ‚. Π΄. А, ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ само ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ этих элСмСнтов, Π° Ρ‚Π°ΠΊΠΆΠ΅ порядок ΠΈΡ… ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠΈ, Ρ‡Ρ‚ΠΎ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях Π±Ρ‹Π²Π°Π΅Ρ‚ ΠΊΡ€Π°ΠΉΠ½Π΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ. Π’Π°ΠΆΠ½Ρ‹ΠΌ свойством элСмСнтов управлСния являСтся ΠΈΡ… ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ — Ρ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΡ… ΠΎΠ±ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΡΡ‚Π²Π°Ρ… Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹, ΡΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΈΠ»ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ Π² ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ… Π±Π»Π΅ΠΊΠ»Ρ‹ΠΌ Ρ†Π²Π΅Ρ‚ΠΎΠΌ. К ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ управлСния слСдуСт отнСсти ΠΈ ΠΊΠΎΠ½Ρ‚СкстноС мСню, ΠΏΠΎΠ΄ΠΌΠ΅Π½ΡΡŽΡ‰Π΅Π΅ ΠΏΡƒΠ½ΠΊΡ‚Ρ‹ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅Π΅ Π½Π΅ ΠΎΡ‚Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒΡΡ ΠΎΡ‚ ΡΠΏΠΈΡΠΊΠ° ΠΈ Π΄Π΅Ρ€Π΅Π²Π° ΠΏΡƒΡ‚Π΅ΠΌ обращСния ΠΊ Π½Π΅ΠΌΡƒ Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ΠΌ ΠΏΡ€Π°Π²ΠΎΠΉ клавиши.

НаконСц информационная панСль (панСль состояния, статуса) (класс TStatusBar) ТСстко связана со ΡΠΏΠΈΡΠΊΠΎΠΌ Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ количСство элСмСнтов, Π° Ρ‚Π°ΠΊΠΆΠ΅ свободноС мСсто Π½Π° Π΄ΠΈΡΠΊΠ΅.

Π˜Ρ‚Π°ΠΊ, всС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ хотя ΠΈ Π³Ρ€Π°Ρ„ичСски Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Ρ‹, Π½ΠΎ Π»ΠΎΠ³ΠΈΡ‡Π΅ΡΠΊΠΈ связаны ΠΌΠ΅ΠΆΠ΄Ρƒ собой Π² Π»ΡŽΠ±ΠΎΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Ρ‡Ρ‚ΠΎ позволяСт ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π½Π΅ ΠΎΡ‚Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒΡΡ ΠΎΡ‚ Π³Π»Π°Π²Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ — доступа ΠΊ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ элСмСнту Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π°Π΄ Π½ΠΈΠΌ. ИмСнно поэтому Π±Ρ‹Π»Π° Π²Ρ‹Π±Ρ€Π°Π½Π° такая структура ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (панСль ΠΏΠ°ΠΏΠΎΠΊ — панСль Ρ„Π°ΠΉΠ»ΠΎΠ²) Π² ΠΏΡ€ΠΎΡ‚ивовСс ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π²ΡƒΡ… списков Ρ„Π°ΠΉΠ»ΠΎΠ² Π² ΡΡ‚ΠΈΠ»Π΅ Norton Commander, вСдь Ρ€Π°Π±ΠΎΡ‚Π° с ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΏΠ°Π½Π΅Π»Π΅ΠΉ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½Π° ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠΉ. Доступ ΠΊ Π³Π»ΡƒΠ±ΠΎΠΊΠΎ Π»Π΅ΠΆΠ°Ρ‰ΠΈΠΌ Π² ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ Π² Ρ‚Π°ΠΊΠΎΠΉ систСмС, ΠΏΠΎ ΠΌΠ½Π΅Π½ΠΈΡŽ Π°Π²Ρ‚ΠΎΡ€Π° Π½Π΅ΡƒΠ΄ΠΎΠ±Π½Π°, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠ°Π½Π΅Π»ΠΈ ΠΏΠ°ΠΏΠΎΠΊ, которая позволяСт Π·Π° Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΎ Ρ‰Π΅Π»Ρ‡ΠΊΠΎΠ² Π΄ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π΄ΠΎ Π»ΡŽΠ±ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°. К Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π½ΠΎ структура «ΠΏΠ°ΠΏΠΊΠΈ — список» позволяСт Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ Π² ΡΡ‚ΠΈΠ»Π΅ Drag’n’Drop.

2. ВСоритичСская Ρ‡Π°ΡΡ‚ΡŒ

ВсС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π±Ρ‹Π»ΠΈ ΡΠΎΠ·Π½Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ вынСсСны ΠΈΠ· ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² событий Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Ρ‹ класса, для удобства ΠΈΡ… Π²Ρ‹Π·ΠΎΠ²Π° ΠΈΠ· Π»ΡŽΠ±Ρ‹Ρ… мСст ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ Π±ΠΎΠ»ΡŒΡˆΠ΅ΠΉ структурированности ΠΊΠΎΠ΄Π°. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ большСС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΏΡ€ΠΈ описании Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ΄Π΅Π»Π΅Π½ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π°ΠΊΠΈΠΌ функция, Π° Π½Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ событий, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ лишь содСрТат ΠΈΡ… Π²Ρ‹Π·ΠΎΠ²Ρ‹.

2.1 Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅

Код ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ содСрТит ряд Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, хранящих ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΡΠΎΡΡ‚оянии Π΅Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ: Π²ΠΈΠ΄Π΅ отобраТСния Π·Π½Π°Ρ‡ΠΊΠΎΠ², вставлСнных дисках, отсортированной ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ΅ ΠΈ Ρ‚. Π΄.

Π”Π°Π½Π½Ρ‹Π΅ ΠΎΠ± ΡƒΡΡ‚Π°Π½ΠΎΠ²Π»Π΅Π½Π½Ρ‹Ρ… ТСстких дисках ΠΈ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΎΠ² дискСт хранят 2 ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ — set_drive_num ΠΈ DiskIn, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ пСрвая содСрТит Π½ΠΎΠΌΠ΅Ρ€Π° ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΎΠ², вторая ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π° Ρ‚Π΅Ρ… ΠΈΠ· Π½ΠΈΡ…, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ вставлСна дискСта ΠΈΠ»ΠΈ оптичСских диск, Ρ‡Ρ‚ΠΎ позволяСт динамичСски ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ пустыС ΠΏΡ€ΠΈΠ²ΠΎΠ΄Ρ‹ ΠΈ Π·Π°ΠΏΡ€Π΅Ρ‰Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ Π½ΠΈΠΌ.

Ряд ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ…Ρ€Π°Π½ΠΈΡ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΡΠΎΡΡ‚оянии списка Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ ΠΏΠ°ΠΏΠΎΠΊ ListView1: CurrentDir — Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°, StyleListView — ΡΡ‚ΠΈΠ»ΡŒ отобраТСния Π·Π½Π°Ρ‡ΠΊΠΎΠ² (список, Ρ‚Π°Π±Π»ΠΈΡ†Π°…), ColumnToSort — Π½ΠΎΠΌΠ΅Ρ€ сортируСмой ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ, Direct — Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ сортировки (прямоС, ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ΅).

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ type_file_operation_drag_drop ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ копирования ΠΈΠ»ΠΈ пСрСноса Ρ„Π°ΠΉΠ»Π° ΠΏΡ€ΠΈ пСрСтаскивании, Ρ‡Ρ‚ΠΎ опрСдСляСтся ΠΏΠΎ Π½Π°ΠΆΠ°Ρ‚ΠΈΡŽ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… клавиш, Π° ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΊΠΎΠΉ DragnDrop Π² Π»ΠΎΠΆΡŒ ΠΌΠΎΠΆΠ½ΠΎ вовсС Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚ΡŒ всякиС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ посрСдством пСрСноса.

2.2 ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

I. Π’ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ: void FirstUpOtherDown (char) ΠΈ void FirstUpOtherDown (AnsiString).

ΠžΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡŽΡ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ рСгистра Π±ΡƒΠΊΠ² ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° строк Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ всС символы ΠΈΠΌΠ΅Π»ΠΈ Π½ΠΈΠΆΠ½ΠΈΠΉ рСгистр, ΠΊΡ€ΠΎΠΌΠ΅ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ символа. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ элСмСнтов Π² ΡΠΏΠΈΡΠΎΠΊ ΠΈ Π΄Π΅Ρ€Π΅Π²ΠΎ для выравнивания Π±ΡƒΠΊΠ² Π² Π½Π°Π·Π²Π°Π½ΠΈΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΏΠ°ΠΏΠΎΠΊ.

II. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ поиска ΠΈ ΠΎΡ‚обраТСния, содСрТащихся Π² ΡΠΈΡΡ‚Π΅ΠΌΠ΅ носитСлСй Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΎΠ²: void GetDrives () ΠΈ void ShowDrives ().

Ѐункция GetDrives осущСствляСт ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ поиск носитСлСй ΠΈ ΠΎΡΡƒΡ‰Π΅ΡΡ‚вляСт Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ ΠΈΡ… Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ² Π² Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ. Π‘Π°ΠΌΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ выполняСтся Π² ShowDrives, Π³Π΄Π΅ ΠΏΠΎΠΌΠΈΠΌΠΎ Π°Π½Π°Π»ΠΈΠ·Π° ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ осущСствляСтся построСниС названия диска, исходя ΠΈΠ· Π΅Π³ΠΎ Π½ΠΎΠΌΠ΅Ρ€Π° ΠΈ ΠΈΠΌΠ΅Π½ΠΈ ΠΌΠ΅Ρ‚ΠΊΠΈ. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° ΠΏΡ€ΠΈΠ²ΠΎΠ΄Π° позволяСт Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Π° Ρ‚ΠΎΡ‡Π½Π΅Π΅ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΈΠ· ΡΠΏΠΈΡΠΊΠ° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ImageList.

III. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ добавлСния элСмСнтов (записСй, ΡƒΠ·Π»ΠΎΠ²) Π² Π΄Π΅Ρ€Π΅Π²ΠΎ ΠΈ ΡΠΏΠΈΡΠΎΠΊ Ρ„Π°ΠΉΠ»ΠΎΠ²: TTreeNode* AddChildInNodeTree (TTreeNode, AnsiString), TListItem *AddItemInListView (TSearchRec, AnsiString).

Ѐункция добавлСния записи Π² Π΄Π΅Ρ€Π΅Π²ΠΎ осущСствляСт вставку ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ° для ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΡƒΠ·Π»Π°. ΠžΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΠ΅Ρ‚ΡΡ настройка свойств вставляСмого элСмСнта: ΠΏΡƒΡ‚ΠΈ ΠΊ Π½Π΅ΠΌΡƒ (свойство Data), Π·Π½Π°Ρ‡ΠΊΠ° (свойство ImageIndex ΠΈ SelectedIndex), ΠΈΠΌΠ΅Π½ΠΈ (свойство Name).

Ѐункция добавлСния записи Π² ΡΠΏΠΈΡΠΎΠΊ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ ΠΈΠ· ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠΉ структуры TSearchRec Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ элСмСнты — Π΄Π°Ρ‚Ρƒ, Π½Π°Π·Π²Π°Π½ΠΈΠ΅, Π° Ρ‚Π°ΠΊΠΆΠ΅ сама осущСствляСт поиск Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ API Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ SHGetFileInfo — Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° ΠΈ Π·Π½Π°Ρ‡ΠΎΠΊ, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Ρ‚ΠΈΠΏΡƒ Ρ„Π°ΠΉΠ»Π°. Π’ ΠΈΡ‚ΠΎΠ³Π΅ функция осущСствляСт ΠΏΠΎΠ»Π½ΠΎΠ΅ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ строки ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π½Π΅Π΅.

IV. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ формирования Π΄Π΅Ρ€Π΅Π²Π°: void ViewChild (TTreeNode *), void DeleteChild (TTreeNode* Node) ΠΈ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ функция bool CheckExpandedChild (TTreeNode *).

Основная идСя формирования Π΄Π΅Ρ€Π΅Π²Π° — Π½Π΅Ρ‚ нСобходимости Π² ΠΏΠΎΠ»Π½ΠΎΠΌ Π΅Π³ΠΎ построСнии Π² Π½Π°Ρ‡Π°Π»Π΅ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Ρ‡Ρ‚ΠΎ, бСзусловно, сокращаСт врСмя Π½Π° Π·Π°ΠΏΡƒΡΠΊ ΠΈ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π² ΠΎΠ±Ρ…ΠΎΠ΄Π΅ всСх ΠΏΠ°ΠΏΠΎΠΊ Π½Π° Π΄ΠΈΡΠΊΠ΅. Π’ ΡΡ‚ΠΎΠΉ ситуации Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° динамичСского построСния Π΄Π΅Ρ€Π΅Π²Π° Π²ΠΎ Π²Ρ€Π΅ΠΌΡ Π΅Π³ΠΎ раскрытия — свСртывания. Π Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ этой ΠΈΠ΄Π΅ΠΈ ΠΈ ΡΡ‚Π°Π»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ViewChild ΠΈ DeleteChild. ΠŸΠ΅Ρ€Π²Π°Ρ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Ρ€Π°ΡΠΊΡ€Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ ΡƒΠ·Π΅Π», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ для ΠΎΠ±Ρ…ΠΎΠ΄Π° всСх Π΅Π³ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠ² (Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… ΠΏΠ°ΠΏΠΎΠΊ ΡƒΠ·Π»Π°) ΠΈ Π±Π»Π°Π³ΠΎΠ΄Π°Ρ€Ρ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ для этих ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠ² свои Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ ΠΏΠ°ΠΏΠΊΠΈ. ΠŸΡ€ΠΈ ΠΎΠ±Ρ…ΠΎΠ΄Π΅ для этих Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… ΠΏΠ°ΠΏΠΎΠΊ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΡƒΠ·Π»Ρ‹. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π² Ρ†Π΅Π»ΠΎΠΌ функция ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° для добавлСния Π² Π΄Π΅Ρ€Π΅Π²ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠ² ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠ² (Π²Π½ΡƒΠΊΠΎΠ²) раскрываСмых ΡƒΠ·Π»ΠΎΠ². Π­Ρ‚ΠΎ позволяСт воврСмя Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΡƒΠ·Π»Ρ‹, Ρ‚Π΅ΠΌ самым, скрывая Π½Π΅ΠΏΠΎΠ»Π½ΠΎΡ‚Ρƒ Π΄Π΅Ρ€Π΅Π²Π°. ΠΠ΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ наличия ΠΏΡ€ΠΈ раскрытии ΡƒΠ·Π»Π° ΠΈΠΌΠ΅Π½Π½ΠΎ Π²Π½ΡƒΠΊΠΎΠ², Π° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π΅Ρ‚Π΅ΠΉ связана с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π² Ρ€Π°ΡΠΊΡ€Ρ‹Ρ‚ΠΎΠΉ Π²Π΅Ρ‚Π²ΠΈ, составлСнной ΠΈΠ· Π΄Π΅Ρ‚Π΅ΠΉ, ΡƒΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ³ΠΎ продолТСния раскрытия.

Ѐункция DeleteChild выполняСт ΠΎΠ±Ρ€Π°Ρ‚Π½ΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ — удаляСт Π²Π½ΡƒΠΊΠΎΠ² сворачиваСмого ΡƒΠ·Π»Π°, Ρ‚Π΅ΠΌ самым прСдостСрСгаСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π΄Π²ΡƒΠΊΡ€Π°Ρ‚Π½ΠΎΠ³ΠΎ дополнСния ΡƒΠ·Π»Π° Π² Π΄Π΅Ρ€Π΅Π²ΠΎ.

Из ΡΡ‚ΠΈΡ… ΠΏΡ€Π°Π²ΠΈΠ» Π΅ΡΡ‚ΡŒ ΠΎΠ΄Π½ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ — ситуация, ΠΊΠΎΠ³Π΄Π° срСди ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠ² сворачиваСмого ΡƒΠ·Π»Π° Π΅ΡΡ‚ΡŒ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚Ρ‹Π΅ Π²Π΅Ρ‚Π²ΠΈ. Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ Π²Π½ΡƒΠΊΠΎΠ² Π² ΡΡ‚ΠΎΠΌ случаС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΡŽ структуры Π΄Π΅Ρ€Π΅Π²Π° (Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚Ρ‹Π΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ сворачиваСмого ΡƒΠ·Π»Π° ΡƒΠ·Π»Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ свСрнуты). ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Ρ‚Π°ΠΊΠΎΠΉ ситуации осущСствляСт функция CheckExpandedChild — ΠΎΠ½Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ true Π² ΡΠ»ΡƒΡ‡Π°Π΅ наличия хотя Π±Ρ‹ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ° Ρƒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΡƒΠ·Π»Π°.

V. Ѐункция формирования списка Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ²: void ViewFailAndFolderInListView (AnsiString dir).

Π—Π°Π΄Π°Ρ‡Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ проста: вывСсти Π½Π° ΡΠΊΡ€Π°Π½ содСрТаниС ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠΉ ΠΏΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρƒ ΠΏΠ°ΠΏΠΊΠΈ dir. ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ Π΅Π΅ ΠΎΡΡƒΡ‰Π΅ΡΡ‚влСния: очистка списка, поиск Ρ„Π°ΠΉΠ»ΠΎΠ² (ΠΏΠ°ΠΏΠΎΠΊ) Π² ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ функциями FindFirst, FindNext, FindClose, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹ΠΌ Ρ„Π°ΠΉΠ»Π°ΠΌ записСй Π²Ρ‹ΡˆΠ΅ΠΎΠΏΠΈΡΠ°Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ AddItemInListView, сохранСниС Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°, ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ статусной ΠΏΠ°Π½Π΅Π»ΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ.

VI. Ѐункция выполнСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π½Π°Π΄ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ int FileAndFolderOperation (char *frombuf, char *tobuf, unsigned int operation) ΠΈ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ функция формирования строки-списка Ρ„Π°ΠΉΠ»ΠΎΠ² void PrepareBufForOperationInListView (char * &).

Ѐункция FileAndFolderOperation выполняСт ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ — согласно ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΌ Π΄Π°Π½Π½Ρ‹ΠΌ: ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½ΠΎΠΌΡƒ массиву «ΠΎΡ‚ΠΊΡƒΠ΄Π° ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ» frombuf ΠΈ ΠΌΠ°ΡΡΠΈΠ²Ρƒ «ΠΊΡƒΠ΄Π° ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ» tobuf, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠΎΠ΄Ρƒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ заполняСт структуру SHFILEOPSTRUCT ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ Π΅Π΅ Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ API Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ SHFileOperation, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π΅Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ.

Π‘Π°ΠΌΠΎΠΉ слоТной Ρ‡Π°ΡΡ‚ΡŒΡŽ выполнСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π½Π°Π΄ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ являСтся Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ символьной строки frombuf, особСнно для ListView, Ρ‚.ΠΊ. позволяСтся Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ†Π΅Π»ΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΡ‹ Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ ΠΏΠ°ΠΏΠΎΠΊ. Π‘ΡƒΡ„Π΅Ρ€ ΠΆΠ΅ frombuf Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΏΡƒΡ‚ΠΈ ΠΊΠΎ Π²ΡΠ΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ, Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ символом `' ΠΈ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ΡΡ Π΄Π²ΠΎΠΉΠ½Ρ‹ΠΌ символом нуля. ИмСнно для этого Π²Π²Π΅Π΄Π΅Π½Π° ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° PrepareBufForOperationInListView. Π’ Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅ осущСствляСтся Π°Π½Π°Π»ΠΈΠ· Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² ListView ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π±ΡƒΡ„Π΅Ρ€Π° frombuf. Для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ряд Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€: strcat0 ΠΈ finstr. ΠŸΠ΅Ρ€Π²Π°Ρ соСдиняСт Π΄Π²Π΅ строки, оставляя ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ символ нуля, вторая Ρ„ΠΈΠ½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ строку — добавляСт Π² ΠΊΠΎΠ½Ρ†Π΅ Π΄Π²Π° символа Π΄Π²ΠΎΠΉΠ½ΠΎΠ³ΠΎ нуля.

VII. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ обновлСния Π΄Π΅Ρ€Π΅Π²Π°, списка, ΠΌΠ΅Ρ‚ΠΎΠΊ: void UpdateTreeView (bool UpdateAllways), void UpdateListView (bool UpdateAllways), void UpdateLabel (), void UpdateAll (bool UpdateAllways) ΠΈ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ функция void RecursTree (TTreeNode *node, bool UpdateAllways).

ОбновлСниС Π΄Π΅Ρ€Π΅Π²Π° ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ² осущСствляСтся двумя функциями — UpdateTreeView ΠΈ RecursTree. ΠŸΠ΅Ρ€Π²Π°Ρ — бутафорская ΠΈ ΠΎΡΡƒΡ‰Π΅ΡΡ‚вляСт лишь запуск рСкурсивной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ RecursTree. Π•Π΅ ΠΎΡΠ½ΠΎΠ²Π½Π°Ρ Π·Π°Π΄Π°Ρ‡Π° — Π½Π°ΠΉΡ‚ΠΈ Π²Π΅Ρ€ΡˆΠΈΠ½Ρƒ Π΄Π΅Ρ€Π΅Π²Π° ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π΅Π΅ Π² RecursTree.

Ѐункция RecursTree осущСствляСт подсчСт числа ΠΏΠ°ΠΏΠΎΠΊ Π² ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠΉ Π΅Π΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ ΠΈ ΡΡ€Π°Π²Π½ΠΈΠ²Π°Π΅Ρ‚ с Ρ‡ΠΈΡΠ»ΠΎΠΌ Π΄Π΅Ρ‚Π΅ΠΉ, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ ΡƒΠ·Π»Π°. НСсовпадСниС этих ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… запускаСт Ρ†ΠΈΠΊΠ» ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ. Π’ ΡΠ»ΡƒΡ‡Π°Π΅ большСго количСства ΡƒΠ·Π»ΠΎΠ²-ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠ² провСряСтся Π½Π°Π»ΠΈΡ‡ΠΈΠ΅-отсутствиС ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΈΠΌ ΠΏΠ°ΠΏΠΎΠΊ. ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ ΠΏΠ°ΠΏΠΊΠΈ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΡŽ ΡƒΠ·Π»Π°, сопоставлСнного Π΅ΠΉ, ΠΈ Π²ΡΠ΅Ρ… Π΅Π³ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠ². Π’ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ ситуации, ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°ΡŽΡ‚ΡΡ ΠΏΠ°ΠΏΠΊΠΈ, ΠΈ Π²Ρ‹ΡΡΠ½ΡΠ΅Ρ‚ся ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ· ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΈΠΌ ΡƒΠ·Π»ΠΎΠ² Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ. РСкурсивная функция запускаСт сСбя вновь, Ссли Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΡƒΠ·Π΅Π» раскрыт — соотвСтствСнно начинаСтся ΠΎΠ±Ρ…ΠΎΠ΄ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠ² ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠ². ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ раскрытия ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Ρ€Π΅ΠΊΡƒΡ€ΡΠΈΠ²Π½ΠΎΠΌΡƒ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Ρƒ.

ОбновлСниС списка Ρ„Π°ΠΉΠ»ΠΎΠ² Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ ΠΈ Π΄Π°ΠΆΠ΅ ΠΏΡ€ΠΎΡ‰Π΅. ΠžΡ‚ΠΏΠ°Π΄Π°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ использования рСкурсивных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ — ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½. Π’ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ UpdateListView Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ осущСствляСтся сравнСниС количСства ΠΏΠ°ΠΏΠΎΠΊ Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ с ΠΊΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎΠΌ записСй, ΠΈΡ… Π½Π΅ΡΠΎΠΎΡ‚вСтствиС ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Ρ€ΡΠ΄Ρƒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ, описанных Π²Ρ‹ΡˆΠ΅. ДобавляСтся Π΅Ρ‰Π΅ ΠΎΠ΄Π½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°. Π•Π³ΠΎ отсутствиС ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ очистку списка ΠΈ ΡƒΠΊΠ°Π·Π°Π½ΠΈΡ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ пустой ΠΏΠ°ΠΏΠΊΠΈ.

Π’ Π·Π°Π΄Π°Ρ‡Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ UpdateLabel Π²Ρ…ΠΎΠ΄ΠΈΡ‚ просмотр ΠΌΠ΅Ρ‚ΠΎΠΊ всСх ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΎΠ² ΠΈ ΠΏΠ΅Ρ€Π΅Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² дисков Π΄Π΅Ρ€Π΅Π²Π° Π² ΡΠΎΠΎΡ‚вСтствии с Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ.

ОбъСдинСниС всСх Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ обновлСния осущСствляСтся ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ΠΎΠΉ UpdateAll, ΠΏΠΎΠΌΠΈΠΌΠΎ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Π²Ρ‹ΡˆΠ΅ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ обновляСтся ΠΈ ΠΏΠ°Π½Π΅Π»ΡŒ статуса — ΠΏΠ΅Ρ€Π΅ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ элСмСнты списка, пСрСопрСдСляСтся свободноС мСсто Π½Π° Π΄ΠΈΡΠΊΠ΅.

Π’ΠΎ Π²ΡΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ обновлСния пСрСдаСтся Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π±ΡƒΠ»Π΅Π²Π° пСрСмСнная UpdateAllways. Установка этой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² true ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ списка ΠΈ Π΄Π΅Ρ€Π΅Π²Π° Π΄Π°ΠΆΠ΅ Π² Ρ‚ΠΎΠΌ случаС, Ссли количСство записСй совпадаСт с Ρ‡ΠΈΡΠ»ΠΎΠΌ сопоставлСнных элСмСнтов. Π­Ρ‚ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠΈ — число записСй Π½Π΅ ΠΌΠ΅Π½ΡΠ΅Ρ‚ся, Π½ΠΎ ΠΌΠ΅Π½ΡΡŽΡ‚ся ΠΈΡ… ΠΈΠΌΠ΅Π½Π°.

VIII. Ѐункция пСрСимСнования AnsiString RenameFileOrFolder (AnsiString NewName).

Данная функция ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ Π½ΠΎΠ²ΠΎΠ΅ имя для находящСгося Π² Ρ„окусС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. ΠŸΡƒΡ‚Π΅ΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ состояния ListView ΠΈ TreeView ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡ находящСгося Π² Ρ„окусС ΡƒΠ·Π»Π°, опрСдСляСтся Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈ ΠΏΡƒΡ‚ΡŒ ΠΊ Π½Π΅ΠΌΡƒ (ΠΏΠΎ ΡΠ²ΠΎΠΉΡΡ‚Π²Ρƒ Data). Π—Π°Ρ‚Π΅ΠΌ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ массивы «frombuf, исходя ΠΈΠ· Π±Ρ‹Π²ΡˆΠ΅Π³ΠΎ ΠΏΡƒΡ‚ΠΈ, ΠΈ tobuf, ΠΏΠΎ Π½ΠΎΠ²ΠΎΠΌΡƒ ΠΈΠΌΠ΅Π½ΠΈ. ΠžΡΡƒΡ‰Π΅ΡΡ‚Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ пСрСимСнования заканчиваСтся Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΎΠΌ Π»ΠΈΠ±ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ, Π² ΡΠ»ΡƒΡ‡Π°Π΅ Π΅Π΅ ΡƒΠ΄Π°Ρ‡ΠΈ, Π»ΠΈΠ±ΠΎ ΠΏΡ€Π΅ΠΆΠ½Π΅Π³ΠΎ, Ссли ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ ΡƒΠ΄Π°Π»ΠΎΡΡŒ. Π­Ρ‚ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π² Ρ„ункция рСдактирования ΠΈΠΌΠ΅Π½ ΡƒΠ·Π»ΠΎΠ² — ΡƒΠ·Π»Ρƒ назначаСтся ΠΈΠΌΠ΅Π½ΠΈ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½Π½ΠΎΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ.

IX. Ѐункция удалСния void DeleteFileOrFolder ().

Π Π°Π±ΠΎΡ‚Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ довольно проста — Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ· ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΎΠ² Π² Ρ„окусС (ListView ΠΈΠ»ΠΈ TreeView), Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ массив frombuf путями, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ Ρ‚Π°ΠΌ ΡƒΠ·Π»Π°ΠΌ (согласно свойству ΡƒΠ·Π»ΠΎΠ² Data), ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ всС это Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ FileAndFolderOperation с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ — FO_DELETE.

X. Ѐункция создания ΠΏΠ°ΠΏΠΊΠΈ void CreateFol ().

ИдСя построСния Π΄Π°Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‚Π°ΠΊΠΎΠ²Π° — создаСтся ΠΏΠ°ΠΏΠΊΠ° с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ, Π½ΠΎ ΠΏΠΎΡΠ»Π΅ создания фокус Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ пСрСдаСтся записи, ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‰Π΅ΠΉ Π΅Π΅, с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ рСдактирования. Π’Π΅ΠΌ самым ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΅Π΅ ΠΈΠΌΡ Π½Π° Π»ΡŽΠ±ΠΎΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠ΅. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ задСйствуСтся Π²Ρ‹ΡˆΠ΅ΠΎΠΏΠΈΡΠ°Π½Π½Π°Ρ функция пСрСимСнования. Π€ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠ°ΠΏΠΊΠΈ осущСствляСтся ΠΈΠ· ΡΠΎΡ‡Π΅Ρ‚ания «ΠΠΎΠ²Π°Ρ ΠΏΠ°ΠΏΠΊΠ°» ΠΈ Ρ‡ΠΈΡΠ»Π°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ подбираСтся Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ ΠΏΠ°ΠΏΠΊΠ° отсутствовала Π² ΡΠΈΡΡ‚Π΅ΠΌΠ΅.

XI. Π‘Π»ΡƒΠΆΠ΅Π±Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ListView: void ExpandTreeForFile (AnsiString FileName) ΠΈ void OpenFileOrFolder ().

Ѐункция OpenFileOrFolder вызываСтся ΠΏΡ€ΠΈ ΠΊΠ»ΠΈΠΊΠ΅ Π½Π° ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Π΅ списка ListView ΠΈ ΠΎΡΡƒΡ‰Π΅ΡΡ‚вляСт ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ: ΠΏΡ€ΠΈ ΠΊΠ»ΠΈΠΊΠ΅ Π½Π° ΠΏΠ°ΠΏΠΊΠ΅ — ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Π΅Π΅, ΠΏΡ€ΠΈ ΠΊΠ»ΠΈΠΊΠ΅ Π½Π° Ρ„Π°ΠΉΠ»Π΅ — запускаСт Π΅Π³ΠΎ. По Ρ‰Π΅Π»Ρ‡ΠΊΡƒ Π½Π° ΠΏΠ°ΠΏΠΊΠ΅ происходит Π²Ρ‹Π·ΠΎΠ² ViewFailAndFolderInListView с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ ΠΏΡƒΡ‚ΠΈ ΠΊ Π½Π΅ΠΉ для отобраТСния содСрТимого, ΠΏΠΎ Ρ‰Π΅Π»Ρ‡ΠΊΡƒ Π½Π° Ρ„Π°ΠΉΠ»Π΅ прСдпринимаСтся ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ ShellExecute. Если ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° запуска Π½Π΅ΡƒΠ΄Π°Ρ‡Π½Π°, Π½Π° ΡΠΊΡ€Π°Π½ выводится сообщСниС ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ΅, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ GetLastError.

Π’Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ExpandTreeForFile осущСствляСтся лишь ΠΈΠ· ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ OpenFileOrFolder ΠΈ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для раскрытия Π²Π΅Ρ‚Π²Π΅ΠΉ Π΄Π΅Ρ€Π΅Π²Π° Π΄ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΠΏΠ°ΠΏΠΊΠΈ, ΠΏΡ€ΠΈ Π΅Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ. Новая тСкущая ΠΏΠ°ΠΏΠΊΠ° пСрСдаСтся Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°, Π³Π΄Π΅ этот ΠΏΡƒΡ‚ΡŒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ разбиваСтся Π½Π° Ρ‡Π°ΡΡ‚ΠΈ ΠΈ ΡΠΎΠΏΠΎΡΡ‚авляСтся Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌ ΡƒΠ·Π»Π°ΠΌ Π΄Π΅Ρ€Π΅Π²Π°. ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΎΠΌ свСрху-Π²Π½ΠΈΠ· осущСствляСтся раскрытиС ΡƒΠ·Π»ΠΎΠ², ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ дирСкториям, содСрТащим Π΄Π°Π½Π½ΡƒΡŽ ΠΏΠ°ΠΏΠΊΡƒ, ΠΈ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠΉ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ Π² Π΄Π΅Ρ€Π΅Π²Π΅ TreeView. Π’Π°ΠΊ становится Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠΉ связь ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° ListView с TreeView: ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ Π² ListView ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡŽ выдСлСния Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Π² TreeView.

XII. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π±ΡƒΡ„Π΅Ρ€ΠΎΠΌ: void PasteFileFromClipboard (), void CopyFileToClipboard (bool Copy).

ΠŸΡ€ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ возмоТности Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π±ΡƒΡ„Π΅Ρ€ΠΎΠΌ Π±Ρ‹Π»Π° поставлСна Π·Π°Π΄Π°Ρ‡Π° ΠΏΠΎΠ»Π½ΠΎΠΉ совмСстимости Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² с Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠΌ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΌ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΌΠΈ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π°ΠΌΠΈ Windows, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, «ΠŸΡ€ΠΎΠ²ΠΎΠ΄Π½ΠΈΠΊΠΎΠΌ». Π­Ρ‚ΠΈΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠΌ являСтся CF_HDROP, ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‰ΠΈΠΉ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π² Π±ΡƒΡ„Π΅Ρ€Π΅ указатСля Π½Π° ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρƒ DROPFILES ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ Π·Π° Π½Π΅ΠΉ строку ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ пСрСчислСнных ΠΏΡƒΡ‚Π΅ΠΉ ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ, ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½Π½Ρ‹ΠΌ Π² Π±ΡƒΡ„Π΅Ρ€.

Π˜ΡΡ…ΠΎΠ΄Ρ ΠΈΠ· ΡΡ‚ΠΎΠ³ΠΎ, рСализация ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎ Π²ΡΡ‚Π°Π²ΠΊΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΠ· Π±ΡƒΡ„Π΅Ρ€Π° Π±Ρ‹Π»Π° осущСствлСна Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ порядкС: ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Π±ΡƒΡ„Π΅Ρ€Π° OpenClipboard, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° наличия Π² Π±ΡƒΡ„Π΅Ρ€Π΅ Π΄Π°Π½Π½Ρ‹Ρ… Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ IsClipboardFormatAvailable; ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ указатСля Π½Π° Π΄Π°Π½Π½Ρ‹Π΅ GetClipboardData ΠΈ, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈΡ… ΠΊΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²Π° ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ строк API Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ DragQueryFile. На ΠΎΡΠ½ΠΎΠ²Π°Π½ΠΈΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… строк формируСтся массив frombuf ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹ΠΉ Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ.

Π•Ρ‰Π΅ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ стало ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Π½Π΅ΠΎΠ±Ρ…одимости копирования, Π»ΠΈΠ±ΠΎ пСрСмСщСния Ρ„Π°ΠΉΠ»Π°. Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚ΠΎΠΌ являСтся ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ указатСля ΠΈΠ· Π±ΡƒΡ„Π΅Ρ€Π° ΠΏΠΎ Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΌΡƒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρƒ CFSTR_PREFERREDDROPEFFECT. Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ содСрТит адрСс Π² ΠΏΠ°ΠΌΡΡ‚ΠΈ, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ находится Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Π±Π°ΠΉΡ‚Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Ρ‚ΠΈΠΏΠ΅ пСрСмСщСния/копирования. Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ΠΌ этих Π΄Π°Π½Π½Ρ‹Ρ… с ΠΊΠΎΠ½ΡΡ‚Π°Π½Ρ‚Π°ΠΌΠΈ ΠΈ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ FileAndFolderOperation ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ся вставка Ρ„Π°ΠΉΠ»ΠΎΠ² (ΠΏΠ°ΠΏΠΎΠΊ) ΠΈΠ· Π±ΡƒΡ„Π΅Ρ€Π°. Π—Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Π±ΡƒΡ„Π΅Ρ€Π° ΠΏΠΎ ΠΎΠΊΠΎΠ½Ρ‡Π°Π½ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ доступ ΠΊ Π½Π΅ΠΌΡƒ для Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ.

Ѐункция void CopyFileToClipboard (bool Copy) ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Π°Ρ ΠΈ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π΅ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° осущСствляСт Π»ΠΈΠ±ΠΎ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, Π»ΠΈΠ±ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° Π² Π±ΡƒΡ„Π΅Ρ€ (Ρ‚ΠΎΡ‡Π½Π΅Π΅, лишь ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅). Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ Π°Π½Π°Π»ΠΈΠ·Π° ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° являСтся Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ памяти ΠΏΠΎΠ΄ Π΄Π²ΠΎΠΉΠ½ΠΎΠ΅ слово ΠΈ ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Π² Π½Π΅Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ константы DROPEFFECT_COPY ΠΈΠ»ΠΈ DROPEFFECT_MOVE. ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… Ρ„Π°ΠΉΠ»Π°Ρ… осущСствляСтся ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ структуры DROPFILES, построСниСм Π±ΡƒΡ„Π΅Ρ€Π° frombuf ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΡ этих Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ. ПослС открываСтся Π±ΡƒΡ„Π΅Ρ€, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ SetClipboardData Π² Π±ΡƒΡ„Π΅Ρ€Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ Ρ„Π°Π»Π°Ρ… ΠΈ Ρ‚ΠΈΠΏΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, Π±ΡƒΡ„Π΅Ρ€ закрываСтся — Π΄Π°Π½Π½Ρ‹Π΅ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ ΠΊ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ (ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΡŽ).

3.ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ΡΠΊΠ°Ρ Ρ‡Π°ΡΡ‚ΡŒ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ систСма ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ

I. TreeView1: TTreeView

Π”Π°Π½Π½Ρ‹ΠΉ Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ Π΄Π΅Ρ€Π΅Π²ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ² ΠΈ Π½Π°ΡΡ‚раиваСтся динамичСски Π² ΠΏΡ€ΠΎΡ†Π΅ΡΡΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡƒΡ‚Π΅ΠΌ добавлСния/удалСния ΡƒΠ·Π»ΠΎΠ². ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ события, ΡƒΡ‡Π°ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π² Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π΄Π΅Ρ€Π΅Π²Π° — OnExpanded ΠΈ OnCollapsing, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰ΠΈΠ΅ соотвСтствСнно ΠΏΡ€ΠΈ раскрытии ΠΈ ΡΠ²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΡƒΠ·Π»Π°. По ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ ΡΠΎΠ±Ρ‹Ρ‚ΠΈΡŽ осущСствляСтся ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Π² Π΄Π΅Ρ€Π΅Π²ΠΎ Π²Π½ΡƒΠΊΠΎΠ² раскрываСмого ΡƒΠ·Π»Π° посрСдством Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ViewChild, ΠΏΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΌΡƒ — ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π²Π½ΡƒΠΊΠΎΠ² сворачиваСмого ΡƒΠ·Π»Π° ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ΠΎΠΉ DeleteChild. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ скрыт ΠΎΡ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎΠ± ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ структуры Π΄Π΅Ρ€Π΅Π²Π°.

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ события OnClick обСспСчиваСт Ρ€Π΅Π°ΠΊΡ†ΠΈΡŽ Π½Π° Ρ‰Π΅Π»Ρ‡ΠΎΠΊ Π½Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ°ΠΏΠΊΠΈ. Π—Π°Π΄Π°Ρ‡Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° — Π²Ρ‹Π·ΠΎΠ² ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ пСрСрисовки списка Ρ„Π°ΠΉΠ»ΠΎΠ² Π² ΡΠΎΠΎΡ‚вСтствии с ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ²ΡˆΠ΅ΠΌΡΡ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠΌ.

Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° элСмСнтов Π΄Π΅Ρ€Π΅Π²Π°, осущСствляСтся стандартным способом: ΠΏΡƒΡ‚Π΅ΠΌ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ условия сравнСния Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ события OnCompare.

II. ListView1: TListView

Π’ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠΌΠΈΡ‚ΠΈΡ€ΡƒΠ΅Ρ‚ список Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ² ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅Ρ‚ свою структуру всякий Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° мСняСтся тСкущая дирСктория. ОсновноС событиС, ΡƒΡ‡Π°ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ Π² Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ — OnDoubleClick. Оно Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΏΡ€ΠΈ Π΄Π²ΠΎΠΉΠ½ΠΎΠΌ Ρ‰Π΅Π»Ρ‡ΠΊΠ΅ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· ΠΏΡƒΠ½ΠΊΡ‚ΠΎΠ² списка, ΠΈ Π² ΡΠ»ΡƒΡ‡Π°Π΅ Ссли ΠΈΠΌ ΡΠ²Π»ΡΠ΅Ρ‚ся ΠΏΠ°ΠΏΠΊΠ°, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ измСняСт Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ функция пСрСформирования элСмСнтов ListView.

Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ TreeView осущСствляСтся вписываниСм Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ условия ΠΏΠΎ ΡΠΎΠ±Ρ‹Ρ‚ΠΈΡŽ OnCompare. А Π²ΠΎΡ‚ само условиС сравнСниС ΠΌΠΎΠΆΠ΅Ρ‚ ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΈ Π·Π°Π²ΠΈΡΠΈΡ‚ ΠΎΡ‚ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ColumnToSort ΠΈ Direct. ИзмСнСниС ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ сортировки ΠΈ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ ΠΈΠ· ΠΌΠ΅Π½ΡŽ, Π½ΠΎ Ρ‡Π°Ρ‰Π΅ ΠΏΡƒΡ‚Π΅ΠΌ ΠΊΠ»ΠΈΠΊΠ° Π½Π° Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ столбца. Для этой ситуации ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ события — OnColumnClick. Π˜Π·Π²Π»Π΅ΠΊΠ°ΡŽΡ‰ΠΈΠΉ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ Π½ΠΎΠ²ΠΎΠΌ сортируСмом столбцС ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ пСрСсортировки списка — AlphaSort.

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

III. StatusBar1: TStatusBar

Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ слуТит для Π²Ρ‹Π²ΠΎΠ΄Π° справочной ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, Π²Ρ‹Π²ΠΎΠ΄ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ осущСствляСтся Π² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… функциях: ViewFailAndFolderInListView ΠΈ UpdateAll.

IV. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ управлСния MainMenu1: TMainMenu, ControlBar1: TControlBar ΠΈ PopupMenu1: TPopupMenu.

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ управлСния содСрТат схоТиС Π³Ρ€ΡƒΠΏΠΏΡ‹ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π²Π»ΠΈΡΡ‚ΡŒ Π½Π° Ρ€Π°Π±ΠΎΡ‚Ρƒ прилоТСния.

Π Π°Π±ΠΎΡ‚Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° MainMenu организуСтся ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΉ Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡƒΠ½ΠΊΡ‚Ρ‹ мСню, ΠΊΠ°ΠΊ-Ρ‚ΠΎ «Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΠ°ΠΏΠΊΡƒ», «Π£Π΄Π°Π»ΠΈΡ‚ΡŒ», «ΠŸΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Ρ‚ΡŒ» ΠΈ Ρ‚. Π΄. ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΉ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, содСрТат лишь Π²Ρ‹Π·ΠΎΠ² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€. ControlBar1 ΠΈ PopupMenu1 Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ Π΄ΡƒΠ±Π»ΠΈΡ€ΡƒΡŽΡ‚ ΠΏΡƒΠ½ΠΊΡ‚Ρ‹ мСню ΠΈ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ. Они Π²Π²Π΅Π΄Π΅Π½Ρ‹ для удобства ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈ Π±ΠΎΠ»Π΅Π΅ быстрому доступу ΠΊ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌ.

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

3.1 Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ возмоТности

3.1.1ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅/ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ пСрСтаскиваниСм

ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅/ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ осущСствляСтся пСрСтаскиваниСм ΠΌΠ΅ΠΆΠ΄Ρƒ двумя ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ ListView ΠΈ TreeView. Для осущСствлСния Ρ‚Π°ΠΊΠΎΠΉ возмоТности ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ 3 события Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ· ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²: OnMouseDown, OnDragOver ΠΈ OnDragDrop (расставлСны Π² ΠΏΠΎΡ€ΡΠ΄ΠΊΠ΅ использования). ΠŸΠ΅Ρ€Π²ΠΎΠ΅ ΠΈΠ· Π½ΠΈΡ… Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ процСсс пСрСтаскивания, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ: провСряСт Π½Π°ΠΆΠ°Ρ‚Π° Π»ΠΈ лСвая клавиша Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅, осущСствляСт распознаваниС Ρ‚ΠΈΠΏΠ° пСрСтаскивания (ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅/пСрСмСщСния) ΠΏΡƒΡ‚Π΅ΠΌ Π°Π½Π°Π»ΠΈΠ·Π° наТатия клавиши CTRL, Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ пСрСтаскиваниС ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ BeginDrag.

Π‘ΠΎΠ±Ρ‹Ρ‚ΠΈΠ΅ OnDragOver Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠΈ пСрСтаскиваСмого элСмСнта ΠΏΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ. Π—Π΄Π΅ΡΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ получСния элСмСнта, ΠΏΡƒΡ‚Π΅ΠΌ Π°Π½Π°Π»ΠΈΠ·Π° источника ΠΈ ΠΌΠ΅ΡΡ‚Π° помСщСния Π² ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊΠ΅.

НаступлСниС события OnDragDrop ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΎΠΊΠΎΠ½Ρ‡Π°Π½ΠΈΠ΅ пСрСтаскивания. Π’ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ΅ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½Π½Ρ‹ΠΉ элСмСнт ΠΈ ΠΌΠ΅ΡΡ‚ΠΎ Π΅Π³ΠΎ опускания. Π’ ΡΠΎΠΎΡ‚вСтствии с ΡΡ‚ΠΈΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ, сохранСнной Π² Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ OnMouseDown, осущСствляСтся Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π±ΡƒΡ„Π΅Ρ€ΠΎΠ² frombuf ΠΈ tobuf ΠΈ Π²Ρ‹Π·ΠΎΠ² FileAndFolderOperation с ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ.

3.1.2 Π Π°Π±ΠΎΡ‚Π° с Π΄ΠΈΡΠΊΠ΅Ρ‚Π°ΠΌΠΈ ΠΈ Π΄ΠΈΡΠΊΠ°ΠΌΠΈ

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

3.1.3 Бвойства Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΏΠ°ΠΏΠΎΠΊ ΠΈ Π΄ΠΈΡΠΊΠΎΠ²

Π’Π°ΠΆΠ½ΠΎΠΉ Ρ‡Π°ΡΡ‚ΡŒΡŽ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π° ΡΠ²Π»ΡΡŽΡ‚ΡΡ срСдства отобраТСния свойств Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы. РСализация этих срСдств Π±Ρ‹Π»Π° свСдСна ΠΊ ΡΠΎΠ·Π΄Π°Π½ΠΈΡŽ Π΄Π²ΡƒΡ… Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ„ΠΎΡ€ΠΌ FPropertyFile ΠΈ FPropertyDrive, заполняСмых Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π² ΠΏΡ€ΠΎΡ†Π΅ΡΡΠ΅ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ свойств посрСдством API Windows. Π Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΠΎΡ€ΠΌ Π±Ρ‹Π»ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΎ ΠΈΠ·-Π·Π° сущСствСнного различия Ρ‚ΠΈΠΏΠ° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π² ΡΠ²ΠΎΠΉΡΡ‚Π²Π°Ρ… дисков ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ².

ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Ρ„ΠΎΡ€ΠΌΡ‹ FPropertyFile осущСствляСтся Π² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Prepare, ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‰Π΅ΠΉ Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΏΡƒΡ‚ΡŒ ΠΊ Ρ„Π°ΠΉΠ»Ρƒ. НиТС пСрСчислСны основныС ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΡ‹Π΅ свойства ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈΡ… ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΡ: ΠΈΠΊΠΎΠ½ΠΊΠ° Ρ„Π°ΠΉΠ»Π°/ΠΏΠ°ΠΏΠΊΠΈ, Ρ‚ΠΈΠΏ Ρ„Π°ΠΉΠ»Π° (функция SHGetFileInfo); имя Ρ„Π°ΠΉΠ»Π°/ΠΏΠ°ΠΏΠΊΠΈ (функция ExtractFileName); ΠΏΠ°ΠΏΠΊΠΈ (ExtractFilePath); Ρ€Π°Π·ΠΌΠ΅Ρ€Π° (функция GetFileAttributesEx), Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π½Π° Π΄ΠΈΡΠΊΠ΅ (Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ GetFileAttributesEx ΠΈ GetDiskFreeSpace для получСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π΅ кластСра/сСктора); Π΄Π°Ρ‚Ρ‹ создания, измСнСния, открытия (Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ GetFileAttributesEx ΠΈ FileTimeToLocalFileTime, FileTimeToSystemTime ΠΈ SystemTimeToDateTime для прСобразования Π΄Π°Ρ‚Ρ‹ ΠΊ ΡƒΠ΄ΠΎΠ±Π½ΠΎΠΌΡƒ Π²ΠΈΠ΄Ρƒ); свойства Ρ„Π°ΠΉΠ»Π°/ΠΏΠ°ΠΏΠΊΠΈ (функция GetFileAttributesEx). Для опрСдСлСния Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΏΠ°ΠΏΠΊΠΈ ΠΈ ΠΊΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²Π°, содСрТащихся Π² Π½Π΅ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ рСкурсивная функция Get_Size_Folder, обходящая всю ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ структуру Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ, подсчитывая ΠΈ ΡΡƒΠΌΠΌΠΈΡ€ΡƒΡ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½Ρ‹Ρ… ΠΈΠΌΠ΅Π½ΠΈ ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² осущСствляСтся Π² ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅ Set_Change.

Аналогично FPropertyFile Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»Π΅ΠΉ Ρ„ΠΎΡ€ΠΌΡ‹ FPropertyDrive производится Π² ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅ Prepare. Бвойства, ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΡ‹Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ элСмСнтов Ρ„ΠΎΡ€ΠΌΡ‹, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅: ΠΈΠΊΠΎΠ½ΠΊΠ° (ΠΏΠΎ Ρ‚ΠΈΠΏΡƒ диска Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ GetDriveType); ΠΌΠ΅Ρ‚ΠΊΠ° диска ΠΈ Ρ‚ΠΈΠΏ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы (функция GetVolumeInformation); количСство занятого ΠΈ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎΠ³ΠΎ мСста (функция GetDiskFreeSpaceEx). ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ занятоС/свободноС мСсто отобраТаСтся Π² Π²ΠΈΠ΄Π΅ ΠΊΡ€ΡƒΠ³ΠΎΠ²ΠΎΠΉ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹ — ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса TChart. ЕдинствСнным свойством ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ являСтся ΠΌΠ΅Ρ‚ΠΊΠ° диска. ИмСнно ΠΎΠ½Π° измСняСтся ΠΏΠΎ Π½Π°ΠΆΠ°Ρ‚ΠΈΡŽ Π½Π° ΠΊΠ»Π°Π²ΠΈΡˆΠΈ OK ΠΈΠ»ΠΈ «ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ».

Π’Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ отобраТСния ΠΈ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ Ρ„ΠΎΡ€ΠΌ осущСствляСтся ΠΈΠ· ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ ViewProperty. ЕдинствСнная Π·Π°Π΄Π°Ρ‡Π° этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ — ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊΡƒΡŽ ΠΈΠ· Ρ„ΠΎΡ€ΠΌ слСдуСт ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ. Π­Ρ‚Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ ΠΏΡƒΡ‚Π΅ΠΌ сравнСния ΠΏΡƒΡ‚ΠΈ ΠΊ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΠΎΠΉ ΠΏΠ°ΠΏΠΊΠ΅ с ΠΏΡƒΡ‚Π΅ΠΌ ΠΊ ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΌΡƒ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Ρƒ диска.

4. ВСхничСская докумСнтация

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ установки. Для Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρ‹ слСдуСт Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ FileManager.exe. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ рСкомСндуСтся для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмой ΠΈ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ. Π€Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ позволяСт Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ частыС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π°Π΄ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ — созданиС, ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅/ΠΏΡ€ΠΎΠΈΠ³Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅/просмотр, Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅, ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² ΠΈ ΡΠ²ΠΎΠΉΡΡ‚Π², поиск Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€Π°Π².

5. Π­ΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ

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

ΠŸΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΠΈ «Π£Π΄Π°Π»ΠΈΡ‚ΡŒ» ΠΈ «Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ» ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Π½Π° ΡΠΊΡ€Π°Π½ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²Ρ‹Π΅ ΠΎΠΊΠ½Π°, Π³Π΄Π΅ Ρ‚Π°ΠΊ ΠΆΠ΅ Π΅ΡΡ‚ΡŒ прСдусмотрСнныС дСйствия ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ Π½Π° ΡΡ‚ΠΈΡ… Ρ„ΠΎΡ€ΠΌΠ°Ρ….

ПослС выполнСния ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ дСйствия, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° возвращаСтся Π² Ρ€Π΅ΠΆΠΈΠΌ оТидания ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… дСйствий.

Для Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π€Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΌ ΠœΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ΠΎΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ достаточно Π½Π°ΠΆΠ°Ρ‚ΡŒ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ «Π—Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ» систСмного мСню, Π½Π°Ρ…ΠΎΠ΄ΡΡ‰ΡƒΡŽΡΡ Π² ΠΏΡ€Π°Π²ΠΎΠΌ Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ ΡƒΠ³Π»Ρƒ ΠΎΠΊΠ½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Π’Ρ‹Π²ΠΎΠ΄Ρ‹ Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ Π΄Π°Π½Π½ΠΎΠΉ курсовой Ρ€Π°Π±ΠΎΡ‚Ρ‹ являСтся ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° прСдставляСт собой Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ для выполнСния этой Π·Π°Π΄Π°Ρ‡ΠΈ.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π·Π²ΠΈΡ‚Ρ‹ΠΉ интСрфСйс ΠΈ Π΄Π²ΡƒΠΏΠ°Π½Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π²ΠΈΠ΄ — Π² ΠΎΠ±Ρ‰Π΅ΠΌ случаС ΠΈΠΌΠ΅ΡŽΡ‚ Π΄Π²Π΅ Ρ€Π°Π²Π½ΠΎΡ†Π΅Π½Π½Ρ‹Ρ… ΠΏΠ°Π½Π΅Π»ΠΈ для списка Ρ„Π°ΠΉΠ»ΠΎΠ², Π° Π² Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ΄Π½ΠΎΠΏΠ°Π½Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π²ΠΈΠ΄. Π’ Π΄Π°Π½Π½ΠΎΠΉ курсовой Ρ€Π°Π±ΠΎΡ‚Π΅ это Π½Π΅ Π±Ρ‹Π»ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ.

Бписок ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹

1. ΠžΠ±Ρ‰Π°Ρ информация

http://yandex.ru/

http://www.google.ru/

http://ru.wikipedia.org/

2. Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΎ ΡΠ·Ρ‹ΠΊΠ΅ программирования

http://www.itkursi.ru/

ΠŸΠ°ΡƒΡΡ€Ρ Π›., Π‘Π½Π΅Π»Π» М. Microsoft Visual Studio 2008 => Microsoft Visual Studio 2008 Unleashed by Lars Powers and Mike Snell.

3. Алгоритмы ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

http://program.rin.ru/

http://www.progz.ru/

Листинги

1.1. Листинг Unit1. h

enum {ImageWindows, ImageFloppy, ImageDrive, ImageCD, ImageMyComp, ImageCloseFolder, ImageOpenFolder};

void strcat0(char * &dest, char *source); //Π‘ΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ строк с ΠΎΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Π½ΡƒΠ»Π΅Π²ΠΎΠ³ΠΎ символа

void finstr (char *dest);

unsigned int lengthfinstr (char *dest);

struct DROPFILES {

DWORD pFiles; // offset of file list

POINT pt; // drop point (client coords)

BOOL fNC; // is it on NonClient area

// and pt is in screen coords

BOOL fWide; // WIDE character switch

};

class TForm1: public TForm

{

__published: // IDE-managed Components

TMainMenu *MainMenu1;

TMenuItem *NFile;

TTreeView *TreeView1;

TSplitter *Splitter1;

TListView *ListView1;

TImageList *ImageList1;

TImageList *ImageList2;

TMenuItem *NProperty;

TImageList *ImageList3;

TImageList *ImageList4;

TControlBar *ControlBar1;

TToolBar *TBMain;

void __fastcall TreeView1Expanding (TObject *Sender,

TTreeNode *Node, bool &AllowExpansion);

void __fastcall TreeView1Compare (TObject *Sender, TTreeNode *Node1,

TTreeNode *Node2, int Data, int &Compare);

void __fastcall TreeView1Expanded (TObject *Sender,

TTreeNode *Node);

void __fastcall TreeView1Collapsing (TObject *Sender,

TTreeNode *Node, bool &AllowCollapse);

void __fastcall TreeView1Editing (TObject *Sender, TTreeNode *Node,

bool &AllowEdit);

void __fastcall ListView1Compare (TObject *Sender, TListItem *Item1,

TListItem *Item2, int Data, int &Compare);

void __fastcall ListView1DblClick (TObject *Sender);

void __fastcall ListView1MouseDown (TObject *Sender,

TMouseButton Button, TShiftState Shift, int X, int Y);

void __fastcall TreeView1DragOver (TObject *Sender, TObject *Source,

int X, int Y, TDragState State, bool &Accept);

void __fastcall TreeView1DragDrop (TObject *Sender, TObject *Source,

int X, int Y);

void __fastcall TreeView1MouseDown (TObject *Sender,

TMouseButton Button, TShiftState Shift, int X, int Y);

void __fastcall NPropertyClick (TObject *Sender);

void __fastcall NOpenClick (TObject *Sender);

void __fastcall NExitClick (TObject *Sender);

void __fastcall NDeleteClick (TObject *Sender);

void __fastcall TBDeleteClick (TObject *Sender);

void __fastcall TBPropertyClick (TObject *Sender);

void __fastcall TBExitClick (TObject *Sender);

void __fastcall NViewClick (TObject *Sender);

void __fastcall NPanelClick (TObject *Sender);

void __fastcall NStatusBarClick (TObject *Sender);

void __fastcall TBUpClick (TObject *Sender);

void __fastcall TreeView1Edited (TObject *Sender, TTreeNode *Node,

AnsiString &S);

void __fastcall ListView1Edited (TObject *Sender, TListItem *Item,

AnsiString &S);

void __fastcall NRenameClick (TObject *Sender);

void __fastcall TBRenameClick (TObject *Sender);

void __fastcall NIconClick (TObject *Sender);

void __fastcall NSmallIconClick (TObject *Sender);

void __fastcall NListClick (TObject *Sender);

void __fastcall NReportClick (TObject *Sender);

void __fastcall ListView1DragOver (TObject *Sender, TObject *Source,

int X, int Y, TDragState State, bool &Accept);

void __fastcall ListView1DragDrop (TObject *Sender, TObject *Source,

int X, int Y);

void __fastcall TBUpdateClick (TObject *Sender);

void __fastcall TreeView1Click (TObject *Sender);

void __fastcall TBPasteClick (TObject *Sender);

void __fastcall TBCopyClick (TObject *Sender);

void __fastcall TBCutClick (TObject *Sender);

void __fastcall NUpdateClick (TObject *Sender);

void __fastcall NCutClick (TObject *Sender);

void __fastcall NPasteClick (TObject *Sender);

void __fastcall NCopyClick (TObject *Sender);

void __fastcall NSelectAllClick (TObject *Sender);

void __fastcall ListView1ColumnClick (TObject *Sender,

TListColumn *Column);

void __fastcall NSort0Click (TObject *Sender);

void __fastcall NCreateFolderClick (TObject *Sender);

void __fastcall NFileClick (TObject *Sender);

void __fastcall NEditClick (TObject *Sender);

void __fastcall ListView1ContextPopup (TObject *Sender,

TPoint &MousePos, bool &Handled);

void __fastcall TreeView1ContextPopup (TObject *Sender,

TPoint &MousePos, bool &Handled);

private: // User declarations

public: // User declarations

__fastcall TForm1(TComponent* Owner);

void ShowDrives ();

void ViewChild (TTreeNode *child);

void DeleteChild (TTreeNode *Node);

void ViewFailAndFolderInListView (AnsiString dir);

void ExpandTreeForFile (AnsiString FileName);

int FileAndFolderOperation (char *frombuf, char *tobuf, unsigned int operation);

TTreeNode* AddChildInNodeTree (TTreeNode *Node, AnsiString Dir);

TListItem *AddItemInListView (TSearchRec sr, AnsiString dir);

void ViewProperty ();

void OpenFileOrFolder (); //ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Π² Listview Ρ„Π°ΠΉΠ» ΠΈΠ»ΠΈ ΠΏΠ°ΠΏΠΊΡƒ

void DeleteFileOrFolder ();

void PrepareBufForOperationInListView (char * &frombuf);

AnsiString RenameFileOrFolder (AnsiString);

void RecursTree (TTreeNode *node, bool); //РСкурсивноС ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π΄Π΅Ρ€Π΅Π²Π°

void UpdateTreeView (bool); //Ѐункция запуска рСкурсивного обновлСния Π΄Π΅Ρ€Π΅Π²Π°

void UpdateListView (bool); //Ѐункция обновлСния listview

void UpdateAll (bool);

void PasteFileFromClipboard (); //Π’ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΈΠ· Π±ΡƒΡ„Π΅Ρ€Π°

void CopyFileToClipboard (bool); //ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ Π² Π±ΡƒΡ„Π΅Ρ€

void CreateFol ();

void UpdateLabel ();

} ;

//—————————————————————————————————————;

extern PACKAGE TForm1 *Form1;

//—————————————————————————————————————;

#endif

1.2. Листинг Unit1. cpp

//—————————————————————————————————————;

#include

#pragma hdrstop

#include

#include «Unit1.h»

#include

#include

#include «PropertyFile.h»

#include «PropertyDrive.h»

#include

#define CFSTR_PREFERREDDROPEFFECT TEXT («Preferred DropEffect»)

using namespace std;

vector set_drive_num; //Π’Π΅ΠΊΡ‚ΠΎΡ€ с Π½ΠΎΠΌΠ΅Ρ€Π°ΠΌΠΈ установлСнных дисков

TTreeNode *head, *tpItem; //Π“ΠΎΠ»ΠΎΠ²Π° ΠΈ Ρ‚Смповая пСрСмСнная

//ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΡ‹ΠΉ

//ΡƒΠ·Π΅Π» для отсутствия скачков

unsigned int type_file_operation_drag_drop;

//Π’ΠΈΠΏ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΈ drag drop

AnsiString CurrentDir=""; //Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³

TViewStyle StyleListView=vsReport;

Set DiskIn;

bool DragnDrop=true; //Π€Π»Π°Π³ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ пСрСтаскивания

int ColumnToSort=0; //НомСр ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΡΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚

int Direct=1; //НаправлСниС соритировки

//—————————————————————————————————————;

#pragma package (smart_init)

#pragma resource «*.dfm»

TForm1 *Form1;

//—————————————————————————————————————;

void FirstUpOtherDown (char *str) //ΠžΠΏΡƒΡΠΊΠ°Π΅Ρ‚ всС Π±ΡƒΠΊΠ²Ρ‹ ΠΊΡ€ΠΎΠΌΠ΅ ΠΏΠ΅Ρ€Π²ΠΎΠΉ

(str[0]>223 && str[0]<255))

str[0]-=32;

for (int i=1;str[i]≠'';i++)

if ((str[i]>64 && str[i]<91)

void FirstUpOtherDown (AnsiString &str)

(str[1]>223 && str[1]<255))

str[1]-=32;

for (int i=2;i<=str.Length ();i++)

if ((str[i]>64 && str[i]<91)

void GetDrives () //ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ установлСнныС диски

{ //ΠΈ сохраняСт ΠΈΡ… Π½ΠΎΠΌΠ΅Ρ€Π° Π² set_drive_num

unsigned int set_drive=GetLogicalDrives ();

for (int i=0;set_drive≠0;i++)

{

if (set_drive%2) set_drive_num.push_back (i);

set_drive>>=1;

}

}

void TForm1: ShowDrives () //ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ диски Π² Π΄Π΅Ρ€Π΅Π²Π΅

{

char str[10];

char inf[20];

for (unsigned int i=0;i

{

TTreeNode *temp; //Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΡƒΠ·Π»Π°

str[0]=(char)('A'+set_drive_num[i]);

str[1]='';

strcat (str," :");

if (set_drive_num[i]≠0 && set_drive_num[i]≠1) //Π—Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ поля

{

if (!GetVolumeInformation (str, inf, 20, NULL, NULL, NULL, NULL, NULL)) //ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΊΠΈ Ρ‚ΠΎΠΌΠ°

strcpy (inf," «);

}

else

{

strcpy (inf," «);

}

FirstUpOtherDown (inf);

AnsiString *p=new AnsiString (str);

temp=TreeView1->Items->AddChildObject (head, AnsiString (inf)+" («+(char)('A'+set_drive_num[i])+» :)", p);

switch (unsigned int p=GetDriveType (str)) //Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° image

{

case DRIVE_REMOVABLE:

temp->SelectedIndex=ImageFloppy;

temp->ImageIndex=ImageFloppy;

break;

case DRIVE_FIXED:

case DRIVE_RAMDISK:

temp->SelectedIndex=ImageDrive;

temp->ImageIndex=ImageDrive;

break;

case DRIVE_CDROM:

temp->SelectedIndex=ImageCD;

temp->ImageIndex=ImageCD;

break;

default:

temp->SelectedIndex=ImageWindows;

temp->ImageIndex=ImageWindows;

break;

}

}

}

TTreeNode* TForm1: AddChildInNodeTree (TTreeNode *Node, AnsiString Dir)

{

AnsiString temp=Dir;

AnsiString Name=ExtractFileName (temp.SetLength (temp.Length ()-1));

FirstUpOtherDown (Name);

AnsiString *p=new AnsiString (Dir); //ДобавляСм Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΌΠΎΠΊ ΠΊ treeview

TTreeNode *t=TreeView1->Items->AddChildObject (Node, Name, p);

t->ImageIndex=ImageCloseFolder;

t->SelectedIndex=ImageOpenFolder;

return t; //Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π½Π΅Π³ΠΎ

}

void TForm1: ViewChild (TTreeNode *Node) //ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π΄Π΅Ρ‚Π΅ΠΉ ΡƒΠ·Π»Π° Π² treeview

{

//ΠŸΠ΅Ρ€Π΅Π±ΠΎΡ€ Π΄Π΅Ρ‚Π΅ΠΉ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΠΌΠΎΠ³ΠΎ ΡƒΠ·Π»Π°

TTreeNode *child=Node->getFirstChild ();

TSearchRec sr;

AnsiString dir, name;

do

dir=*((AnsiString *)child->Data);

//ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° диска Π½Π° Π³ΠΈΠ±ΠΊΡƒΡŽ дискСту ΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅ отсутствиС Π΄Π΅Ρ‚Π΅ΠΉ

if ((((GetDriveType (dir.c_str ())==DRIVE_REMOVABLE)

while ((child=Node->GetNextChild (child))≠NULL);

}

void TForm1: DeleteChild (TTreeNode *Node) //Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠ² ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠ² ΡƒΠ·Π»Π° (ΠΈΡ… ΡƒΠΆΠ΅ Π½Π΅ Π²ΠΈΠ΄Π½ΠΎ)

{

TTreeNode *child=Node->getFirstChild ();

TTreeNode *childchild;

do

while ((childchild=child->getFirstChild ())≠NULL)

{

delete childchild->Data;

TreeView1->Items->Delete (childchild);

}

while ((child=Node->GetNextChild (child))≠NULL);

}

bool CheckExpandedChild (TTreeNode *Node) //ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° раскрытия Π²Π΅Ρ‚Π²ΠΈ хотя Π±Ρ‹ ΠΎΠ΄Π½ΠΎΠ³ΠΎ

//ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ°

bool flag=false;

TTreeNode *child;

if ((child=Node->getFirstChild ())≠NULL)

do

flag=flag

int TForm1: FileAndFolderOperation (char *frombuf, char *tobuf, unsigned int operation)

{ //ΠžΡΡƒΡ‰Π΅ΡΡ‚Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π½Π°Π΄ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ — ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅

//ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅, ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅

SHFILEOPSTRUCT OpStruc;

OpStruc.hwnd= Handle;

OpStruc.wFunc= operation;

OpStruc.pFrom= frombuf;

OpStruc.pTo=tobuf;

OpStruc.fFlags=0;

OpStruc.fAnyOperationsAborted= false;

OpStruc.hNameMappings= NULL;

OpStruc.lpszProgressTitle= NULL;

int p=SHFileOperation (&OpStruc);

return p;

}

TListItem *TForm1:AddItemInListView (TSearchRec sr, AnsiString dir)

{ //Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ записи Π² listview ΠΈΠ· sr ΠΈ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° dir

TListItem *p;

AnsiString date;

int size=sr.Size/1024;

p=ListView1->Items->Add (); //Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ элСмСнта

FirstUpOtherDown (sr.Name); //Π’Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ Ρƒ ΠΈΠΌΠ΅Π½ΠΈ символов

DateTimeToString (date," dd/mm/yy h: nn", FileDateToDateTime (sr.Time));

AnsiString *a;

if (sr.Attr & faDirectory)

{

a=new AnsiString (dir+sr.Name+" «); //Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ для доступа

p->SubItems->Add (««); //Для Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΉ (ΠΏΠ°ΠΏΠΎΠΊ)

p->SubItems->Add («ΠŸΠ°ΠΏΠΊΠ°»);

p->ImageIndex=ImageCloseFolder;

}

else

SHGFI_ICON

p->SubItems->Add (date); //4 Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π΄Π°Ρ‚Ρ‹

p->Data=a;

p->Caption=sr.Name; //1 Π—Π°ΠΏΠΈΡΡŒ названия

return p;

}

void TForm1: ViewFailAndFolderInListView (AnsiString dir)

{ //ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² listview ΠΏΠ°ΠΏΠΊΠΈ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ dir

for (int i=0;iItems->Count;i++)

delete ListView1->Items->Item[i]->Data; //ΠžΡ‡ΠΈΡΡ‚ΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ… ΠΎ ΠΏΠΎΠ»Π½ΠΎΠΌ ΠΏΡƒΡ‚ΠΈ ΠΊ Ρ„Π°ΠΉΠ»Π°ΠΌ

ImageList2->Clear ();

ImageList4->Clear ();

ListView1->Clear (); //ΠžΡ‡ΠΈΡΡ‚ΠΊΠ° списка

ImageList2->AddImages (ImageList1);

ImageList4->AddImages (ImageList3);

AnsiString path=dir.SubString (1,3); //Π˜Π·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ названия ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠ³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°

char inf[20];

unsigned int p=GetDriveType (path.c_str ());

if (p==DRIVE_REMOVABLE || p==DRIVE_CDROM)

{

if (GetVolumeInformation (path.c_str (), inf, 20, NULL, NULL, NULL, NULL, NULL))

{

if (!(DiskIn.Contains (path[1]))) DiskIn<

UpdateTreeView (false);

UpdateLabel ();

}

else

{

UpdateTreeView (false);

if (DiskIn.Contains (path[1])) DiskIn>>path[1];

UpdateLabel ();

CurrentDir="" ;

return;

}

}

while (ExtractFileDrive (dir).AnsiCompareIC (dir)≠0 && GetFileAttributes (dir.c_str ())==-1)

dir=ExtractFilePath (dir.SetLength (dir.Length ()-1));

TSearchRec sr;

if (FindFirst (dir+" *", faAnyFile, sr)≠0) //ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ ΠΏΠ°ΠΏΠΎΠΊ Π² Π΄Π΅Ρ‚ях

return;

do

sr.Name==".")

continue; //ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π² Π΄Π΅ΠΉΡΡ‚Π²ΠΈΠ΅Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΠ°ΠΏΠΊΠΈ

AddItemInListView (sr, dir);

while (FindNext (sr)==0);

FindClose (sr);

CurrentDir=dir; //Π—Π°ΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΠ΅ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°

double c=10.0;

__int64 FreeSpace, TotalSpace;

if (Sysutils:GetDiskFreeSpaceEx (ExtractFileDrive (dir).c_str (), NULL, TotalSpace,&FreeSpace))

StatusBar1->SimpleText=AnsiString («ΠžΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²: „)+ListView1->Items->Count+“ (Π‘Π²ΠΎΠ±ΠΎΠ΄Π½ΠΎ Π½Π° Π΄ΠΈΡΠΊΠ΅ „+ AnsiString (((FreeSpace*10)/1024/1024/1024)/c)+“ Π“Π‘)» ;

}

void TForm1: ViewProperty () //ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ свойств Ρ„Π°ΠΉΠ»Π° ΠΏΠ°ΠΏΠΊΠΈ диска

{

if (CurrentDir=="") return;

if (ListView1->ItemFocused==NULL)

{

if (TreeView1->Selected≠NULL)

{

if (TreeView1->Selected->Level==1)

FPropertyDrive->Prepare (*((AnsiString *)(TreeView1->Selected->Data)));

else if (TreeView1->Selected->Level>1)

FPropertyFile->Prepare (*((AnsiString *)(TreeView1->Selected->Data)));

}

}

else

{

if (ListView1->Selected≠NULL)

FPropertyFile->Prepare (*((AnsiString *)(ListView1->Selected->Data)));

else

{

if (ExtractFileDrive (CurrentDir).AnsiCompareIC (CurrentDir.SubString (1,CurrentDir.Length ()-1))==0)

FPropertyDrive->Prepare (CurrentDir);

else

FPropertyFile->Prepare (CurrentDir);

}

}

UpdateAll (true);

}

void TForm1: PrepareBufForOperationInListView (char * &frombuf) //ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° Π±ΡƒΡ„Π΅Ρ€Π° Π΄Π°Π½Π½Ρ‹Ρ…

{ //Π½Π°Π΄ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ производится ΠΎΠΏΠ΅Ρ€

frombuf=new char[ListView1->SelCount*MAX_PATH+1];

if (ListView1->SelCount==1) //Если Π²Ρ‹Π΄Π΅Π»Π΅Π½ ΠΎΠ΄ΠΈΠ½ элСмСнт Ρ‚ΠΎ Π²ΡΠ΅ просто

{ //заполняСм frombuf имСнСм

AnsiString sourcestr=*((AnsiString *)(ListView1->Selected->Data));

if ((FileGetAttr (sourcestr) & faDirectory)≠0)

sourcestr.SetLength (sourcestr.Length ()-1);

strcpy (frombuf, sourcestr. c_str ());

finstr (frombuf);

}

else

{

char *temp=frombuf;

bool flag=false; //Если нСсколько ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ заполняСм ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ

for (int i=0;iItems->Count;i++)

if (ListView1->Items->Item[i]->Selected)

{

AnsiString sourcestr=*((AnsiString *)(ListView1->Items->Item[i]->Data));

if ((FileGetAttr (sourcestr) & faDirectory)≠0)

sourcestr.SetLength (sourcestr.Length ()-1);

if (flag)

strcat0(temp, sourcestr. c_str ());

else

{

strcpy (temp, sourcestr. c_str ());

flag=true;

}

}

finstr (temp);

}

}

AnsiString TForm1: RenameFileOrFolder (AnsiString NewName)

{

char frombuf[MAX_PATH+1]={''}, tobuf[MAX_PATH+1]={''};

if (ListView1->ItemFocused==NULL)

{

if (TreeView1->Selected≠NULL)

if (TreeView1->Selected->Level>1)

{

AnsiString temp;

AnsiString *sourcestr=((AnsiString *)(TreeView1->Selected->Data));

temp=*sourcestr; //Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π² Ρ‚Π΅ΠΌΠΏΠΎΠ²ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ старого ΠΏΡƒΡ‚ΠΈ

sourcestr->SetLength (sourcestr->Length ()-1);

strcpy (frombuf, sourcestr->c_str ()); //ΠŸΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡƒΡ‚ΠΈ

*sourcestr=ExtractFilePath (*sourcestr)+NewName;

strcpy (tobuf, sourcestr->c_str ());

if (FileAndFolderOperation (frombuf, tobuf, FO_RENAME)≠0) //Если опСрация Π½Π΅ ΡƒΠ΄Π°Π»Π°ΡΡŒ

{

*sourcestr=temp; //Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ Π½Π°Π·Π°Π΄

NewName=ExtractFileName (temp.SubString (1,temp.Length ()));

}

else

*sourcestr=*sourcestr+" «; //Если Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ мСняСм ΠΏΡƒΡ‚ΡŒ

return NewName;

}

}

else

if ((ListView1->Selected)≠NULL)

{

bool dir=false;

AnsiString *sourcestr=((AnsiString *)(ListView1->Selected->Data));

AnsiString temp=*sourcestr;

if ((FileGetAttr (*sourcestr) & faDirectory)≠0)

{

sourcestr->SetLength (sourcestr->Length ()-1);

dir=true;

}

strcpy (frombuf, sourcestr->c_str ());

*sourcestr=ExtractFilePath (*sourcestr)+NewName;

strcpy (tobuf, sourcestr->c_str ());

if (FileAndFolderOperation (frombuf, tobuf, FO_RENAME)≠0)

{

*sourcestr=temp;

if (dir)

temp.SetLength (temp.Length ()-1);

NewName=ExtractFileName (temp);

}

else

if (dir)

*sourcestr=*sourcestr+" «;

return NewName;

}

}

void TForm1: DeleteFileOrFolder ()

{

if (ListView1->ItemFocused==NULL)

{

if (TreeView1->Selected≠NULL)

if (TreeView1->Selected->Level>1)

{

char frombuf[MAX_PATH]={''};

AnsiString sourcestr=*((AnsiString *)(TreeView1->Selected->Data));

sourcestr.SetLength (sourcestr.Length ()-1);

strcpy (frombuf, sourcestr. c_str ());

FileAndFolderOperation (frombuf, NULL, FO_DELETE);

}

}

else

if ((ListView1->Selected)≠NULL)

{

char *frombuf;

PrepareBufForOperationInListView (frombuf);

FileAndFolderOperation (frombuf, NULL, FO_DELETE);

}

UpdateAll (false);

}

void TForm1: ExpandTreeForFile (AnsiString FileName)

{ //Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Π²Π΅Ρ‚Π²Π΅ΠΉ tree Π΄ΠΎ Ρ„Π°ΠΉΠ»Π°

AnsiString Find="" ;

TTreeNode *p=TreeView1->Items->Item[0], *child;

child=p->getFirstChild ();

bool flag=false;

do

{

flag=false;

int pos=FileName.Pos («»); //Π’Ρ‹Ρ‡Π»Π΅Π½Π΅Π½ΠΈΠ΅ ΠΈΠ· ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»Π° ΠΏΠ°ΠΏΠΊΠΈ

Find=Find+FileName.SubString (1,pos); //ΠΏΡ€ΠΈΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊ find

FileName.Delete (1,pos);

if (FileName.Pos («»)==0)

flag=true; //ΠšΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠΉ окончания

child=p->getFirstChild ();

while (1)

{

if (child==NULL)

{

child=AddChildInNodeTree (p, Find); //Если ΡƒΠ·Π»Π° Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅Ρ‚ Ρ‚ΠΎ ΡΠΎΠ·Π΄Π°Π΅ΠΌ Π΅Π³ΠΎ

if (!p->Expanded) //ΠΈ Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌ Π΅Π³ΠΎ ΠΎΡ‚Ρ†Π°

p->Expand (false);

}

if ((*(AnsiString *)(child->Data)).AnsiCompareIC (Find)==0)

{

if (flag) //По ΠΎΠΊΠΎΠ½Ρ‡Π°Π½ΠΈΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅ΠΌ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° ΡΡ‚ΠΎΡ‚ ΡƒΠ·Π΅Π»

TreeView1->Selected=child;

else if (!child->Expanded) //Ссли это Ρ‚ΠΎΠ»Π»ΡŒΠΊΠΎ промСТуточная ΠΏΠ°ΠΏΠΊΠ°

child->Expand (false); //Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌ Π²Π΅Ρ‚Π²ΡŒ

p=child;

break;

}

child=p->GetNextChild (child);

}

}

while (!flag);

}

void TForm1: OpenFileOrFolder ()

{ //ΠŸΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° ΠΈΠ»ΠΈ ΠΏΠ°ΠΏΠΊΠΈ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π² listview

if (ListView1->Selected==NULL) return; //ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° наличия Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ

AnsiString ww=*((AnsiString *)(ListView1->Selected->Data));

if ((FileGetAttr (ww) & faDirectory)≠0) //Π’ случаС ΠΏΠ°ΠΏΠΊΠΈ

{

ViewFailAndFolderInListView (ww); //Π’Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠ°ΠΏΠΎΠΊ ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²

ExpandTreeForFile (ww); //Π Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌ treeview Π΄ΠΎ ΡΡ‚ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°

}

else

{

ShellExecute (NULL," open", ww. c_str (), NULL, NULL, SW_RESTORE); //Π’ случаС Ρ„Π°ΠΉΠ»Π°

if (GetLastError ()) //ВыполняСм Π΅Π³ΠΎ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ ошибки

MB_ICONINFORMATION);

// Free the buffer.

LocalFree (lpMsgBuf);

}

}

void RecursDelData (TTreeNode *node) //РСкурсивная функция ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΡ‚

{ // Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ ΡƒΠ·Π»Ρ‹ ΠΈ ΡƒΠ΄Π°Π»ΡΠ΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŽ data

delete node->Data;

TTreeNode *child;

for (child=node->getFirstChild ();child≠NULL;child=node->GetNextChild (child))

RecursDelData (child);

}

void TForm1: RecursTree (TTreeNode *node, bool UpdateAllways)

{

AnsiString dir=*((AnsiString *)(node->Data));

TSearchRec sr;

TTreeNode *child;

int num=0;

if (((GetDriveType (dir.c_str ())==DRIVE_REMOVABLE) || (GetDriveType (dir.c_str ())==DRIVE_CDROM)) && !DiskIn.Contains (ExtractFileDrive (dir)[1]))

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ вСсь тСкст
Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ