![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Различный цвет фона контрола и его владельца [D7, WinXP]
jTommy © (2007-02-23 14:00:00)Добрый день.
Подскажите, почему фона статических контролов и checkbox'ов отличается от фона их владельца (владелец контролов - Tab Control)? Наверное я со стилем окон чего-нить напутал?
Это проявляется только при включенных темах XP.
Скриншот интерфейса:
<img> http://jtommy.by.ru/images/UIBad.png</img>
На всякий случай код создания контролов:
tcMainTabs:=CreateWindowEx(0, WC_TABCONTROL, '', WS_VISIBLE or WS_CHILD or TCS_TABS or TCS_HOTTRACK, 8, 73, MainWndW-22, MainWndH-108, MainWnd, id_tcMainTabs, hInstance, nil);
lbLanguages:=CreateWindowEx(0, 'STATIC', '', WS_VISIBLE or WS_CHILD, 180, 44, 155, 13, tcMainTabs, id_lbLanguages, hInstance, nil);
cbSaveOptions:=CreateWindowEx(0, 'BUTTON', '', WS_VISIBLE or BS_AUTOCHECKBOX or WS_CHILD or WS_TABSTOP, 16, 66, 200, 17, tcMainTabs, id_cbSaveOptions, hInstance, nil);
Rouse_ (2007-02-26 09:59:00) [1]т.е. суть - вызов SetBkMode должен производиться только при включенных темах только у STATIC, во всех остальных случаях производиться вызов CallWindowProc
Rouse_ (2007-02-26 09:56:00) [2]
WM_CTLCOLORSTATIC:
begin
if LParam = lbLanguages then
begin
if UseThemes then
begin
SetBkMode(wParam, TRANSPARENT);
Result:=TransparentBrush;
end
else
// Вызов старой оконной процедуры Tab Control
Result:=CallWindowProc(MainTabsOldProc, hWind, Msg, wParam, lParam);
end
else
Result:=CallWindowProc(MainTabsOldProc, hWind, Msg, wParam, lParam);
end;
jTommy (2007-02-23 18:27:00) [3]
> Посмотри как это у меня решалось: http://rouse.drkb.ru/winapi.
> php#propsheet
Спасиб, помогло, но не на 100%.
Добавил обработку WM_CTLCOLORSTATIC - лейблы стали нормальные, но при отключенных темах GroupBox'ы отображались немного некорректно: http://jtommy.by.ru/images/UIBad1.png
Добавил проверку:
...
WM_CTLCOLORSTATIC: begin
if UseThemes then begin
SetBkMode(wParam, TRANSPARENT);
Result:=TransparentBrush;
end else
// Вызов старой оконной процедуры Tab Control
Result:=CallWindowProc(MainTabsOldProc, hWind, Msg, wParam, lParam);
end;
...
А теперь главное: фон у CheckBox'ов и одного Edit'а стал черного цвета.
http://jtommy.by.ru/images/UIBad2.png
Причем, если у Edit'а убрать свойство ES_READONLY, то он отображается корректно. Наверное так и сделаю, уберу это свойство, а ввод буду контролировать "вручную". А вот что делать с CheckBox'ами, не знаю...
Rouse_ (2007-02-23 15:03:00) [4]Посмотри как это у меня решалось: http://rouse.drkb.ru/winapi.php#propsheet
jTommy (2007-02-23 14:04:00) [5]Правильная ссылка на скриншот: http://jtommy.by.ru/images/UIBad.png