Показать сообщение отдельно
Старый 30.06.2011, 14:57   #56  
dn is offline
dn
Участник
Самостоятельные клиенты AX
 
486 / 159 (6) ++++++
Регистрация: 26.03.2003
Адрес: Москва
Для себя обнаружил, что цветовая гамма полосок на гриде зависит ещё от параметра стиля отображения в WinXP (Экран\Оформление\Окна и кнопки). Если выбран "Стиль WindowsXP" то грид в axapta смотрится вполне приемлемо, но если выбран "Классический стиль" - то грид отображается с контрастными серыми и белыми полосами. В случае "Классического стиля" цвет серых полосок задается системным цветом COLOR_INACTIVEBORDER, как уже написали в этой теме.

В принципе этот цвет можно изменить из axapta через WinAPI. Добавляем в класс WinAPI функцию
X++:
client static void setSysColor(int _sysColor, rgbint _r, rgbint _g, rgbint _b)
{
    DLL         dll = new DLL(#UserDLL);
    DLLFunction dllFunction = new DLLFunction(dll,'SetSysColors');
    Binary     rgb          = new Binary(#offset4);
    Binary     syscolor     = new Binary(#offset4);
;
    syscolor.dWord(#Offset0,_sysColor);
    rgb.dWord(#Offset0, winapi::rgb2int(_r,_g,_b));
    dllFunction.arg(ExtTypes::DWord, ExtTypes::Pointer, ExtTypes::Pointer);
    dllFunction.call(1, syscolor, rgb);
}
Вот пример её вызова.
X++:
static void setInactivBorderColor(Args _args)
{
    #WinAPI
    ;
    WinAPI::setSysColor(#COLOR_INACTIVEBORDER, 250,250,250);
}
Остается добавить соответствующую настройку для пользователя и вызывать при старте axapta.
За это сообщение автора поблагодарили: Logger (5), alex55 (3).