![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Отрисовка TreeView разными цветами [D6]
Ольга © (2006-01-10 16:54:00)Дерево у меня 3-х уровневое.
Пишу обработчик на отрисовку Item с условием, что цвет Item зависит от его идентификатора. Не получается, т.к. параметр Node всегда есть Node 1-го уровня, который расцвечивать и не надо:
procedure TFCompare.Tree_testAdvancedCustomDrawItem(
Sender: TCustomTreeView; Node: TTreeNode; State: TCustomDrawState;
Stage: TCustomDrawStage; var PaintImages, DefaultDraw: Boolean);
begin
With Tree_test.Canvas do
begin
case Integer(Node.Data)of // всегда равно 1,2,3 - идентификаторам 1-го уровня
10..20: begin
Font.Color:=clRed;
Font.Style:=[fsBold];
end;
21..50: begin
Font.Color:=clBlue;
Font.Style:=[fsBold];
end;
else
begin
Font.Color:=clBlack;
Font.Style:=[];
end;
end;
end;
end;
Что я не так делаю?
MBo (2006-01-11 08:47:00) [1]>ходила по одному дереву, а пыталась раскрасить другое.
во избежание этого стоит вместо явного указания
With Tree_test.Canvas использовать Sender
Ольга (2006-01-11 08:36:00) [2]
> Попробовал код из [4]... Все нормально рисуется и раскрашивается
Я тоже скопировала свой же текст из [4] - и, о чудо, заработало!
Была глупая ошибка - ходила по одному дереву, а пыталась раскрасить другое.
Всем спасибо.
MBo (2006-01-11 08:09:00) [3]>Ольга (11.01.06 07:55) [4]
Попробовал код из [4], заменив
case Integer(Node.Data)
на
case Node.Level of
1
2
...
Все нормально рисуется и раскрашивается
Ольга (2006-01-11 07:55:00) [4]
> узлы дерева в указанный момент не распахнуты, т.е. и не
> отрисовываются
Так оно и было. Узлы распахнула, в отладчике вижу, что процедура отрисовки работает так, как надо. Все хорошо, только дерево не раскрашивается. Добавила в процедуру команды из help-a:
procedure TFCompare.Tree_testAdvancedCustomDrawItem(
Sender: TCustomTreeView; Node: TTreeNode; State: TCustomDrawState;
Stage: TCustomDrawStage; var PaintImages, DefaultDraw: Boolean);
var
NodeRect: TRect;begin
With Tree_test.Canvas do
begin
case Integer(Node.Data) of
10..20: begin
Font.Color:=clRed;
Font.Style:=[fsBold];
end;
21..50: begin
Font.Color:=clBlue;
Font.Style:=[fsBold];
end;
else
begin
Font.Color:=clBlack;
Font.Style:=[];
end;
end;
NodeRect:=Node.DisplayRect(True);
FillRect(NodeRect);
TextOut(NodeRect.Left, NodeRect.Top, Node.Text);end;
end;
Не помогает.
Johnmen (2006-01-10 17:26:00) [5]Я могу только предполагать...
- Data прописана неверно, напр. неверно ходили по НД
- неверные данные поля id_obj в НД
- узлы дерева в указанный момент не распахнуты, т.е. и не отрисовываются
Ольга (2006-01-10 17:20:00) [6]Конечно.
NodeFirst:=TTreeNode.Create(T.Items);
Tree.Items.AddObject(NodeFirst,'Name',pointer(1));
Tree.Items.AddChildObject(NodeFirst, Query.FieldByName('name_obj').AsString,
pointer(Query.FieldByName('id_obj').AsInteger));
Johnmen (2006-01-10 17:08:00) [7]А в Data ты занесла необходиную инфу?