![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ListView + lvoOwnerData + темы
mdw © (2007-09-24 18:57:00)Столкнулся с такой проблемой. Использую ListView с lvoOwnerData, соответственно пределил OnLVData. Все хорошо, проблем нет.
Но заметил под WinXP c подключенной темой, что в режиме lvsIcon и lvsSmallIcon, при изменении размера ListView (caClient), содержимое ListView не перерисовывается. Если отключить использование тем, то все нормально. Посмотрел в MSDN про LVN_GETDISPINFO, вроде никаких особенностей для ХР нет.
Сейчас поставил принудительную перерисовку при изменении размера, но это не есть хорошо.
Собственно вопрос, никто не сталкивался с описанной проблемой? Или это глюк WinXP?
mdw (2007-09-28 10:43:00) [1]
> mdw, у тебя винда насколько пропатченая? Просто у меня почти
> SP3, 150 метров разных апдейтов стоит. Может от этого глюки?
> От этих апдейтов правда одни глюки, XP SP2 - последняя
> нормальная винда.
Честно говоря, не знаю, не сам ставил. Но учитываю ленивость наших инженеров, скорее всего просто SP2, без каких либо апдейтов,
> procedure TMainForm.ListView1Resize(Sender: PObj);begin
> ListView1.Invalidate;end;
> , и моргать не будет.
Я так и сделал сейчас, + DoubleBuffered:= True.
homm (2007-09-27 23:48:00) [2]еше интересно, что код
ListView1.ClsStyle := ListView1.ClsStyle or CS_VREDRAW or CS_HREDRAW;
дает потрясающие, не передаваемый эффект :)
homm (2007-09-27 23:41:00) [3]Самое интересное, что глюк легко убирается, если поставить на конртолл буферизацию через OLD_TRANSPARENT. С новой прозрачностью уже не работает. Только не надо думать, что это глюк новой прозрачности :) Наоборот, в новой версии пофиксено, что при надобности перерисовать один небольшой регион рисовалось все подряд.
С новой прозрачностью можно по прежнему сделать
procedure TMainForm.ListView1Resize(Sender: PObj);
begin
ListView1.Invalidate;
end;
, и моргать не будет.
homm (2007-09-27 23:32:00) [4]> Есть еще шанс поправить, поставив FW.NET 3.0
У меня 3.0 стоИт. Да и не в нем дело, дотНЕТ не занимается контроллами.
В Свисте все комбинации из манифестов и их отсутствия, а так-же всех вариантов тем (без темы, упрощенная, Аеро) не дают такого глюка. НО!!! видно, что если есть манифест, то контрол передергивает каждый раз, а если манифеста нет, то только при переносе элементов которые не помещаются. Вывды, я дкмаю сделать не сложно.
mdw, у тебя винда насколько пропатченая? Просто у меня почти SP3, 150 метров разных апдейтов стоит. Может от этого глюки? От этих апдейтов правда одни глюки, XP SP2 - последняя нормальная винда.
Vladimir Kladov (2007-09-27 19:54:00) [5]Думаю, вы просто "испортили" свою винду, доустановив Framework.NET 2.0. Есть еще шанс поправить, поставив FW.NET 3.0, или просто переустановив винду, те. откатиться на FW.NET1.
Попробуйте уже на других машинах, хотя бы на виртуальной.
mdw (2007-09-27 18:56:00) [6]GRAPHICXP_STYLES пробовал, не помогает.
В VCL у меня тоже самое, не перерисовывается.
Yury Sidorov (2007-09-27 18:47:00) [7]В Д7 уже с темами в VCL все нормально.
Vladimir Kladov (2007-09-27 17:47:00) [8]На VCL сделать можно еще. На нем работает?
GRAPHICXP_STYLES подключать пробовали? Может, тоже нужна дополнительная обработка своим кодом.
Моё отношение к темам вы знаете. Меня в этом вопросе больше всего бесит то, что майкросовт свои недоделки фиксить по ходу не собирается, перевалил всё на плечи разработчиков сред программирования. Меня тут на днях спросили на работе про VCL в D6, почему group box не в стиле, если манифест подрубить. Наверное, в bds2006 уже "исправлено". А еще интереснее, что БЕЗ манифеста при включённых темах image list (в D6) больше не умеет загрузить картинки, и приложение падает.
Vladimir Kladov (2007-09-27 17:37:00) [9]Ну не знаю. Под виртуальной машиной проверьте, с чистым XP. Лучше с английским. У меня дистриб только английский, русский при надобности накатываю муёй.
homm (2007-09-27 16:37:00) [10]> [19] mdw © (27.09.07 16:27)
так-же.
mdw (2007-09-27 16:27:00) [11]У меня WinXP SP2 русская.
mdw (2007-09-27 16:25:00) [12]
> У меня .NET серсия 1.1.4322. Не думаю, что он чем-то отличается:
Ага. Один в один...
Vladimir Kladov (2007-09-27 15:56:00) [13]У меня .NET серсия 1.1.4322. Не думаю, что он чем-то отличается:
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<description>Windows Forms Common Control manifest</description>
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="X86" publicKeyToken="6595b64144ccf1df" language="*" />
</dependentAssembly>
</dependency>
</assembly>
homm (2007-09-27 15:42:00) [14]> [15] Vladimir Kladov © (27.09.07 15:33)
> и с правильным манифестом - тоже?
Не знаю, насколко он првильный, я проверял на том, что в архиве, и тот, что в указаном выше месте (Microsoft.NET\Framework\v2.0.50727\).
Vladimir Kladov (2007-09-27 15:33:00) [15]и с правильным манифестом - тоже? Я проверил уже и с темами и на друглм компе. С правильным все нормально. Везде XP SP2 английская, на одной MUI руссий есть, другая чистая..
homm (2007-09-26 22:54:00) [16]> [12] mdw © (26.09.07 22:48)
> может локальный глюк?
Нет. У меня тоже не перерисовывается. Причем даже без тем, достаточно наличие манифеста. Глюк 6-х комонконтроллов?
mdw (2007-09-26 22:53:00) [17]
> А вы темы попробуйте включить.:))
Хотя, если вам не интересно, то можно забить на это дело и закрыть тему, мне тоже не критично.
mdw (2007-09-26 22:48:00) [18]
> Именно он и есть. Его надо положить в папку программы и
> переименовать в test.exe.manifest. У меня сразу все заработало
> как надо (правда, сами темы я так и не включал).
Владимир, ну я же не совсем придурок, положил конечно.:) Ну да ладно, если честно, то не очень критично, на данный момент для меня... Попробую еще дома посмотреть, может локальный глюк? хотя не верю в это я...
А вы темы попробуйте включить.:))
Vladimir Kladov (2007-09-26 19:09:00) [19]Именно он и есть. Его надо положить в папку программы и переименовать в test.exe.manifest. У меня сразу все заработало как надо (правда, сами темы я так и не включал).
mdw (2007-09-26 18:35:00) [20]
> Правильный называется XPThemes.mainfest и лежит в папке
> Windows в подпапках там поищите и найдёте.
Нашел "c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\XPThemes.manifest", но эффект такой же. Пришлите пожалуйста правильный.