Π€Π°ΠΉΠ»ΠΎΠ²ΡΠΉ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ
ΠΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΈ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΡΠΎΡΠΌΡ 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]))