Форум: "Основная";
Текущий архив: 2006.02.12;
Скачать: [xml.tar.bz2];
ВнизОтрисовка TreeView разными цветами Найти похожие ветки
← →
Ольга (2006-01-10 16:54) [0]Дерево у меня 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;
Что я не так делаю?
← →
Johnmen © (2006-01-10 17:08) [1]А в Data ты занесла необходиную инфу?
← →
Ольга (2006-01-10 17:20) [2]Конечно.
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:26) [3]Я могу только предполагать...
- Data прописана неверно, напр. неверно ходили по НД
- неверные данные поля id_obj в НД
- узлы дерева в указанный момент не распахнуты, т.е. и не отрисовываются
← →
Ольга (2006-01-11 07:55) [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;
Не помогает.
← →
MBo © (2006-01-11 08:09) [5]>Ольга (11.01.06 07:55) [4]
Попробовал код из [4], заменив
case Integer(Node.Data)
на
case Node.Level of
1
2
...
Все нормально рисуется и раскрашивается
← →
Ольга (2006-01-11 08:36) [6]
> Попробовал код из [4]... Все нормально рисуется и раскрашивается
Я тоже скопировала свой же текст из [4] - и, о чудо, заработало!
Была глупая ошибка - ходила по одному дереву, а пыталась раскрасить другое.
Всем спасибо.
← →
MBo © (2006-01-11 08:47) [7]>ходила по одному дереву, а пыталась раскрасить другое.
во избежание этого стоит вместо явного указания
With Tree_test.Canvas использовать Sender
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2006.02.12;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.04 c