Как использовать значок ресурса для значка Delphi JumpList

У меня есть TJumpList в моем приложении Delphi, которое представляет собой один EXE. Я хотел бы использовать значки, сохраненные в ресурсах приложения, в качестве значков JumpList.

TJumpList принимать только строку TFileName для пути к значку.

Есть ли способ использовать значок ресурса таким образом, без внешних файлов значков или извлечения ресурсов извне во время выполнения?

Я пытался загрузить из ресурса, но, похоже, он принимает только строку, которая является путем к файлу значка.

Если он будет принимать только TFileName, и вы попытались загрузить из ресурса, но он принимает только строку, которая является путем к значку, разве вы еще не ответили на свой вопрос? только принять TFileName кажется довольно простым и понятным.

Ken White 19.02.2023 20:34

Я сказал, что кажется, что он принимает только строку, поскольку я использую только визуальный дизайнер, но это не значит, что нет другого обходного пути, поэтому я задал вопрос. Я знаю, что это возможно в C, поэтому это возможно в Delphi с использованием собственного класса или оболочки. Мой Delphi не является продвинутым, поэтому я надеялся найти обходной путь, чтобы сохранить мое приложение в виде одного переносимого EXE-файла.

Delphify 19.02.2023 20:45

Вы читали документацию TJumpList или проверяли исходный код? Вы проверили и увидели, нужны ли значки на самом деле после создания приложения (путем создания, перемещения файлов и запуска приложения вне среды IDE)? Этот тест можно выполнить за пару минут, используя новое пустое приложение VCL и TJumpList в форме.

Ken White 19.02.2023 20:52

Тестирование приложения после сборки невозможно, потому что я хочу менять значки списка переходов на лету в зависимости от расширений файлов, поэтому изменение значка во время выполнения попытается связать с внешним файлом. Да, я проверил источник, и для него требуется TFileName, как я уже сказал, но другие компоненты изображения также одинаковы, которые можно загрузить из списка изображений или ресурса, но я не знаю, как это сделать для списка переходов или возможно ли это в Delphi.

Delphify 19.02.2023 22:04

В документации для TJumpList указано, что единственный способ назначить значок — указать путь и имя файла. Я не вижу ничего другого, что позволило бы вам загрузить его иначе.

Ken White 19.02.2023 22:05

Просто мысль. Вы можете сохранить изображение как файл из ресурса, а затем просто указать путь к этому файлу, который вы сохраняете. После загрузки просто снова удалите файл. Я знаю, что это не идеально, но, глядя на комментарий и ответ Реми, кажется, что это может быть ваш единственный вариант на данный момент.

Adriaan 20.02.2023 08:35

Адриан: Это то, что я в конечном итоге сделал, и это было нормально для обычных задач со статическим списком переходов, но поскольку я также использую «ShowRecent», которые создаются динамически, я не мог сразу удалить файлы, и они должны были остаться для всего приложения. сеанс, поэтому теперь я удаляю их при закрытии приложения в качестве временного решения

Delphify 20.02.2023 12:05
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
7
81
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

TJumpListItem использует COM-интерфейс Win32 IShellLink. Этот интерфейс не поддерживает использование значка через ресурс, только через путь к файлу.

Однако этот интерфейс позволяет указать индекс значка в исполняемом файле (EXE или DLL). Но TJumpListItem жестко закодирован, чтобы всегда использовать индекс 0, независимо от того, какой файл используется. Об этом уже есть открытый тикет:

RSP-21558: IconResourceIndex недоступен в TJumpListItem (TJumpList)

Спасибо, я принял ваш ответ как решенный и надеюсь, что они исправят его ... Кстати, я только что обнаружил еще одну ошибку в Delphi TJumpList. В Windows 10, если для параметра «Настройки-> Персонализация-> Пуск-> Показать недавно открытые элементы в списках переходов при запуске или на панели задач» установлено значение «ВЫКЛ.», а в вашем TJumpList включено автообновление и у вас есть TJumpListItem в CustomCategories, затем включите при запуске приложения возникает исключение «Исключение JumpListItem: ошибка -2147024891: добавление пользовательской категории ('') и ее дочерних элементов в новый список переходов». что в значительной степени делает CustomCategories бесполезными

Delphify 20.02.2023 12:16

Другие вопросы по теме