Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как изменить высоту элемента 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.


Наверх

Титульная страница Поиск, карта сайта Написать письмо