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

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

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


Наверх

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