![]() |
![]() ![]() ![]() ![]() |
|
Получение иконки для зарегистрированного расширения по его имениDelphi , Графика и Игры , ICO
Автор: Poirot
{ **** UBPFD *********** by delphibase.endimus.com ****
>>
Функции в качестве параметра передаётся имя файла и в случае удачного выполнения
она (функция) возвращает handle'р иконки (HICON). В случае, если в реестре небыло
найдено расширения предложеного файла, функция возвращает 0.
Также при успешном выполнении необходимо освободить хендлер. Для этого используется
функция DestroyIcon(Handle:HICON).
Зависимости: модуль Registry, модуль ShellAPI, модуль SysUtils и стандартные
функции Pos, Delete, Copy, ExtractFileExt, ExtractIcon, StrToInt.
Автор: Poirot, poirot@rol.ru, Нижний Новгород
Copyright: Poirot (частично из Delphi 5. Руководство разработчика)
Дата: 16 июня 2002 г.
***************************************************** }
function GetRegistryIconHandle(FileName: string): HICON;
var
R: TRegistry;
Alias, //псевдвним для расширения в реестре
IconPath: string; //путь для файла с иконкой
IconNum, //номер иконки в файле
QPos: Integer; //позиция запятой в записи реестра
begin
IconNum := 0;
R := TRegistry.Create;
try
R.RootKey := HKEY_CLASSES_ROOT;
//чтение псевданима
if R.OpenKey('\' + ExtractFileExt(FileName), True) then
Alias := R.ReadString('');
R.CloseKey;
//чтение записи об иконке
if R.OpenKey('\' + Alias + '\DefaultIcon', True) then
IconPath := R.ReadString('');
R.CloseKey;
//поиск запятой
QPos := Pos(',', IconPath);
//чтение номера иконки в файле если она имеется
if QPos <> 0 then
begin
IconNum := StrToInt(Copy(IconPath, QPos + 1, 4));
IconPath := Copy(IconPath, 1, QPos - 1)
end;
finally
R.Free;
end;
//передача хендлера иконки как рещультат выполнения
Result := ExtractIcon(hInstance, PChar(IconPath), IconNum);
end;
Пример использования:
GetRegistryIconHandle('c:\winnt\win.ini');
Привет! Я перевёл текст на русский язык: Код, который вы предоставили, - это функция Delphi под названием
Пример использования функции: Это извлекает handle иконки для расширения файла Как вы упомянули, хорошей практикой является освобождать объект Некоторые альтернативные решения могут быть:
Предоставленный код quite эффективен и легко читаемый, поэтому трудно предложить значительные улучшения. Однако может быть полезно добавить обработку ошибок для случаев, когда регистрационный ключ или значение не существует, или при извлечении номера иконки fails. В целом, код хорошо структурирован и соблюдает хорошие практики в программировании Delphi. Функция GetRegistryIconHandle позволяет получить иконку для зарегистрированного расширения по его имени, открывая соответствующие записи в реестре и извлекая информацию о пути к файлу с иконкой и номере иконки. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 | ||||