Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Различный цвет фона контрола и его владельца [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


Наверх

Титульная страница Поиск, карта сайта Написать письмо