Получение иконки для зарегистрированного расширения по его имени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 прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |