He probado el ejemplo "final", y siento decir, que pierde la gracia del TTreeView xD Los SubItems aparecen en el nivel 0
Aquí un pequeño parche xD
Código Delphi
[-]procedure TForm2.trvDptosCustomDrawItem(Sender: TCustomTreeView;
Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
var
rc: TRect;
begin
DefaultDraw := False;
with trvDptos do
begin
Canvas.Brush.Style := bsClear;
Canvas.Font.Color := clBlue;
Canvas.Font.Name := 'Tahoma';
Canvas.Font.Size := 10;
rc := Node.DisplayRect(False);
rc.Left:=(Node.Level + 1) * TTreeView(Sender).indent;
if Node.Selected then
Canvas.Brush.Color:=clSilver
else
Canvas.Brush.Color:=clWindow;
Canvas.TextOut(rc.Left, rc.Top, Copy(Node.Text, 1, Pos('(', Node.Text)));
Canvas.Refresh;
Canvas.Font.Color := clRed;
Canvas.Font.Name := 'Tahoma';
Canvas.Font.Size := 10;
Canvas.TextOut(rc.Left + Canvas.TextWidth(Copy(Node.Text, 1, Pos('(', Node.Text))), rc.Top, EntreValores(Node.Text, '(', ')'));
Canvas.Refresh;
Canvas.Font.Color := clBlue;
Canvas.Font.Name := 'Tahoma';
Canvas.Font.Size := 10;
Canvas.TextOut(rc.Left + Canvas.TextWidth(Node.Text) - 3, rc.Top, Copy(Node.Text, Pos(EntreValores(Node.Text, '(', ')'), Node.Text) + Length(EntreValores(Node.Text, '(', ')')), Pos(')', Node.Text)));
end;
end;
Saludos.