Показать сообщение отдельно
  #1  
Старый 23.03.2024, 06:25
-=#PupaJr#=- -=#PupaJr#=- вне форума
Новичок
 
Регистрация: 17.08.2010
Сообщения: 74
Репутация: 518
По умолчанию TreeView и TreeViewCustomDrawItem

Добра всем.
Встала задачка выделять цветом те дочерние ветви которые в чекбоксах отмечены галками. Сделал.
Но пропали + - в узелках!! Пробывал в конце прорисовки своей ставить чёрный цвет - не помогает, но я и на белый не меняю ничего чтобы пропала по фону прорисовка.
Просматривал параметры дерева перед этим - может какую галочку поставил/снял..
Вот код:
Код:
procedure TSDIAppForm.TreeViewZakazCustomDrawItem(Sender: TCustomTreeView;
  Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
var
  iich:integer;         // данные проверки ноды на отметку
  jj:integer;           // cчетчик отмеченных нод
  prnode:TTreeNode;     // родительская нода
begin

with Sender.Canvas do
 begin
  Font.Color := clWindowText;
  prnode:=node.Parent;                      // берём родительскую ноду
  if prnode=nil then                           // проверяем - это родительская?
   begin            // если родительская то красим по разному
    jj:=0;
    prnode:= node.getFirstChild;
    while Assigned(prnode) do                  //Перебираем дочерние на хотябы одну снятую
       begin                                    // чтобы главную закрасить светлее
         iich:=ItTESTChecked(prnode);
         if iich<=100 then      //   если хотябы один НЕстоит
            begin
              jj:=255;     //  признак того что есть хотябы одна дочерняя нода
            end;
          prnode := node.GetNextChild(prnode);
       end;
     iich:=ItTESTChecked(Node);     // если первая нода отмечена то красим зелёным фон
    if ((iich=200)and(jj=0)) then Brush.Color:= clLime;
    if ((iich=200)and(jj=255)) then Brush.Color:= RGB(188,255,188);    // светлая закраска не полной главной ноды
    if node.Selected then             // выделенная нода серая
      begin
       Brush.Color:= clMenuHighlight;
       Font.Color := clWindow;
      end;
   end else        // если нода НЕ родительская
     begin
     iich:=ItTESTChecked(Node);     // если нода отмечена то красим зелёным фон
     if iich=200 then
        Brush.Color:= clLime;
     if iich<=100 then               // если НЕ отмечена то белый фон
         Brush.Color:= clWindow;
     if node.Selected then             // выделенная нода серая
      begin
       Brush.Color:= clMenuHighlight;
       Font.Color := clWindow;
      end;
     end;
  Pen.Color:= clWindowText;
  //Brush.Color:= clMenuHighlight;
 end;
end;
крестики.PNG
Ответить с цитированием