Delphi.int.ru — Портал программистов

Вход Регистрация | Забыли пароль?

События

Сегодня:
Вопросы0    Ответы0    Мини-форумы0


Последние:
Вопрос26.08, 21:10 / #6673
Ответ02.08, 00:42 / #6619
Новости30 апреля 2012


Сейчас онлайн:
На сайте — 14
На IRC-канале — 3

Ссылки

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

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

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

Теперь нам необходимо записать в .ini-файл пары значений. В desktop.ini эти пары выглядят следующим образом:

[.ShellCLassInfo] 
IconFile=C:\folder.ico 
IconIndex=0 
InfoTip=Folder info tip

Самое главное - это указать иконку и её индекс.

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

var iniFile: TIniFile; 
... 
iniFile:=TIniFile.Create(edFolderPath.Text); 
with iniFile do 
  begin 
    //Следующие строки записывают в desktop.ini все необходимые параметры 
    WriteString('.ShellClassInfo', 'IconFile',  editIconPath.Text); 
    WriteString('.ShellClassInfo', 'IconIndex', editIconIndex.Text); 
    WriteString('.ShellClassInfo', 'InfoTip',editInfoTip.Text); 
    UpdateFile; 
  end; 
iniFile.Free;

Примечание: здесь editFolderPath, editIconPath, editIconIndex и editInfoTip - элементы TEdit, в которые вводятся все необходимые данные - путь к директории, иконку которой следует изменить, путь к файлу с иконкой, индекс иконки и всплывающая подсказка для директории (подсказка не обязательна).

Теперь, когда файл 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;

Теперь можно открыть Проводник и посмотреть на значок.

Статья добавлена: 10 марта 2007

Следующая статья: Липкие окошки »

Рейтинг статьи: 1.00 Голосов: 1 Ваша оценка:

Зарегистрируйтесь/авторизируйтесь,
чтобы оценивать статьи.


Статьи, похожие по тематике

 

Для вставки ссылки на данную статью на другом сайте используйте следующий HTML-код:

Ссылка для форумов (BBCode):

Быстрая вставка ссылки на статью в сообщениях на сайте:
{{a:29}} (буква a — латинская) — только адрес статьи (URL);
{{статья:29}} — полноценная HTML-ссылка на статью (текст ссылки — название статьи).

Поделитесь ссылкой в социальных сетях:


Комментарии читателей к данной статье

Пока нет комментариев к данной статье. Оставьте свой и он будет первым.

Оставлять комментарии к статьям могут только зарегистрированные пользователи.