Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.09.06;
Скачать: CL | DM;

Вниз

XP темы, PageControl и TEdit   Найти похожие ветки 

 
v   (2008-07-17 16:57) [0]

Пытаясь использовать темы в программе сделал заплатку для PageControl - сделать TabSheet"ы прозрачными - SetWindowLong(tab.handle,GWL_EXSTYLE,WS_EX_TRANSPARENT)

Однако обнаружил, что при начальном показе формы и при ресайзе PageControl"а у эдита пропадает окантовка (а также у TListBox, TMemo, а вот комбо-бокс чегой-то держится нормально) и появляется лишь при ручной смене страниц или наезде мышкой.

Помогает лишь ручной посыл сообщения WM_MOUSEMOVE уже когда форма видна, т.е. в код загрузки уже не вставишь...

Кто сталкивался? Какие есть идеи?


 
Игорь Шевченко ©   (2008-07-17 17:08) [1]


> Какие есть идеи?


сказать Invalidate


 
v   (2008-07-17 17:16) [2]

Кхе... С этого я начинал - ваще никакой реакции. Пока помогло только одно - когда форма уже на экране сделать по клику Edit1.Perform(WM_MOUSEMOVE,0,0). Можно конечно поставить таймер и делать автоматом, но это не наш путь ;-) Главное - непонятно почему, и как к этому "непонятно" подступиться...


 
tesseract ©   (2008-07-17 17:20) [3]

Такая же фигня, когда ставишь всякие "украшательства" на старые системы, манифест, кстати запихивал ?


 
v   (2008-07-17 17:29) [4]

манифест - обзятельно. и свою либу сделал. и свои контролы переделал (чтоб рисовались через ThemeAPI). все автоматизировано, все зашибись, проекты как новогодняя елка... и вот совершенно случайно обнаруживаю такую фигню...


 
v   (2008-07-17 17:41) [5]

смотрится так, что "прозрачный" TTabSheet (зарисованный градиентом из темы) затирает рамку эдита, т.е. клиентскую часть вин-контрола. ладно бы это было всегда, но почему тогда заливка не трогает комбо-бокс? у него ж тоже стандартная виндовая рамка...


 
tesseract ©   (2008-07-17 17:55) [6]


> ладно бы это было всегда, но почему тогда заливка не трогает
> комбо-бокс? у него ж тоже стандартная виндовая рамка...


Комбобокс отрисовываеться через VCL, насколько я помню, а TEdit вроде через стандартно через обработчик TWinControl.


 
v   (2008-07-17 18:11) [7]

ага, похоже, спасибо за наводку. Похоже прийдется перебрать TEdit и компанию на предмет отрисовки, может что получится... Ток все равно непонятно - какого лешего отрисовка фона таб-шита залазит на законную территорию контрола. И вообще, при каких условиях "бордюрная" часть вин-контрола может использована парентом?


 
Игорь Шевченко ©   (2008-07-17 20:41) [8]


> Кхе... С этого я начинал - ваще никакой реакции.


Такая еще функция помогает

     SetWindowPos (Handle, 0, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE or
       SWP_NOZORDER or SWP_NOACTIVATE or SWP_DRAWFRAME);


 
tesseract ©   (2008-07-17 22:20) [9]


> Ток все равно непонятно - какого лешего отрисовка фона таб-
> шита залазит на законную территорию контрола


По буферу вывода.


 
Игорь Шевченко ©   (2008-07-17 23:38) [10]


>  И вообще, при каких условиях "бордюрная" часть вин-контрола
> может использована парентом?


при условии отсутствия WS_CLIPCHILDREN например


 
v   (2008-07-18 11:43) [11]

Хо-хо! Помогло исключение из стиля таб-шита WS_CLIPCHILDREN:

SetWindowLong(TabSheet.handle,GWL_STYLE,GetWindowLong(TabSheet.Handle,GWL_STYLE)  and not WS_CLIPCHILDREN);

Вставил в код инициализации формы, работает отлично. Игорь, спасибо! :-)))



Страницы: 1 вся ветка

Текущий архив: 2009.09.06;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.013 c
15-1246798358
TIF
2009-07-05 16:52
2009.09.06
FF3.5 - Включить приватный просмотр


2-1247107778
Abcdef123
2009-07-09 06:49
2009.09.06
Вопрос по применению TStringList.


2-1246969271
Алексей111
2009-07-07 16:21
2009.09.06
Table is read only


2-1246361382
IrinaIrina
2009-06-30 15:29
2009.09.06
StringGrid записать в таблицу SQL


2-1246784572
Neket
2009-07-05 13:02
2009.09.06
Как преобразовать string в PAnsiChar.