![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
XP темы, PageControl и TEdit [D6, WinXP]
v © (2008-07-17 16:57:00)Пытаясь использовать темы в программе сделал заплатку для PageControl - сделать TabSheet'ы прозрачными - SetWindowLong(tab.handle,GWL_EXSTYLE,WS_EX_TRANSPARENT)
Однако обнаружил, что при начальном показе формы и при ресайзе PageControl'а у эдита пропадает окантовка (а также у TListBox, TMemo, а вот комбо-бокс чегой-то держится нормально) и появляется лишь при ручной смене страниц или наезде мышкой.
Помогает лишь ручной посыл сообщения WM_MOUSEMOVE уже когда форма видна, т.е. в код загрузки уже не вставишь...
Кто сталкивался? Какие есть идеи?
v (2008-07-18 11:43:00) [1]Хо-хо! Помогло исключение из стиля таб-шита WS_CLIPCHILDREN:
SetWindowLong(TabSheet.handle,GWL_STYLE,GetWindowLong(TabSheet.Handle,GWL_STYLE) and not WS_CLIPCHILDREN);
Вставил в код инициализации формы, работает отлично. Игорь, спасибо! :-)))
Игорь Шевченко (2008-07-17 23:38:00) [2]
> И вообще, при каких условиях "бордюрная" часть вин-контрола
> может использована парентом?
при условии отсутствия WS_CLIPCHILDREN например
tesseract (2008-07-17 22:20:00) [3]
> Ток все равно непонятно - какого лешего отрисовка фона таб-
> шита залазит на законную территорию контрола
По буферу вывода.
Игорь Шевченко (2008-07-17 20:41:00) [4]
> Кхе... С этого я начинал - ваще никакой реакции.
Такая еще функция помогает
SetWindowPos (Handle, 0, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE or
SWP_NOZORDER or SWP_NOACTIVATE or SWP_DRAWFRAME);
v (2008-07-17 18:11:00) [5]ага, похоже, спасибо за наводку. Похоже прийдется перебрать TEdit и компанию на предмет отрисовки, может что получится... Ток все равно непонятно - какого лешего отрисовка фона таб-шита залазит на законную территорию контрола. И вообще, при каких условиях "бордюрная" часть вин-контрола может использована парентом?
tesseract (2008-07-17 17:55:00) [6]
> ладно бы это было всегда, но почему тогда заливка не трогает
> комбо-бокс? у него ж тоже стандартная виндовая рамка...
Комбобокс отрисовываеться через VCL, насколько я помню, а TEdit вроде через стандартно через обработчик TWinControl.
v (2008-07-17 17:41:00) [7]смотрится так, что "прозрачный" TTabSheet (зарисованный градиентом из темы) затирает рамку эдита, т.е. клиентскую часть вин-контрола. ладно бы это было всегда, но почему тогда заливка не трогает комбо-бокс? у него ж тоже стандартная виндовая рамка...
v (2008-07-17 17:29:00) [8]манифест - обзятельно. и свою либу сделал. и свои контролы переделал (чтоб рисовались через ThemeAPI). все автоматизировано, все зашибись, проекты как новогодняя елка... и вот совершенно случайно обнаруживаю такую фигню...
tesseract (2008-07-17 17:20:00) [9]Такая же фигня, когда ставишь всякие "украшательства" на старые системы, манифест, кстати запихивал ?
v (2008-07-17 17:16:00) [10]Кхе... С этого я начинал - ваще никакой реакции. Пока помогло только одно - когда форма уже на экране сделать по клику Edit1.Perform(WM_MOUSEMOVE,0,0). Можно конечно поставить таймер и делать автоматом, но это не наш путь ;-) Главное - непонятно почему, и как к этому "непонятно" подступиться...
Игорь Шевченко (2008-07-17 17:08:00) [11]
> Какие есть идеи?
сказать Invalidate