Главная страница
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.037 c
3-1134209177
312Kbps
2005-12-10 13:06
2006.02.12
файл данных *.gtd !!!


8-1125754470
stef
2005-09-03 17:34
2006.02.12
масштабирование canvas


15-1137613460
DiamondShark
2006-01-18 22:44
2006.02.12
Вопрос москвичам или питерцам


4-1133257179
баклан
2005-11-29 12:39
2006.02.12
Нажатие кнопок, вводе текста и прочее...


1-1136953843
иосиф
2006-01-11 07:30
2006.02.12
Советы по оптимизации - 1