Как в Delphi изменить иконку у директории

Обычно, для изменения вида папок в Проводнике используется файл desktop.ini.

Сперва необходимо создать файл Desktop.ini и поместить в ту директорию, иконку которой мы хотим изменить. В программе для этого можно воспользоваться классом TIniFile и передать в него путь директории.

Теперь нам необходимо записать в .ini файл пары =. В Desktop.ini эти пары выглядят следующим образом (самое главное, это указать иконку и её индекс):


[.ShellCLassInfo]  
IconFile=C:LocationofFolder.ico  
IconIndex=0  
InfoTip=Delphi is the coolest IDE ever!  

Значение IconFile это путь к .dll, .ico, или .exe. В Delphi это выглядит так:


with iniFile do  
begin  
  //Следующие строки меняют иконку  
  WriteString('.ShellClassInfo', 'IconFile',  editIconPath.Text);  
  WriteString('.ShellClassInfo', 'IconIndex', editIconIndex.Text);  
  WriteString('.ShellClassInfo', 'InfoTip', 'Use Delphi because it rocks!');  
  UpdateFile;   
end;  

Теперь, когда файл Desktop.ini создан, необходимо изменить атрибуты папки и добавить системный флаг. Чтобы иконка отображалась правильно, желательно установить системный флажёк как для папки, так и для её родителя. Для установки атрибутов воспользуемся функцией SetFileAttribue():


//Устанавливаем системные атрибуты для папки и её родителя  
SetFileAttributes(PChar(edFolderPath.Text), FILE_ATTRIBUTE_SYSTEM);  
if Length(edFolderPath.Text) > 3 then //Если директория не корневая...  
begin  
   //функция LastChar возвращает индекс последнего вхождения символа  
   //в строку. Этот способ позволяет быстро получить путь родительской  
   //директориии, если, конечно, директория не является корневой на диске..  
   tempDir := Copy( edFolderPath.Text, 1,LastChar(edFolderPath.Text, '')-1);  
   SetFileAttributes(PChar(tempDir), FILE_ATTRIBUTE_SYSTEM);                
end;  

Теперь можно открыть Проводник и посмотреть в левой панели на значёк директории.
Теги:
изменить иконку
Добавлено: 31 Июля 2018 07:34:29 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...