Форум: "WinAPI";
Текущий архив: 2009.09.06;
Скачать: [xml.tar.bz2];
Вниз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 вся ветка
Форум: "WinAPI";
Текущий архив: 2009.09.06;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.005 c