У меня есть TJumpList
в моем приложении Delphi, которое представляет собой один EXE. Я хотел бы использовать значки, сохраненные в ресурсах приложения, в качестве значков JumpList.
TJumpList
принимать только строку TFileName
для пути к значку.
Есть ли способ использовать значок ресурса таким образом, без внешних файлов значков или извлечения ресурсов извне во время выполнения?
Я пытался загрузить из ресурса, но, похоже, он принимает только строку, которая является путем к файлу значка.
Я сказал, что кажется, что он принимает только строку, поскольку я использую только визуальный дизайнер, но это не значит, что нет другого обходного пути, поэтому я задал вопрос. Я знаю, что это возможно в C, поэтому это возможно в Delphi с использованием собственного класса или оболочки. Мой Delphi не является продвинутым, поэтому я надеялся найти обходной путь, чтобы сохранить мое приложение в виде одного переносимого EXE-файла.
Вы читали документацию TJumpList или проверяли исходный код? Вы проверили и увидели, нужны ли значки на самом деле после создания приложения (путем создания, перемещения файлов и запуска приложения вне среды IDE)? Этот тест можно выполнить за пару минут, используя новое пустое приложение VCL и TJumpList в форме.
Тестирование приложения после сборки невозможно, потому что я хочу менять значки списка переходов на лету в зависимости от расширений файлов, поэтому изменение значка во время выполнения попытается связать с внешним файлом. Да, я проверил источник, и для него требуется TFileName, как я уже сказал, но другие компоненты изображения также одинаковы, которые можно загрузить из списка изображений или ресурса, но я не знаю, как это сделать для списка переходов или возможно ли это в Delphi.
В документации для TJumpList указано, что единственный способ назначить значок — указать путь и имя файла. Я не вижу ничего другого, что позволило бы вам загрузить его иначе.
Просто мысль. Вы можете сохранить изображение как файл из ресурса, а затем просто указать путь к этому файлу, который вы сохраняете. После загрузки просто снова удалите файл. Я знаю, что это не идеально, но, глядя на комментарий и ответ Реми, кажется, что это может быть ваш единственный вариант на данный момент.
Адриан: Это то, что я в конечном итоге сделал, и это было нормально для обычных задач со статическим списком переходов, но поскольку я также использую «ShowRecent», которые создаются динамически, я не мог сразу удалить файлы, и они должны были остаться для всего приложения. сеанс, поэтому теперь я удаляю их при закрытии приложения в качестве временного решения
TJumpListItem использует COM-интерфейс Win32 IShellLink. Этот интерфейс не поддерживает использование значка через ресурс, только через путь к файлу.
Однако этот интерфейс позволяет указать индекс значка в исполняемом файле (EXE или DLL). Но TJumpListItem
жестко закодирован, чтобы всегда использовать индекс 0, независимо от того, какой файл используется. Об этом уже есть открытый тикет:
RSP-21558: IconResourceIndex недоступен в TJumpListItem (TJumpList)
Спасибо, я принял ваш ответ как решенный и надеюсь, что они исправят его ... Кстати, я только что обнаружил еще одну ошибку в Delphi TJumpList. В Windows 10, если для параметра «Настройки-> Персонализация-> Пуск-> Показать недавно открытые элементы в списках переходов при запуске или на панели задач» установлено значение «ВЫКЛ.», а в вашем TJumpList включено автообновление и у вас есть TJumpListItem в CustomCategories, затем включите при запуске приложения возникает исключение «Исключение JumpListItem: ошибка -2147024891: добавление пользовательской категории ('') и ее дочерних элементов в новый список переходов». что в значительной степени делает CustomCategories бесполезными
Если он будет принимать только TFileName, и вы попытались загрузить из ресурса, но он принимает только строку, которая является путем к значку, разве вы еще не ответили на свой вопрос? только принять TFileName кажется довольно простым и понятным.