Listview - как скрыть группу (Group)

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
djalex777
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 23.03.2006 (Чт) 16:02

Listview - как скрыть группу (Group)

Сообщение djalex777 » 06.07.2009 (Пн) 21:30

Создаю ListView. Строю список из 4-х элементов. Первым двум назначаю группу Group1, оставшимся Group2. Возникла задача - нужно скрыть Group2. Так чтобы его не было видно. Никак не могу найти решения:
Попробовал следующее:
1. Строкам у которых группа Group2 выставляю группу в Nothing. Под Вистой работает - показывает только строки с группой Group1, под XP работает так - сначала отображаются все строки группы Group1, а потом все остальные.
2. Посмотрел у группы свойство State, но, как ооказалось, оно может принимать значение только LVGS_NORMAL.
Может кто сталкивался с такой задачей?

JohnK
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 874
Зарегистрирован: 03.08.2002 (Сб) 0:35
Откуда: 48.02` 37.58`

Re: Listview - как скрыть группу (Group)

Сообщение JohnK » 06.07.2009 (Пн) 22:09

А где ты там Group нашел? Ты имеешь ввиду ItemData ?
SELECT * FROM girls WHERE tits NOT NULL AND age BETWEEN 18 AND 25 ORDER BY Beauty

djalex777
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 23.03.2006 (Чт) 16:02

Re: Listview - как скрыть группу (Group)

Сообщение djalex777 » 06.07.2009 (Пн) 22:14

Я имею ввиду то, что написал выше.

Добавил:
Хм.. WinXP SP2 попробовал задать группе State = LVGS_COLLAPSED
Код: Выделить всё
function ...
Dim tLVG As LVGROUP
Dim lR As Long
   tLVG.cbSize = Len(tLVG)
   tLVG.mask = LVGF_STATE
   tLVG.State = LVGS_COLLAPSED
   tLVG.iGroupId = lPtrGroup
   
   lR = SendMessage(m_hWnd, LVM_SETGROUPINFO, lPtrGroup, tLVG)
end function

Значение задалось верно (функция вернула lPtrGroup) и если его читать с помощью LVM_GETGROUPINFO, возвращется то, что я и задаю. Но вот на отображении ListView групп это никак не сказывается. В чём же дело-то? Версия ComCtl32.dll вроде шестая. Рядом с экзешником кидаю манифест с указанием версии.

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Re: Listview - как скрыть группу (Group)

Сообщение BV » 07.07.2009 (Вт) 12:31

Вообще, маска LVGF_STATE зарезервирована и не используется. А LVM_SETGROUPINFO работает только с Vista и выше
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

djalex777
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 23.03.2006 (Чт) 16:02

Re: Listview - как скрыть группу (Group)

Сообщение djalex777 » 07.07.2009 (Вт) 13:14

BV писал(а):LVM_SETGROUPINFO работает только с Vista и выше

Это ты где такое вычитал? LVM_SETGROUPINFO работает начиная с WinXP и выше. Флаг stateMask при использовании LVM_SETGROUPINFO работает только начиная с Vista, но он мне и не нужен.
А вот по-поводу LVGF_STATE походу он действительно зарезирвирован для WinXP, но об этом все молчат, можно только самому догадываться ...

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Re: Listview - как скрыть группу (Group)

Сообщение BV » 07.07.2009 (Вт) 13:19

Это ты где такое вычитал? LVM_SETGROUPINFO работает начиная с WinXP и выше.


http://msdn.microsoft.com/en-us/library/bb774769.aspx
LVGF_STATE
Reserved.

=> рабочая только stateMask, а она
stateMask
Mask used with LVM_GETGROUPINFO (Microsoft Windows XP and Windows Vista) and LVM_SETGROUPINFO (Windows Vista only) to specify which flags in the state value are being retrieved or set.

Удивительное рядом, что называется...
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

djalex777
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 23.03.2006 (Чт) 16:02

Re: Listview - как скрыть группу (Group)

Сообщение djalex777 » 07.07.2009 (Вт) 13:43

Эээ... Там написано (а точнее в описании LVM_SETGROUPINFO) - минимальная ОС WinXP. И собственно оно так и есть - LVM_SETGROUPINFO работает и в WinXP. Так что я не понял первую часть твоего предыдущего поста... По-поводу второй, код, который я привел выше работает под Vista без проблем и где в нём stateMask? Просто то, что они написали про LVGF_STATE Reserved. относится получается к WinXP, но не к Vista

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Re: Listview - как скрыть группу (Group)

Сообщение BV » 07.07.2009 (Вт) 14:06

Мне тогда не совсем понятно назначение поля stateMask, если в Vista твой код работает. По MSDN, не должен. А по поводу
LVM_SETGROUPINFO работает только с Vista и выше

Я имел ввиду касательно только установки состояния, а не вообще.
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

JohnK
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 874
Зарегистрирован: 03.08.2002 (Сб) 0:35
Откуда: 48.02` 37.58`

Re: Listview - как скрыть группу (Group)

Сообщение JohnK » 07.07.2009 (Вт) 17:55

А в чем, собственно, состоит задача? Может проще сделать штатными функциями VB?
SELECT * FROM girls WHERE tits NOT NULL AND age BETWEEN 18 AND 25 ORDER BY Beauty

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

Re: Listview - как скрыть группу (Group)

Сообщение Хакер » 07.07.2009 (Вт) 18:12

Всенепременно...
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

djalex777
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 23.03.2006 (Чт) 16:02

Re: Listview - как скрыть группу (Group)

Сообщение djalex777 » 07.07.2009 (Вт) 20:24

BV писал(а):Мне тогда не совсем понятно назначение поля stateMask

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

Добавил:
Кстати, а кто-нибудь встречал в WinXP свернутую (Collapsed) группу? Просто я такого не видел. По MSDN это сделать реально, на деле ничего не работает (может только у меня?). Просто ничего не происходит.


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

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

Сейчас этот форум просматривают: AhrefsBot и гости: 94

    TopList