![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как изменить высоту элемента TListBox?
@!!ex © (2010-10-23 18:06:00)Этот вопрос возникал у меня несколько месяцев назад и я его здесь уже задавал.
Если не ошибаюсь АП, дал мне на него вот такой ответ:
ItemEx.mask := TVIF_INTEGRAL;
ItemEx.hItem := Node.ItemId;
ItemEx.iIntegral :=4;
SendMessage (TreeView.Handle, TVM_SETITEMA, 0, LPARAM(@ItemEx));
И это действительно работало, до тех пор пока мы не запустили прогу на Windows 7.
Дело в том, что в список элементы добавляются пачкой. И чтобы все не тормозило, используем BeginUpdate, EndUpdate.
Беда в том, что указанный выше код вызывает перерисовку всего дерева.
То есть добавление элементов в семерке тормозит адски.
Искал решение в интернете. Нашел событие MeasureItem, которое теоретически делает то что нужно...
Но такого события у ListBox'a в TDE 2006 просто нету.
Как быть?
Есть ли другой способ?
или как обрабатывать события, которые в VCL не реализованы?
@!!ex (2010-10-24 23:06:00) [1]Размер разный.
Точнее их два:
1) элементы без картинки.
2) Элементы с картинкой.
Задача проста:
сделать дерево контента в редакторе.
например:
модели
+-модель1
[здесь картинка превьюшка, размер элемента большой]
-модель2
[здесь картинка превьюшка, размер элемента большой]
звуки
+-
звук1
[никакой превьюшки нет, размер элементы обычный]
TVM_INSERTITEM - подвесило у меня программу и похоже не дружит с VCL
Item.mask:=TVIF_TEXT or TVIF_PARAM;
Item.pszText:=PChar(string(FNDDATA.cFileName)+'('+GetModelDescription(ModelsPrefix+path+FNDDATA.cFileName)+')'+#0);
Item.cchTextMax:=Length(string(FNDDATA.cFileName)+'('+GetModelDescription(ModelsPrefix+path+FNDDATA.cFileName)+')'+#0);
FileName:='\'+path+string(FNDDATA.cFileName);
Pointer(Item.lParam):=TPreviewItem.Create;
ItemEx.mask := TVIF_INTEGRAL;
ItemEx.hItem := Node.ItemId;
ItemEx.iIntegral :=4;
newItem.hParent:=TreeNode.ItemId;
newItem.hInsertAfter:=TVI_LAST;
newItem.itemex:=ItemEx;
newItem.item:=Item;
SendMessage (TreeView.Handle, TVM_INSERTITEM , 0, LPARAM(@newItem));
@!!ex (2010-10-24 22:03:00) [2]Ай да, да.
Действительно речь о дереве.
Переклинило на списке, не знаю почему...
Я и в гугле по TListBox искал... Вот и не нашел что нужно.
Видимо работать в выходные - плохая идея. :)
Sapersky (2010-10-23 23:02:00) [3]Смешались в кучу списки, дрЕва... ну будем считать, что речь всё-таки о TreeView, тем более что есть сообщения о проблеме с тормознутостью TVM_SETITEM в Win7:
http://groups.google.com/group/microsoft.public.vc.mfc.docview/browse_thread/thread/3e401b1ce842abc9
Там предлагают добавлять элементы через TVM_INSERTITEM, при этом можно сразу указать высоту.
Если высота элементов одинаковая, можно ещё попробовать TVM_SETITEMHEIGHT.