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

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

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

Листинг 4.34.

ΠžΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° копирования ΠΏΡ€ΠΈ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ Ρ„ΠΎΡ€ΠΌΡ‹

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose:

Boolean);

begin

//ΠžΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ процСсс копирования

bCancelCopy := True;

end;

Как Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚ΡŒ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Ρ„ΠΎΡ€ΠΌΡ‹ (ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ CanClose Π² False), Π½Π΅ останавливая копирования.

Π’ Ρ‚ΠΎΠΌ случаС, ΠΊΠΎΠ³Π΄Π° копируСтся нСсколько Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΌΠΎΠΆΠ½ΠΎ ввСсти Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ элСмСнт управлСния Progress Π’Π°Π³, ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‰ΠΈΠΉ Ρ…ΠΎΠ΄ всСго процСсса копирования. Волько ΠΏΡ€ΠΈ этом придСтся Π·Π°Ρ€Π°Π½Π΅Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΎΠ±Ρ‰ΠΈΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ².

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π·Π½Π°Ρ‡ΠΊΠΎΠ², ассоциированных с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ

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

...

Листинг 4.35.

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π·Π½Π°Ρ‡ΠΊΠ° Ρ„Π°ΠΉΠ»Π°

function GetFileIcon(filename: String; small: Boolean = False ): HICON;

var

info: SHFILEINFO;

flags: Cardinal;

begin

flags := SHGFI_ICON;

if small then

//ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΌΠ°Π»ΠΎΠ³ΠΎ Π·Π½Π°Ρ‡ΠΊΠ°

flags := flags or SHGFI_SMALLICON

else

//ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ большого Π·Π½Π°Ρ‡ΠΊΠ°

flags := flags or SHGFI_LARGEICON;

ZeroMemory(Addr(info), SizeOf(info));

//ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π·Π½Π°Ρ‡ΠΊΠ°

SHGetFileInfo(PAnsiChar(filename), 0, info, SizeOf(info), flags);

GetFileIcon := info.hIcon;

end;

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ Π² листингС 4.35 API-функция SHGetFilelnfo объявлСна Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅ ShellApi. Π’Π°ΠΌ ΠΆΠ΅ объявлСна структура SHFILEINFO.

Π’ листингС 4.36 ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ использования Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ GetFilelcon: здСсь ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ Π·Π½Π°Ρ‡ΠΊΠΈ ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Π² элСмСнтах управлСния Image (ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ для большого ΠΈ ΠΌΠ°Π»ΠΎΠ³ΠΎ Π·Π½Π°Ρ‡ΠΊΠΎΠ²).

...

Листинг 4.36.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ получСния Π·Π½Π°Ρ‡ΠΊΠ° Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° (ΠΈΠ»ΠΈ ΠΏΠ°ΠΏΠΊΠΈ)

procedure TForm1.cmbLoadIconClick(Sender: TObject);

begin

//ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ большого ΠΈ ΠΌΠ°Π»ΠΎΠ³ΠΎ Π·Π½Π°Ρ‡ΠΊΠΎΠ² Ρ„Π°ΠΉΠ»Π°

imgLarge.Picture.Icon.Handle := GetFileIcon(txtFile.Text);

imgSmall.Picture.Icon.Handle := GetFileIcon(txtFile.Text, True);

end;

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ опрСдСлСния Π·Π½Π°Ρ‡ΠΊΠ° Ρ„Π°ΠΉΠ»Π° приводится Π½Π° рис. 4.10.

Рис. 4.10. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π·Π½Π°Ρ‡ΠΊΠ°, ассоциированного с Ρ„Π°ΠΉΠ»ΠΎΠΌ

На самом Π΄Π΅Π»Π΅ функция ΠΈΠ· листинга 4.35 ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Π·Π½Π°Ρ‡ΠΊΠΈ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ„Π°ΠΉΠ»ΠΎΠ², Π½ΠΎ ΠΈ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ², дисков ΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ°ΠΏΠΎΠΊ ( Мой ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€, Π Π°Π±ΠΎΡ‡ΠΈΠΉ стол, ПанСль управлСния ΠΈ Ρ‚. Π΄.). ΠŸΡ€Π°Π²Π΄Π°, Π² послСднСм случаС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ Π² листингС API-функция SHGetFilelnfo Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° (Π½Π΅ строка). Частично Ρ€Π°Π±ΠΎΡ‚Π° с Ρ‚Π°ΠΊΠΈΠΌ прСдставлСниСм ΠΏΡƒΡ‚Π΅ΠΉ рассмотрСна Π² ΠΏΠΎΠ΄Ρ€Π°Π·Π΄. «Окно Π²Ρ‹Π±ΠΎΡ€Π° ΠΏΠ°ΠΏΠΊΠΈΒ» Ρ€Π°Π·Π΄. 2.4.

Π’ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ скаТСм нСсколько слов ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ… ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… возмоТностях API-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ SHGetFileInf ΠΎ. НСдаром ΠΎΠ½Π° называСтся Π½Π΅ SHGetFilelcon ΠΈΠ»ΠΈ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅: ΠΎΠ½Π° позволяСт ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π³ΠΎΡ€Π°Π·Π΄ΠΎ большС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, Π½Π΅ΠΆΠ΅Π»ΠΈ просто Π·Π½Π°Ρ‡ΠΎΠΊ Ρ„Π°ΠΉΠ»Π°. Π­Ρ‚Π° информация зависит ΠΎΡ‚ Π½Π°Π±ΠΎΡ€Π° Ρ„Π»Π°Π³ΠΎΠ², ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π² качСствС послСднСго ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°. Но сначала рассмотрим, ΠΈΠ· ΠΊΠ°ΠΊΠΈΡ… ΠΏΠΎΠ»Π΅ΠΉ состоит структура SHFILEINFO, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ (Π·Π° Ρ€Π΅Π΄ΠΊΠΈΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ) помСщаСтся ΠΈΠΌΠ΅Π½Π½ΠΎ Π² Π΅Π΅ поля:

β€’ hIcon (Ρ‚ΠΈΠΏΠ° HICON) β€“ дСскриптор Π·Π½Π°Ρ‡ΠΊΠ° Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡƒΡ‚Π΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° (ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ SHGetFilelnfo);

β€’ iIcon (Ρ‚ΠΈΠΏΠ° Integer) β€“ Π½ΠΎΠΌΠ΅Ρ€ Π·Π½Π°Ρ‡ΠΊΠ° Π² систСмном ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅ ImageList;

β€’ dwAttributes (Ρ‚ΠΈΠΏΠ° DWORD) β€“ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡƒΡ‚Π΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°;

β€’ szDisplayName (Ρ‚ΠΈΠΏΠ° array [0. МАΠ₯_РАВН-1] of AnsiChar) β€“ Π±ΡƒΡ„Π΅Ρ€ для ΠΈΠΌΠ΅Π½ΠΈ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, сочСтаниС ΠΈΠΌΠ΅Π½ΠΈ ΠΈ ΠΌΠ΅Ρ‚ΠΊΠΈ диска, ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΠΎΠ΅ Π² ΠŸΡ€ΠΎΠ²ΠΎΠ΄Π½ΠΈΠΊΠ΅ Windows);

β€’ szTypeName (Ρ‚ΠΈΠΏΠ° array [0..79] of AnsiChar) β€“ Π±ΡƒΡ„Π΅Ρ€ для названия Ρ‚ΠΈΠΏΠ° Ρ„Π°ΠΉΠ»Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ Microsoft Word).

На полях dwAttributes ΠΈ ilcon ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ, Π·Π°Ρ‚ΠΎ рассмотрим, ΠΊΠ°ΠΊ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ SHGetFilelnfo Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ поля структуры (ΠΈΡ… ΠΏΡ€ΠΎΡ‰Π΅ всСго ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Delphi). Π’ΠΎΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ для этого Ρ„Π»Π°Π³ΠΈ (ΠΈΠΌΠ΅Π½Π° цСлочислСнных констант):

β€’ SHGFIICON – ΠΏΠΎΠ»Π΅ hlcon заполняСтся дСскриптором Π·Π½Π°Ρ‡ΠΊΠ°, ассоциированного с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ; Ссли ΠΏΡ€ΠΈ использовании дСскриптор Π½Π΅ сохраняСтся Π² ΠΊΠ°ΠΊΠΎΠΌ-Π»ΠΈΠ±ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΡ‡Π΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅, автоматичСски ΡƒΠ΄Π°Π»ΡΡŽΡ‰Π΅ΠΌ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Π΅ Π·Π½Π°Ρ‡ΠΊΠΈ (ΠΊΠ°ΠΊ Π² листингС 4.36), Ρ‚ΠΎ послС использования Π·Π½Π°Ρ‡ΠΎΠΊ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ (API-функция Destroylcon);

β€’ SHGFI_LARGEICON, SHGFI_SMALLICON – ОНИ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π’ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ с SHGFIICON для получСния большого ΠΈΠ»ΠΈ ΠΌΠ°Π»ΠΎΠ³ΠΎ Π·Π½Π°Ρ‡ΠΊΠΎΠ² соотвСтствСнно; использованиС Ρ„Π»Π°Π³ΠΎΠ² вмСстС Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ смысла (Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ ΠΌΠ°Π»Ρ‹ΠΉ Π·Π½Π°Ρ‡ΠΎΠΊ);

β€’ SHGFI_DISPLAYNAMEβ€”ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ этого Ρ„Π»Π°Π³Π° ΠΏΠΎΠ»Π΅ szDisplayName Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ друТСствСнноС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ имя ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, System (Π‘:));

β€’ SHGFI_EXETYPE – ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ этого Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° ΠΏΠΎΠ»Π΅Π· zTypeName Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΎ тСкстовым описаниСм Ρ‚ΠΈΠΏΠ° Ρ„Π°ΠΉΠ»Π°.

ЗначСния Π² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ спискС ΠΌΠΎΠΆΠ½ΠΎ, Ссли Π½Π΅ сказано ΠΈΠ½ΠΎΠ΅, ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π±ΠΈΡ‚ΠΎΠ²ΠΎΠ³ΠΎ Π˜Π›Π˜ (or).

Π˜Π·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ Π·Π½Π°Ρ‡ΠΊΠΎΠ² ΠΈΠ· Π•Π₯Е– ΠΈ DLL-Ρ„Π°ΠΉΠ»ΠΎΠ²

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

ΠŸΡƒΡΡ‚ΡŒ ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ ΠΏΡƒΡ‚ΡŒ Ρ„Π°ΠΉΠ»Π°, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π΄Π²Π° списка (TImageList) для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΈ ΠΌΠ°Π»Ρ‹Ρ… Π·Π½Π°Ρ‡ΠΊΠΎΠ² соотвСтствСнно. Π’ΠΎΠ³Π΄Π° ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°, Π·Π°ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π°Ρ списки Π·Π½Π°Ρ‡ΠΊΠ°ΠΌΠΈ, ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½Π½Ρ‹ΠΌΠΈ ΠΈΠ· Ρ„Π°ΠΉΠ»Π°, ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ (листинг 4.37)....

Листинг 4.37.

БоставлСниС списков Π·Π½Π°Ρ‡ΠΊΠΎΠ²

procedure LoadIcons(filename: String; lgImages,

smImages: TImageList);

var

icon: TIcon;

smIconHandle, lgIconHandle: HICON;

i: Integer;

begin

//Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π·Π½Π°Ρ‡ΠΊΠ° (Π½Π΅ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎ, Π½ΠΎ просто)

i := 0;

while Integer(

ExtractIconEx(PAnsiChar(filename), i, lgIconHandle,

smIconHandle, 1)

) > 0 do

begin

Inc(i);

//Π‘ΠΎΠ»ΡŒΡˆΠΎΠΉ Π·Π½Π°Ρ‡ΠΎΠΊ

icon := TIcon.Create;

icon.Handle := lgIconHandle;

lgImages.AddIcon(icon);

//ΠœΠ°Π»Ρ‹ΠΉ Π·Π½Π°Ρ‡ΠΎΠΊ

icon := TIcon.Create;

icon.Handle := smIconHandle;

smImages.AddIcon(icon);

end;

end;

Π’ листингС 4.37 для извлСчСния Π·Π½Π°Ρ‡ΠΊΠΎΠ² ΠΈΠ· Ρ„Π°ΠΉΠ»Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ очСрСдная полСзная функция модуля ShellApi – Extract IconEx. ΠŸΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‚Π°ΠΊΠΎΠ²:

...

function ExtractIconEx(lpszFile: PChar; nIconIndex: Integer;

var phiconLarge, phiconSmall: HICON;

nIcons: UINT): UINT;

Ѐункция ExtractlconEx ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹:

β€’ lpszFile – ΠΏΡƒΡ‚ΡŒ Ρ„Π°ΠΉΠ»Π°, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡŽΡ‚ΡΡ Π·Π½Π°Ρ‡ΠΊΠΈ;

β€’ nIconlndex – Π½ΠΎΠΌΠ΅Ρ€ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΠΌΠΎΠ³ΠΎ Π·Π½Π°Ρ‡ΠΊΠ°; нумСрация начинаСтся с нуля (Ссли Π½ΠΎΠΌΠ΅Ρ€ Ρ€Π°Π²Π΅Π½ -1 ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ piconLarge ΠΈ piconSmall Π½ΡƒΠ»Π΅Π²Ρ‹Π΅, Ρ‚ΠΎ функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ количСство Π·Π½Π°Ρ‡ΠΊΠΎΠ² Π² Ρ„Π°ΠΉΠ»Π΅);

β€’ piconLarge, piconSmall – ссылки Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΠ° HI CON (Π»ΠΈΠ±ΠΎ Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹Π΅ элСмСнты массива array. of HICON) для помСщСния Π² Π½ΠΈΡ… дСскрипторов Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΈ ΠΌΠ°Π»Ρ‹Ρ… Π·Π½Π°Ρ‡ΠΊΠΎΠ² соотвСтствСнно;

β€’ nIcons – количСство ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΠΌΡ‹Ρ… Π·Π½Π°Ρ‡ΠΊΠΎΠ² (ΠΏΠΎ сути, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ количСство элСмСнтов Π² ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ массивах: лишниС элСмСнты Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Ρ‹).

Ѐункция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ количСство Π·Π½Π°Ρ‡ΠΊΠΎΠ², ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½Π½Ρ‹Ρ… ΠΈΠ· Ρ„Π°ΠΉΠ»Π°, ΠΈΠ»ΠΈ количСство Π·Π½Π°Ρ‡ΠΊΠΎΠ² Π² Ρ„Π°ΠΉΠ»Π΅ ΠΏΡ€ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° nlconlndex.

Π’ листингС 4.36 ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π½Π΅ совсСм ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ способ извлСчСния Π·Π½Π°Ρ‡ΠΊΠΎΠ² ΠΈΠ· Ρ„Π°ΠΉΠ»Π° – ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ. Однако ΠΎΠ½ ΠΏΠΎΠ΄ΠΎΠΉΠ΄Π΅Ρ‚ для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° случаСв. Π”Ρ€ΡƒΠ³ΠΎΠΉ (Π½ΠΎ Π½Π΅ СдинствСнный) Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ – использованиС массива. Π’ΠΎΠ³Π΄Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈΠ•Ρ…^Π°ΡΠ˜ΡΠΎΠΏΠ•Ρ… ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ элСмСнты массивов для дСскрипторов Π·Π½Π°Ρ‡ΠΊΠΎΠ² (Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½ΡƒΠΆΠ΅Π½ адрСс Π½Π°Ρ‡Π°Π»Π° массива), Π° Π² качСствС послСднСго ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° – количСство элСмСнтов Π² массивС. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ссли количСство Π·Π½Π°Ρ‡ΠΊΠΎΠ² Π² Ρ„Π°ΠΉΠ»Π΅ ΠΏΡ€Π΅Π²Π·ΠΎΠΉΠ΄Π΅Ρ‚ количСство элСмСнтов Π² массивС, Ρ‚ΠΎ Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ExtractlconEx ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚ΡŒ, ΠΏΠ΅Ρ€Π΅Π΄Π°Π² Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° nlconlndex Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½Π½ΠΎΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ ExtractlconEx, ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½Π½ΠΎΠ΅ Π½Π° Π½ΠΎΠΌΠ΅Ρ€ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (начиная с нуля).

МоТно Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ динамичСский массив, ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ установив Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€, Π²Ρ‹Π·Π²Π°Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ExtractlconEx с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ nlconlndex, Ρ€Π°Π²Π½Ρ‹ΠΌ -1. Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ значСния ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² piconLarge, piconSmall Π² ноль (Π½Π΅ мСняя объявлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ) ΠΌΠΎΠΆΠ½ΠΎ, объявив ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° HICON (AHICON), присвоив Π΅ΠΌΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ nil ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π² Π΅Π³ΠΎ Π² качСствС упомянутых ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ.

На рис. 4.11 приводится внСшний Π²ΠΈΠ΄ Ρ„ΠΎΡ€ΠΌΡ‹ прилоТСния послС извлСчСния Π·Π½Π°Ρ‡ΠΊΠΎΠ² ΠΈΠ· Ρ„Π°ΠΉΠ»Π° Explorer. Π΅Ρ…Π΅.

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ наТатия ΠΊΠ½ΠΎΠΏΠΊΠΈ Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡ΠΊΠΈ прСдставлСнной Π½ Π° рис. 4.11 Ρ„ΠΎΡ€ΠΌΡ‹ приводится Π² листингС 4.38.

Рис. 4.11. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½Π½Ρ‹Ρ… ΠΈΠ· Π•Π₯Π•-Ρ„Π°ΠΉΠ»Π° Π·Π½Π°Ρ‡ΠΊΠΎΠ²

...

Листинг 4.38. БоставлСниС списков Π·Π½Π°Ρ‡ΠΊΠΎΠ² ΠΈ ΠΈΡ… ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅

procedure TForm1.cmbLoadIconClick(Sender: TObject);

var

i: Integer;

item: TListItem;

begin

lvwIconsLg.Clear;

lvwIconsSm.Clear;

//Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π·Π½Π°Ρ‡ΠΊΠΎΠ² Π² ImageList

ImageListLg.Clear;

ImageListSm.Clear;

LoadIcons(txtFile.Text, ImageListLg, ImageListSm);

//Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ элСмСнтов Π² ListView с большими ΠΈ ΠΌΠ°Π»Ρ‹ΠΌΠΈ Π·Π½Π°Ρ‡ΠΊΠ°ΠΌΠΈ

for i := 0 to ImageListLg.Count – 1 do

begin

item := lvwIconsLg.Items.Add();

item.Caption := \'Icon\' + IntToStr(i+1);

item.ImageIndex := i;

item := lvwIconsSm.Items.Add();

item.Caption := \'Icon\' + IntToStr(i+1);

item.ImageIndex := i;

end;

end;

ΠŸΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π° элСмСнтов управлСния ListView: для отобраТСния Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π·Π½Π°Ρ‡ΠΊΠΎΠ² – lvwIconLg ΠΈ для отобраТСния ΠΌΠ°Π»Ρ‹Ρ… lvwIconSm. На Ρ„ΠΎΡ€ΠΌΠ΅ Ρ‚Π°ΠΊΠΆΠ΅ располоТСны Π΄Π²Π° элСмСнта управлСния ImageList: ImageListLg для хранСния Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΈ ImageListSm для хранСния ΠΌΠ°Π»Ρ‹Ρ… Π·Π½Π°Ρ‡ΠΊΠΎΠ².