Применить тему Windows в Office Надстройка Com

На протяжении многих лет Delphi поддерживает переключатель Включить темы времени выполнения на вкладке «Параметры приложения». Однако это работает только для исполняемых файлов. Предполагается, что библиотеки DLL берут на себя настройку тем (и другие) от своего родительского приложения.

К сожалению, Microsoft Office здесь не очень хорошо работает. Их «тематический» вид достигается с помощью настраиваемых элементов управления, а не с помощью общих элементов управления Windows.

В статье MSDN 830033 - Как применять темы Windows XP к надстройкам Office COM это работает только для исполняемых файлов. Предполагается, что библиотеки DLL берут на себя настройку тем (и другие) от своего родительского приложения.

К сожалению, Microsoft Office здесь не очень хорошо работает. Их «тематический» вид достигается с помощью настраиваемых элементов управления, а не с помощью общих элементов управления Windows.

В статье MSDN 830033 - Как применять темы Windows XP к надстройкам Office COM это работает только для исполняемых файлов. Предполагается, что библиотеки DLL берут на себя настройку тем (и другие) от своего родительского приложения.

К сожалению, Microsoft Office здесь не очень хорошо работает. Их «тематический» вид достигается с помощью настраиваемых элементов управления, а не с помощью общих элементов управления Windows.

В статье MSDN 830033 - Как применять темы Windows XP к надстройкам Office COM Microsoft объясняет, как применить манифест к DLL, сделав его Isolation Aware таким, чтобы параметры родительского процесса игнорировались.

По сути, это сводится к двум шагам:

  1. Включите ресурс манифеста по умолчанию в ваш процесс, используя идентификатор int-resource, равный 2 (в отличие от 1, который вы обычно используете).
  2. Компилируйте с определение ISOLATION_AWARE_ENABLED. ** Что недоступно в Delphi. **

Я думаю, что (1) прибил, хотя я никогда не совсем уверен, принимает ли brcc32 идентификаторы ресурсов как целые числа или как буквальные строки. Настоящая проблема заключается в (2). Предположительно, это определение изменяет несколько привязок функций DLL.

Кто-нибудь решал эту проблему в Delphi? Стоит ли мне дополнительно исследовать этот маршрут, если я попытаюсь вручную создать контексты активации, или есть другие изящные решения этой проблемы?

6
задан Paul-Jan 30 July 2014 в 11:05
поделиться