procedure TBAFXForm_1.TreeVAdvancedCustomDrawItem(Sender: TCustomTreeView;
  Node: TTreeNode; State: TCustomDrawState; Stage: TCustomDrawStage;
  var PaintImages, DefaultDraw: Boolean);
var
  NodeRect: TRect;
  X, Y, W: integer;
  ss:String;
  Icon1:TIcon;
begin
   ss:=Trim(Node.Text);
   System.Delete(ss,1,Pos('^',ss));
   if Node.Level>1 then ss:=Copy(ss,1,Pos('^',ss)-1);
   Icon1:=TIcon.Create;   try
     with TreeV.Canvas do
     begin
       DefaultDraw := False;
       NodeRect := Node.DisplayRect(False);
       if (Node.Level = 0) then
       begin
         Brush.Color := clBtnFace;
         FillRect(NodeRect);
         Pen.Color   := clBtnHighlight;
         MoveTo(NodeRect.Right, NodeRect.Top);
         LineTo(NodeRect.Left, NodeRect.Top);
         LineTo(NodeRect.Left, NodeRect.Bottom - 1);
         Pen.Color := clBlack;
         LineTo(NodeRect.Right - 1, NodeRect.Bottom - 1);
         LineTo(NodeRect.Right - 1, NodeRect.Top);
         Pen.Color := clWindowText;
         Font.Color := clWindowText;
       end
       else
       begin
         NodeRect := Node.DisplayRect(False);
         Brush.Color := RGB(136,172,255);
         Brush.Style := bsSolid;
         FillRect(NodeRect);
         if cdsSelected in State then
         begin
           Pen.Color   := clBlack;
           MoveTo(NodeRect.Right, NodeRect.Top);
           LineTo(NodeRect.Left, NodeRect.Top);
           LineTo(NodeRect.Left, NodeRect.Bottom - 1);
           Pen.Color := clBtnHighlight;
           LineTo(NodeRect.Right - 1, NodeRect.Bottom - 1);
           LineTo(NodeRect.Right - 1, NodeRect.Top);
           Pen.Color := clWindowText;
         end;
       end;
       W := TextWidth(Trim(ss));
       //X := ((NodeRect.Right - NodeRect.Left)-W-TreeV.Images.Width) div 2;
       X := (TreeV.Width-W-TreeV.Images.Width) div 2;
       Y := NodeRect.Top + 1;
       if Node.Level=0 then begin
         TreeV.Images.GetIcon(Node.ImageIndex,Icon1);
         Draw(X-8,NodeRect.Top,Icon1);
         TextOut(X - 8+TreeV.Images.Width, NodeRect.Top+4, ss);
       end else begin          if Node.HasChildren then begin
             if Node.Expanded then begin
                TreeV.Images.GetIcon(1,Icon1);
             end else begin
                TreeV.Images.GetIcon(2,Icon1);
             end;
          end else begin
             TreeV.Images.GetIcon(3,Icon1);
          end;
          Draw(NodeRect.Left+Node.Level*20,NodeRect.Top,Icon1);
          TextOut(NodeRect.Left+Node.Level*20+TreeV.Images.Width,NodeRect.Top+4,ss);
          if (TComponent(Node).Tag=0)and(Node.Level>1) then begin
             TreeV.Images.GetIcon(4,Icon1);
             Draw(NodeRect.Left+Node.Level*20+TreeV.Images.Width+TextWidth(ss)+5,NodeRect.Top,Icon1);
          end;
       end;     end;
   finally
      Icon1.Free;
   end;
end;