![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TreeView+картинки ,без ImageList [D7, Win2k, WinXP]
Belocarsk © (2004-07-12 07:42:00)Доброго времени суток!!!
Каким образом можно отображать иконки без помощи ImageList?
Может кто уже проделывал такое? Конкретно мне нужно заносить из базы данных.
DVM (2004-07-12 23:39:00) [1]
> Belocarsk (12.07.04 11:49) [4]
А еще могу сказать, что это будет сильно медленнее.
ListView и TreeView, а также ImageList оптимизированы в плане совместной работы так, что превзойти по скорости вряд ли получится.
А кто мешает наполнять ImageList картинками из базы?
Belocarsk (2004-07-12 11:49:00) [2]В принципе есть что-то в этом, попробую по эксперементироватью.
Спасибо Vitalik.
Vitalik (2004-07-12 11:37:00) [3]Ну, предлагаю такое решение.
Ты вообще кидаешь на форму TImageList, но никаких иконок в него не добавляешь. И устанавшиваешь этот ImageList у твоего TTreeView (tv). Это надо, чтобы текст Node в дереве сам сдвигался влево, освобождая тебе место для иконки.
Ну и понеслась:
procedure TForm1.tvCustomDrawItem(Sender: TCustomTreeView; Node: TTreeNode;
State: TCustomDrawState; var DefaultDraw: Boolean);
var
r: TREct;
begin
r := Node.DisplayRect(true); //Получаем квадрат текста текущего Node
r.Left := r.left - b.Width; //rect.left - это коодината, где начинает рисоваться текст. Но тебе-то нужно рисовать иконку левей (как раз в то пустое место, которое образовалось, когда мы указали для TV пустой ImageList)
tv.Canvas.Draw(r.left, r.top, b); //Вот и рисуем нужную иконку! b у меня TBitmap.
end;
Кстати, ссылку на иконку можно хранить в Node.Data. Тогда будет так
tv.Canvas.Draw(r.left, r.top, TBitmap(Node.Data));
Belocarsk (2004-07-12 08:05:00) [4]Енто я понимаю, примерчик бы....
Vitalik (2004-07-12 07:53:00) [5]Это в событии OnCustomDrawItem рисовать.