У меня есть компонент, который я создаю в Delphi XE, который я хочу использовать следующим образом:
Пользователь создает новый пустой проект.
Пользователь удаляет мой компонент в форме.
Выполнен некоторый специальный код Designtime в моем компоненте, который изменит параметры проекта, чтобы снять флажок «Включить темы времени выполнения» в параметрах проекта. Я не уверен, что это даже возможно, поэтому я спрашиваю, возможно ли это.
Если № 3 невозможен, тогда мне нужно другое решение моей проблемы «юзабилити» с этим компонентом; У меня проблема в том, что если пользователи не отключают статически связанный файл манифеста, сняв флажок Включить темы времени выполнения, то этот статически сгенерированный манифест, связанный с EXE, похоже, переопределяет внешние файлы манифеста, которые я хочу иметь вне EXE, в диск. Я также должен изменить эти манифесты во время выполнения, таким образом, потребность во внешних манифестах. Конечно, я могу включить функциональность Runtime Theme, используя эти манифесты, когда это необходимо. Второстепенный вопрос касается приоритета внешних и внутренних проявлений; Может ли внешний манифест каким-либо образом иметь приоритет над внутренним ресурсом манифеста, который связан с приложениями Delphi, когда вы устанавливаете флажок «Включить темы времени выполнения»?
Допустимые решения, отличные от # 3:
A. Каким-то образом заставить Delphi не генерировать манифест.
B. Каким-то образом во время выполнения заставьте Windows распознавать и устанавливать приоритеты внешних файлов .manifest, даже если найден внутренний.
C. Наименее хорошее решение; Во время выполнения, после сбоя CoCreateInstance в моем компоненте, я могу перечислять ресурсы, сообщать, что внешний манифест присутствует и мешает нам, и полагаться на разработчиков, которые используют мой компонент, читающий сообщения об ошибках во время выполнения, которые выкладывает мой компонент, предлагая им отключить установите флажок «Темы выполнения» и перестройте их приложение. Извлечение и чтение манифеста уже рассматривается в другом вопросе stackoverflow с кодом C ++, который можно легко преобразовать в Delphi.
Обновление Принятый ответ делает именно то, что я просил, но считается хаком, и ответ Дэвида о контекстах активации гораздо более вменяемый и рекомендуемый подход.
Update2 Встроенный манифест, как правило, переопределяется в более поздних версиях Delphi (XE5 и более поздних), явно указывая, какой манифест вы хотите связать, через настройки проекта.