Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Как сделать DLL "Isolation Aware" для применения тем Windows к модулям Office, созданным в Delphi

Delphi , Файловая система , DLL и PlugIns

Вопрос, представленный в контексте, касается применения тем Windows к модулям Office, созданным в Delphi, используя технологии "Isolation Aware". Это связано с тем, что по умолчанию DLL, созданные в Delphi, наследуют темы и другие настройки от родительского приложения, что не всегда желательно, особенно при работе с Microsoft Office. В статье будет рассмотрен процесс создания "Isolation Aware" DLL для использования тем Windows в COM-расширениях Office, созданных с помощью Delphi.

Для начала, важно понимать, что Microsoft Office использует собственные кастомные элементы управления для создания "темизированного" вида, который не совместим с тем, как Windows применяет темы через собственные Common Controls. Для решения этой проблемы необходимо сделать DLL "Isolation Aware", что позволит игнорировать настройки темы от родительского процесса.

Шаг 1: Включение ресурса манифеста

Первым шагом является включение стандартного ресурса манифеста в ваш процесс, используя идентификатор ресурса 2 вместо стандартного 1. Это можно сделать в настройках проекта Delphi в разделе "Resource Compiler".

// Пример добавления манифеста в проект Delphi
uses
  System.SysUtils;

const
  MF_ID = 2; // Идентификатор ресурса манифеста

// В проекте Delphi, в разделе "Resources", добавьте новый ресурс типа "Manifest".
// Укажите MF_ID в качестве идентификатора ресурса.

Шаг 2: Компиляция с определением ISOLATION_AWARE_ENABLED

Второй шаг - компиляция проекта с определением макроса ISOLATION_AWARE_ENABLED. Однако, в Delphi этот макрос не доступен напрямую. Тем не менее, существует решение, которое заключается в использовании активационных контекстов.

Использование активационных контекстов

Для того чтобы применить темы Windows к модулям Office, созданным в Delphi, можно использовать активационные контексты. Вот пример кода, который демонстрирует, как это можно реализовать:

type
  TActivationContext = class
  private
    FCookie: LongWord;
    FSucceeded: Boolean;
  public
    constructor Create;
    destructor Destroy; override;
  end;

var
  ActCtxHandle: THandle = INVALID_HANDLE_VALUE;
  // Функции для работы с активационными контекстами...

constructor TActivationContext.Create;
begin
  inherited;
  FSucceeded := (ActCtxHandle <> INVALID_HANDLE_VALUE) and ActivateActCtx(ActCtxHandle, FCookie);
end;

destructor TActivationContext.Destroy;
begin
  if FSucceeded then begin
    DeactivateActCtx(0, FCookie);
  end;
  inherited;
end;

procedure InitialiseActivationContext;
begin
  // Инициализация активационного контекста...
end;

procedure FinaliseActivationContext;
begin
  // Завершение работы активационного контекста...
end;

initialization
  InitialiseActivationContext;

finalization
  FinaliseActivationContext;

var
  ActivationContext: TActivationContext;
begin
  ActivationContext := TActivationContext.Create;
  try
    // GUI код, который будет использовать темы XP
  finally
    ActivationContext.Free;
  end;
end;

Каждый входной пункт, выполняющий GUI работу, должен быть обернут в подобный код.

Заключение

Использование активационных контекстов позволяет сделать вашу DLL "Isolation Aware", что дает возможность применять темы Windows к модулям Office, созданным в Delphi. Это решение было подтверждено разработчиком, который использовал активационные контексты для своего COM-расширения.

Обратите внимание, что приведенный код является упрощенным примером и может потребовать дополнительной настройки и адаптации под конкретный проект.

Создано по материалам из источника по ссылке.

Контекст вопроса заключается в том, как сделать динамически подключаемую библиотеку (DLL), созданную в Delphi, 'Isolation Aware' для применения тем Windows к модулям Office, чтобы они не наследовали темы от родительского приложения.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: DLL и PlugIns ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-05 10:55:17/0.0035009384155273/0