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;
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;
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货