|
С прозрачностью Treeview и Listview никто не поможет?
|
|||
---|---|---|---|
#18+
Ну с Treeview немного повозился. В соседней теме Массовый сабклассинг (OldXXXWindowProc?) и прозрачность ComboBox картинка. пока что-то не очень -автоматом только background - работает это только на классике и XP-стиле, на висте-нет. Да и тот прыгает. С item-ами пока смог через CustomDraw изменить цвет текста, ну при желании background: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27.
Но как сделать background прозрачным, я не понял. По идее подрисовать туда кусок картинки, но не уверен. Иконку например на кнопке можно нарисовать так: Код: vbnet 1.
Наверно можно и кусок заготовленного brashа бухнуть как то, если hdc известно. Но непонятно что при этом будет с родным текстом нода и выделением. Все-таки надеюсь что Node- это что-то более менее стандартное и есть какой-нибудь WM_CTLCOLOR XXX ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2012, 04:24 |
|
С прозрачностью Treeview и Listview никто не поможет?
|
|||
---|---|---|---|
#18+
Ну, для listview "прозрачность" сделал. Много чего перепробовал, но решение получилось довольно простое. При инициализации LVM_SETBKCOLOR и LVM_SETTEXTBKCOLOR выставляется в CLR_NONE один раз, а по событию WM_ERASEBKGND (Listview сам себя ловит) на hdc ListView отрисовывается кусок картинки снизу стандартным кодом и делается RedrawWindow(Form1.ListView1.hwnd -это очень стабильно получилось. Замечу, что в отличии от установки картинки фона, моя картинка не будет прокручиваться при прокрутке Listview. Единственное, с LVS_EX_DOUBLEBUFFER ничего не получается. Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40.
С Treview так не получается, пока фигня и уже надоело этим заниматься. Походу там в отличии от ListView нельзя задать пустой цвет отрисовки фона CLR_NONE , можно задать -1, но это похоже не то. Т.е. я не удовлетворен пока даже с background -сейчас работает и "на вистах", но скроллит страшно при нажатии на +/- .Для treview пока срабатывает 2 кода: WM_CTLCOLOR*** картинки-контейнера и WM_ERASEBKGND самого treeview на себя. И непонятно чего делать с итемами. Можно конечно пытаться отрисовывать фон каждого item через customdraw, но тяжело это и не факт что он не перерисует, т.к. нет инструкции CLR_NONE для treeview. На treeview короче решил забить пока. Тест-проект во вложении, м.б. кто допилит. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2012, 02:47 |
|
С прозрачностью Treeview и Listview никто не поможет?
|
|||
---|---|---|---|
#18+
Может, просто перейти на VB.NET? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2012, 03:44 |
|
С прозрачностью Treeview и Listview никто не поможет?
|
|||
---|---|---|---|
#18+
AndreTMМожет, просто перейти на VB.NET? Я делал тут попытку, но пока отмел ее. Можно подумать там такие вопросы проще решаются. Ну м.б. есть пара-тройка контролов которые "типа красивше сделаны". Какая разница, все хитрости делаются на API, а из vb6 к ним доступ думаю проще. Декларировать API так понимаю не надо только в голом C++, ибо подключаешь h-файл и все есть (это если компилятор не послал с кучей ошибок). ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2012, 04:40 |
|
С прозрачностью Treeview и Listview никто не поможет?
|
|||
---|---|---|---|
#18+
Так в том-то и дело, что Вам всё равно приходится оборачивать (VB6 + API) + собственный сабклассинг... Конечно, с одной стороны, нельзя считать потерянным то время, что вы затратили на изучение WinAPI, ибо интерфейс един для всей ОС,на каком бы языке вы не программмировали; а с другой - если Вам нужны действительно все "красивости в новом стиле" - так и пользуйте сразу тот фреймворк, который под это и заточен... ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2012, 05:50 |
|
С прозрачностью Treeview и Listview никто не поможет?
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2012, 09:27 |
|
С прозрачностью Treeview и Listview никто не поможет?
|
|||
---|---|---|---|
#18+
HandKotможет подойдет Изменить цвет фона ActiveX TreeView или речь не о том? То что вы предлагаете из моего примера делается в одну строчку: Код: vbnet 1. 2.
Ну плюс отменяете попытку отрисовки фона в WM_ERASEBKGND для TreeView + не пытаться ловить WM_CTLCOLORXXX от TreeView1. До кучи надо задать фон текста для итемов: Код: vbnet 1. 2.
-см. код в начале топика-он закомментирован в примере Но речь не о том. Надо чтобы фоном (и общим, и для итемов) был не цвет, а кусок картинки родительского Picturebox. И смысл, что для Treview не получается цвет пустым (CLR_NONE) как для listview, т.е. Treeview всегда отрисовывает "какой-то цвет" (заданный, либо системный если -1) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2012, 15:36 |
|
С прозрачностью Treeview и Listview никто не поможет?
|
|||
---|---|---|---|
#18+
Может вырезать кусок окна тривью по маске? Как-то так: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2012, 15:54 |
|
С прозрачностью Treeview и Listview никто не поможет?
|
|||
---|---|---|---|
#18+
Antonariy, что-то как-то не хочется так делать, не говоря о том что с этим надо еще долго разбираться. Да бог с ним с деревом, в основном окне приложения (где красивости оправданы) мне нужны только Listview. Но меня больше беспокоит: с LVS_EX_DOUBLEBUFFER ничего не получается Небольшая мелькалка на маленьком списке - это терпимо. Но там другая проблемка: Если делать без LVS_EX_DOUBLEBUFFER то возникают некот. визуальные проблемы с отображением шрифта. Т.е. текст "слегка мутирует" - буквы могут становиться то чуть толще, то чуть тоньше и т.п. Причем на тестовом примере это почему-то не видно, а вставил в приложение, добовил Segoue 9 (хотя и с обычным MS Sans Serif 8 то же) и на тебе -строчка обновилась -буквы толще, мышкой провел -чуть раздвоились, еще провел - тонкие. Не так чтобы очень бросается, но все же. Почему так может быть? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2012, 16:21 |
|
С прозрачностью Treeview и Listview никто не поможет?
|
|||
---|---|---|---|
#18+
Дмитрий77Но меня больше беспокоит: с LVS_EX_DOUBLEBUFFER ничего не получается Небольшая мелькалка на маленьком списке... Но там другая проблемка: Если делать без LVS_EX_DOUBLEBUFFER то возникают некот. визуальные проблемы с отображением шрифта. Т.е. текст "слегка мутирует" - буквы могут становиться то чуть толще, то чуть тоньше и т.п. ... Тут обнаружил (и раньше это знал, но подзабыл), что очень плохо себя ведет Код: vbnet 1.
Хочу сказать что VB-шный вариант установки текста в Subitems (речь о Control 5!) приводит чуть не к автоматическому обновлению всего ListView, походу к авто-вызову EnsureVisible если какой-то item selected, и как итог к глючной прокрутке, которую не заказывали и лишней мелькалке. Посему если допустим какие-то строчки (скажем отдельные subitem) обновляются достаточно часто по смыслу программы, я тут например решил в subitem "секундомер" засунуть (в белый тьфу-тьфу, не в прозрачный), то надо действовать однозначно через API. Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Хотя конечно опять же не без проблем: 1. Эта функция, если пробовать ее применить к основному item (и listview не имеет картинок), т.е. Код: vbnet 1.
неизменно вызывает crash приложения Видимо .pszText определенный как As String все-таки не совсем правильно (по хорошему там IntPtr), неохота счас копаться, для subitem и так работает. 2. На "прозрачном" Listview в стиле "Explorer" (если строчка выделена ) обновление subitem по методу Код: vbnet 1.
приводит к изменению "голубоватой прозрачной подсветки" на матовую только для subitem (а не всего item), это не очень красиво выглядит. Поэтому для "прозрачного" listview пока эти мысли применить таки не смог, приходится менять все тексты "через VB". ... |
|||
:
Нравится:
Не нравится:
|
|||
27.04.2013, 12:07 |
|
С прозрачностью Treeview и Listview никто не поможет?
|
|||
---|---|---|---|
#18+
Дмитрий77, U menya tut vopros, ho4u sebe na c# sdelat listview prozra4nim, i ni kak ne polu4aetsya, mogli bi vi podskazat, a lu4she kod) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2013, 09:47 |
|
С прозрачностью Treeview и Listview никто не поможет?
|
|||
---|---|---|---|
#18+
Alzhansdelat listview prozra4nim... mogli bi vi podskazat, a lu4she kod[/ Ну и? Уже давно подсказал, выложил на блюдечке и обвел золотой каемочкой. Принцип для прозрачного самого Listview: 13388443 Принцип для прозрачных headers: А Header у Listview прозрачным сделать можно? Оговорка: это сделано для "одного столбца", если их больше надо пытаться зарисовывать фоном каждый item персонально, я этого пока не пытался. Крайняя работоспособная версия (в смысле проект и коды целиком), кот. включает подгонку высоты headers здесь: Headers in ListView: проблема с картинками: высота и перерисовка. Там же прилагается screenshort как это выглядит на XP и на Windows 8. 14269816 При желании header можно чуть подвинуть вправо пикселя на 2, делается через SetWindowPos без изменения высоты, в коде есть закомментированные строчки на эту тему. Но это увеличит к-во перерисовок, что при отсутствии double buffer еще увеличит мелькалку (а применить double buffer к данной модели прозрачности не получится) А вот по поводу Alzhanna c# sdelat Как утверждалось выше: AndreTM- так и пользуйте сразу тот фреймворк, который под это и заточен... Я в C# почти не бум-бум но даю вам 99%, что автоматом вы это ни через какой готовый фреймворк не сделаете. Т.е. по сути вам надо переписывать мои коды (как вариант) на C# с учетом техники применяемой в .net и C#. Как делается сабклассинг и т.п. в .NET уж смотрите примеры где-нибудь. А я извините на .NET пока забил. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2013, 17:36 |
|
С прозрачностью Treeview и Listview никто не поможет?
|
|||
---|---|---|---|
#18+
Это все для .net не подходит, там не common controls. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2013, 23:27 |
|
С прозрачностью Treeview и Listview никто не поможет?
|
|||
---|---|---|---|
#18+
Antonariy.net... там не common controls. Тогда я вообще не понимаю зачем этот .Net нужен. Потому как нормальные винды насколько я для себя понял базируются именно на Common Controls. Хочешь сказать, что все ListView и Treview что там есть от балды нарисованные создателями .Net? И не имеют корней в тех что мы тут пользуем? С другой стороны, что, нельзя создать в .Net тот же Listview через CreateWindowEx? Но опять же, нафик тогда этот .Net вообще нужен. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2013, 23:38 |
|
С прозрачностью Treeview и Listview никто не поможет?
|
|||
---|---|---|---|
#18+
:) На самом деле не нужно (конечному пользователю) именно то, что с таким трудом делаешь ты. Пользователю нужна простота и очевидность, а их можно достигнуть и без графических вычурностей. Дмитрий77Потому как нормальные винды насколько я для себя понял базируются именно на Common Controls.До тех пор, пока metro полностью не вытеснит gdi. Дмитрий77Но опять же, нафик тогда этот .Net вообще нужен.Для winforms-приложений действительно не особо нужен, но это процентов десять его возможностей. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2013, 23:59 |
|
С прозрачностью Treeview и Listview никто не поможет?
|
|||
---|---|---|---|
#18+
Дмитрий77 Хочешь сказать, что все ListView и Treview что там есть от балды нарисованные создателями .Net? И не имеют корней в тех что мы тут пользуем?На самом деле достоверно не знаю, сужу лишь по названиям классов окон - они другие (К слову, лабелы там являются окнами, а не рисунками на форме. Никчемная трата ресурсов.). Нужно сабклассить и разбирать механику, не исключено, что всё отличие лишь в названии класса. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.05.2013, 00:04 |
|
С прозрачностью Treeview и Listview никто не поможет?
|
|||
---|---|---|---|
#18+
AntonariyПользователю нужна простота и очевидность, а их можно достигнуть и без графических вычурностей. С точки зрения функционала ДА. Но я над внешней простотой очень даже работаю. Кто тебе сказал что это не так? AntonariyНа самом деле не нужно (конечному пользователю) именно то, что с таким трудом делаешь ты. Программа должна иметь товарный вид, если хочешь получать денюжку. Интерфейс, с ходу наваянный на VB6 через 6-е контролы (а хоть бы и через то что предлагает голый .Net) на семерке у любого пользователя вызовет естественный рвотный рефлекс и он прогу не купит. По крайней мере с полпинка сделает вывод что это дешевый самопал писанный "гавнокодами" в подпольных условиях. Естественно, прозрачностью я не злоупотребляю. Мне надо было создать морду софтфона. Обычно рисуются скины где-нибудь в фотошопе и через кастом дро (и вряд ли это опять же легче чем делать прозрачность) худо бедно криво внедряются -при этом на разных ОС выглядит все это одинаково кривовато. Я принял другое решение - все по максимуму прозрачно, юзер может менять картинку и подбирать 3-4 цвета шрифтов. Вот и все скины (новая картинка - новый скин), а все контролы стандартные с неглючным функционалом и этот "родной" WIN стиль просматривается сквозь "прозрачности" что думаю производит хорошее впечатление, а возможности стандартного функционала стараюсь использовать по максимуму. Чем плохо? Вполне оправдано - это морда проги. Что еще? "Строгий пользователь" может отключить всю эту "байду" и работать с "белым Listview", серыми кнопками, черным шрифтом - просто и очевидно без графических вычурностей. Antonariy, по одежке встречают. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.05.2013, 19:29 |
|
|
start [/forum/topic.php?fid=60&msg=38017209&tid=2156986]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
44ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
others: | 16ms |
total: | 166ms |
0 / 0 |