Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.02.12;
Скачать: CL | DM;

Вниз

Отрисовка 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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.042 c
1-1137272603
2Wish
2006-01-15 00:03
2006.02.12
Где ошибка


15-1137617989
Yanis
2006-01-18 23:59
2006.02.12
Ошибки в программах - специально?


3-1133952680
_Lucky_
2005-12-07 13:51
2006.02.12
Реализация системы доступа и АРМа Администратора доступа.


15-1137727459
Репортер
2006-01-20 06:24
2006.02.12
Отчеты с графикой и текстом


15-1138010046
Control9
2006-01-23 12:54
2006.02.12
Как можно создать сеть с помощу мобильников