CheckBox в TreeView из Common Controls 5.0

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

CheckBox в TreeView из Common Controls 5.0

Сообщение ger_kar » 30.09.2012 (Вс) 13:29

Как можно сделать и можно ли вообще CheckBox в TreeView из состава Microsoft Windows Common Controls 5.0? Речь именно о 5 версии. Раньше в 6 делал без проблем, но как оказалось нужное свойство в Microsoft Windows Common Controls 5.0 напрочь отсутствует, а 6 версия не поддерживает стили XP. По форуму и в интернете искал, но ничего вразумительного по этой теме не нашел.
Бороться и искать, найти и перепрятать

pronto
Постоялец
Постоялец
 
Сообщения: 597
Зарегистрирован: 04.12.2005 (Вс) 6:20
Откуда: Владивосток

Re: CheckBox в TreeView из Common Controls 5.0

Сообщение pronto » 01.10.2012 (Пн) 17:20

Конечно можно! Это делается установкой специального стиля:
Код: Выделить всё
   ' установка стиля в TreeView для отображения CheckBox'ов

   Dim TreeStyle&

   ' получить уже установленный стиль
   TreeStyle& = GetWindowLong(TreeView_HWND, GWL_STYLE)

   ' добавление стиля
   TreeStyle& = TreeStyle& Or TVS_CHECKBOXES

   ' установка нового стиля
   SetWindowLong ByVal TreeView_HWND, ByVal GWL_STYLE, ByVal TreeStyle&


P.S. Тема, конечно же, не нова...
O, sancta simplicitas!

Sam777e
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 157
Зарегистрирован: 16.09.2010 (Чт) 4:33

Re: CheckBox в TreeView из Common Controls 5.0

Сообщение Sam777e » 02.10.2012 (Вт) 0:24

pronto писал(а): ' установка нового стиля
SetWindowLong ByVal TreeView_HWND, ByVal GWL_STYLE, ByVal TreeStyle&


Вероятно, случайно не стерто ?

SetWindowLong ByVal TreeView_HWND, ByVal GWL_STYLE, ByVal TreeStyle&


С уважением
Здоровья и удачи

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: CheckBox в TreeView из Common Controls 5.0

Сообщение ger_kar » 02.10.2012 (Вт) 19:11

Спасибо за подсказку.
pronto писал(а):P.S. Тема, конечно же, не нова...
В процессе поиска информации я на эту тему натыкался, но она немного не о том :).
Бороться и искать, найти и перепрятать

pronto
Постоялец
Постоялец
 
Сообщения: 597
Зарегистрирован: 04.12.2005 (Вс) 6:20
Откуда: Владивосток

Re: CheckBox в TreeView из Common Controls 5.0

Сообщение pronto » 03.10.2012 (Ср) 0:48

Вторая половина той темы о том, как получать/управлять состояние/м чекбокса.
O, sancta simplicitas!

bon818
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 267
Зарегистрирован: 29.08.2009 (Сб) 4:49
Откуда: Ташкент

Re: CheckBox в TreeView из Common Controls 5.0

Сообщение bon818 » 03.10.2012 (Ср) 4:45

ЕСТЬ-ЖЕ НОРМАЛЬНЫЕ TreeView ControlЫ
ВОТ НАПРИМЕР
http://www.Planet-Source-Code.com/vb/sc ... 7&lngWId=1

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: CheckBox в TreeView из Common Controls 5.0

Сообщение ger_kar » 03.10.2012 (Ср) 6:23

Спасибо, попробую :) .
Бороться и искать, найти и перепрятать

ark
Бывалый
Бывалый
 
Сообщения: 216
Зарегистрирован: 18.07.2011 (Пн) 0:57

Re: CheckBox в TreeView из Common Controls 5.0

Сообщение ark » 06.10.2012 (Сб) 8:38

Если картинки в TreeView не критичны, то можно использовать их, особенно если надо TreeState чекбоксы - на голом API это слишком геморрно.
TV_Images.zip
(2.45 Кб) Скачиваний: 104

Кстати, там в ссылке искали hItem из ноды.
(c) Brad Martinez, 1999:
Код: Выделить всё
Private Function hItemFromNode(nod As Node) As Long
   CopyMemory hItemFromNode, ByVal (ObjPtr(nod) + 68), 4&
End Function

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: CheckBox в TreeView из Common Controls 5.0

Сообщение ger_kar » 06.10.2012 (Сб) 8:47

Как оказалось с поиском хендла ноды все предельно просто :)
Его можно просто и без извращений взять по соответствующему смещению и все :)
Спасибо, информация для меня оказалась очень кстати.
Бороться и искать, найти и перепрятать

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: CheckBox в TreeView из Common Controls 5.0

Сообщение Хакер » 06.10.2012 (Сб) 10:59

Дичайший блек-кодинг.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ark
Бывалый
Бывалый
 
Сообщения: 216
Зарегистрирован: 18.07.2011 (Пн) 0:57

Re: CheckBox в TreeView из Common Controls 5.0

Сообщение ark » 06.10.2012 (Сб) 12:03

Ну дык работает жеж. Уже 13 лет. :D
Брэд расковырял как память вокруг VB Node объекта (причем и 5-го и 6-го осх), так и вокруг hItem. И на 68 оффсете ВСЕГДА hItem. Чего ж тут дикого? Или MS седьмой осх выпустит?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: CheckBox в TreeView из Common Controls 5.0

Сообщение Хакер » 06.10.2012 (Сб) 12:27

ark писал(а):Или MS седьмой осх выпустит?

Запросто. За последние 14 лет с момента выхода VB6 она выпускала и новые версии Common Controls и новые версии msvbvm60.dll.

Что характерно — не какие-то там мелочи исправляли, а меняли формат внутренних структур, вклинивая в них новые поля (не в конец структур, что особо приятно).
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ark
Бывалый
Бывалый
 
Сообщения: 216
Зарегистрирован: 18.07.2011 (Пн) 0:57

Re: CheckBox в TreeView из Common Controls 5.0

Сообщение ark » 06.10.2012 (Сб) 12:44

Вот за это их люблю до зубовного скрежета. Причем меняют они не только формат внутренних структур, но и вполне себе документированные вещи. В 64 разрядной винде, например, GetSystemDirectory для VB (32 разрядное приложение жеж) по честному даёт строку Windiws%\System32. Но любая подстановка этой строки хоть в Dir, хоть в API-шные вызовы втихую меняется на c:\Windows\SysWOW64! Теперь во все старые проги надо добавлять алиас SystemNative.
В comctrl.dll, в пятой, кажись, версии, поменяли офсет lParam от hItem c 28 на 16 (передвинули вперёд).
Но, что касается осх - это вряд-ли (последняя версия осх 2004 г.). А если dll поменяют - то и осх весь загнётся.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: CheckBox в TreeView из Common Controls 5.0

Сообщение ger_kar » 06.10.2012 (Сб) 15:57

ark писал(а):Или MS седьмой осх выпустит?
Так даже если и выпустит он же по идее не заменит собой предыдущий, а просто будет сосуществовать с ранними версиями, как сосуществуют 5 и 6 версии, поэтому ничего страшного не произойдет я думаю. Ну а с новым контролом может и такой кодинг не понадобится.
И кстати этот казалось бы блек-кодинг тем не менее куда как более понятен, чем обходной вариант с кучей кода. На этот код бросил только взгляд и сразу понятно, что происходит.
Бороться и искать, найти и перепрятать

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: CheckBox в TreeView из Common Controls 5.0

Сообщение Хакер » 06.10.2012 (Сб) 16:04

Нет, они выпустят новую версию 6-го с тем же CLSID-ом. Иначе какой смысл выпускать.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ark
Бывалый
Бывалый
 
Сообщения: 216
Зарегистрирован: 18.07.2011 (Пн) 0:57

Re: CheckBox в TreeView из Common Controls 5.0

Сообщение ark » 07.10.2012 (Вс) 2:43

Хакер писал(а):новую версию 6-го с тем же CLSID-ом
Ага, ADO уже выпустили. В SP1для семёрки все IID'ы для всех интерфейсов поменяли.
Кстати, насчет black_coding - VarPtr и GetMem4 - это тоже dirty hack? :D

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: CheckBox в TreeView из Common Controls 5.0

Сообщение Хакер » 07.10.2012 (Вс) 4:23

ark писал(а):Кстати, насчет black_coding - VarPtr и GetMem4 - это тоже dirty hack? :D

По-моему каждому человеку на земле очевидно, что нет.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ark
Бывалый
Бывалый
 
Сообщения: 216
Зарегистрирован: 18.07.2011 (Пн) 0:57

Re: CheckBox в TreeView из Common Controls 5.0

Сообщение ark » 07.10.2012 (Вс) 5:14

Мне - не очевидно. Где msdn'овская документация (неофициальные статьи не предлагать)? Что мешает в следующей версии msvbvm поменять GetMem4 на GetMemoryLong а VarPtr обратно на VARSEG?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: CheckBox в TreeView из Common Controls 5.0

Сообщение Хакер » 07.10.2012 (Вс) 7:54

ark, у меня впечатление, что ты троллишь. Но если не троллишь, то у тебя безнадёжно кривое восприятия мира. Я не хочу участвовать в его исправлении.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ark
Бывалый
Бывалый
 
Сообщения: 216
Зарегистрирован: 18.07.2011 (Пн) 0:57

Re: CheckBox в TreeView из Common Controls 5.0

Сообщение ark » 07.10.2012 (Вс) 8:23

Как хочешь. Как говорил Эйнштейн, всё в этом мире (и кривизна в т.ч.) - относительно.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 26

    TopList