Привет всем.
Столкнулся с проблемой подбор цветов.
Похоже в аксапте неверно сделан перевод из RGB кодировки цвета в HEX
WinApi класс
методы
X++:
client static container getSysColor(int hColor)
{
int rgb;
DLL _winApiDLL = new DLL(#UserDLL);
DLLFunction _getSysColor = new DLLFunction(_winApiDLL, 'GetSysColor');
_getSysColor.returns(ExtTypes::DWord);
_getSysColor.arg(ExtTypes::DWord);
rgb = _getSysColor.call(hColor);
return [rgb & 0xff, (rgb & 0xff00)>>#offset8 , (rgb & 0xff0000)>>#offset16];
}
X++:
static client server int rgb2int(RGBint r, RGBint g, RGBint b)
{
return r + g<<#offset8 + b<<#offset16;
}
X++:
client server static container rgBint2Con(int rgb)
{
return [rgb & 0xff, (rgb & 0xff00)>>8 , (rgb & 0xff0000)>>16];
}
При переводе поменяны местами красный и синий.
Странно как-то.
Возможно я что-то не понимаю, поправьте меня если я неправ.
Как обнаружил.
Использовал на форме HTML контрол.
Взял цвет фона меню/кнопки из стандартной цветовой схемы winXP
RGB (212, 208, 200)
Перевел таким кодом
X++:
info(Global::int2Hex(Winapi::rgb2int(212, 208, 200), 6));
получил C8D0D4 (визуально такой цвет неправильный, так как если его поставить в текст html документа то цвет фона отдает в голубизну по сравнению с обычным фоном на формах. А если поставить D4D0C8 как выдает сайт
https://colorscheme.ru/color-converter.html то тогда получается то что надо)
X++:
info(Global::int2Hex(Winapi::rgb2int(0, 0, 255), 6));
дает FF0000
а везде в аксапте при формировании цвета в HTML разметке FF0000 - это красный !
Скормил сайту
https://colorscheme.ru/color-converter.html
RGB (212, 208, 200)
и
RGB (0, 0, 255)
получил
D4D0C8
и
#0000FF
Где собака порылась ?
P.S. Ax2009 приложение SP5