[CDR 2017-2021] Получить цвета элементов управления

fersat

Участник
Топикстартер
Сообщения
31
Реакции
21
Может кто знает как программно получить RGB значения цветов элементов управления Corel?

На данный момент я знаю как получить цвета CommandBar, заголовка окна, рабочей области и TreeView:
Код:
{$APPTYPE CONSOLE}
uses
  Windows,ActiveX,VGCore_TLB,SysUtils;
var
  CorelCLSID:      TGUID;
  CorelApp:        IVGApplication;
  CorelCUIApp:     ICUIApplication;
  CustomizationDS: ICUIDataSourceProxy;
begin
  CoInitialize(0);
  CLSIDFromProgID('CorelDRAW.Application.20',CorelCLSID);
  CoCreateInstance(CorelCLSID,nil,CLSCTX_LOCAL_SERVER,IVGApplication,CorelApp);
  CorelApp.QueryInterface(IID_ICUIApplication,CorelCUIApp);
  CustomizationDS:=CorelCUIApp.DataContext.GetDataSource('CustomizationDS');
  writeln('Panel Color','0x':9,IntToHex(SendMessageW(GetParent(CorelApp.ActiveWindow.Handle),$B451,$136,0),8)); //принимает параметры в диапазоне 0x132 - 0x138, если ошибка, то альфа-канал будет равен 0
  writeln('Border color','0x':8,IntToHex(CustomizationDS.GetProperty('WindowBorderColor'),8));
  writeln('Workspace color','0x':5,IntToHex(CustomizationDS.GetProperty('PageMatColor'),8)); //есть ещё ImageMatColor - не знаю что это
  readln;
end.

Не могу найти цвет кнопок. Ну точнее я понял, что все цвета хранит объект WindowSchemeManager (указатель можно получить через функцию WindowPainter::WindowSchemeManager::Instance библиотеки WindowPainter.dll), но внутренняя структура объекта зависит от версии компилятора, которым собран корел, так что этот вариант отпадает.
 

fersat

Участник
Топикстартер
Сообщения
31
Реакции
21
В ходе исследований наткнулся на оконное сообщение 0xB001, корел отсылает его всем дочерним окнам при изменении цветовой схемы. Также корел регистрирует сообщение 'CrlThemingThemeChangeMsg' через RegisterWindowMessageW, но его отловить не получилось. Может быть кому нибудь пригодится.
 

zollinger

Участник
Сообщения
616
Реакции
190
Просто из любопытства - а зачем?