Как показать иконку, ассоциированную с данным типом файла
Приходит программист в магазин. Там продавщица - полная такая тетенька. Программист (меланхолично оглядевшись):
- Бутылку пива и пачку презервативов. Продавщица:
- Это ты девушку охмурить бутылкой пива собрался? Вино надо дорогое покупать.... Программист (отрешенно):
- Да нет. Пиво я выпью, когда она уйдет.
Теперь, когда мы готовы к задаче, давайте рассмотрим, как отобразить иконку, связанную с типом файла.
Код, который я предоставил, почти корректен, но есть несколько проблем:
ExtractAssociatedIcon ожидает расширение файла в качестве второго параметра, а не имя исполняемого файла приложения.
Вы используете HInstance, который является.handle модуля, содержащего текущий исполняемый файл. Однако в этом случае вам нужно указать индекс иконки и тип файла.
Вот обновленная версия вашего кода:
procedure TForm1.Button1Click(Sender: TObject);
var
Icon: HICON;
IconIndex: word;
begin
IconIndex := 1; // Замените на желаемый индекс иконки (например, 1 для файла .txt)
Icon := ExtractAssociatedIcon(0, '.txt', IconIndex); // Укажите расширение файла
DrawIcon(Canvas.Handle, 10, 10, Icon);
end;
В этом примере мы извлекаем иконку, связанную с файлами .txt (замените на желаемое расширение файла). Функция DrawIcon используется для отображения иконки на канвасе.
Если вы хотите отобразить разные иконки для каждого типа файла, можно использовать цикл для перебора доступных иконок и отображать их соответствующим образом. Например:
procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
begin
for i := 0 to GetSystemMetrics(SM_CXICON) - 1 do begin
IconIndex := i + 1; // Начните с 1, а не с 0
Icon := ExtractAssociatedIcon(0, '.txt', IconIndex);
if Icon <> 0 then begin
DrawIcon(Canvas.Handle, 10, 10, Icon);
end;
end;
end;
В этом примере мы используем функцию GetSystemMetrics для получения количества доступных иконок и перебираем их. Для каждой иконки мы извлекаем ее с помощью ExtractAssociatedIcon и отображаем на канвасе, если она не null.
Не забудьте освободить handle иконки, когда вы закончите с ней, чтобы избежать утечек памяти:
DestroyIcon(Icon);
Надеюсь, это поможет!
В статье описывается, как использовать функцию ShellAPI для отображения иконки, ассоциированной с типом файла, в приложении на языке Delphi.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.