如何更改treenode矩形尺寸?

如何更改treenode矩形尺寸?

问题描述:

我想我的树视图显示为folows。 enter image description here如何更改treenode矩形尺寸?

这是我正在使用的代码。

procedure TForm1.FormShow(Sender: TObject); 
begin 
    TreeView1.FullExpand 
end; 

procedure TForm1.TreeView1CustomDrawItem(Sender: TCustomTreeView; 
    Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean); 

const 
    _Right = 100; 
    _Left = 50; 

var 
    R : TRect; 

begin 

if Node.Level = 0 then 
begin 

    R := Node.DisplayRect(true); 

    R.Right := R.Right + _Right; 
    R.Left := R.Left + _Left; 

    Sender.Canvas.Brush.Color := clRed; 
    Sender.Canvas.FillRect(R); 

end; 

end; 

的问题是,我可以延长R.right但如果在OnAdvancedCustomDrawItem事件进行绘制,不能扩展R.left ...

+0

你是说你要缩进的节点字幕(但只有字幕)? – TLama 2014-09-29 11:10:24

+0

取决于你想要达到的目标,你可能会在FillRect或DefaultDraw:= false之后设置Sender.Canvas.Brush.Color:= clWhite;并自己绘制任何东西。 – bummi 2014-09-29 11:12:38

+0

是的,我想缩进节点标题 – azad 2014-09-29 11:15:45

,也有更多的选择。

这确实对我来说(过滤掉cdPostPaint阶段):

procedure TForm1.TreeView1AdvancedCustomDrawItem(Sender: TCustomTreeView; 
    Node: TTreeNode; State: TCustomDrawState; Stage: TCustomDrawStage; 
    var PaintImages, DefaultDraw: Boolean); 
const 
    _Right = 100; 
    _Left = 50; 
var 
    R : TRect; 
begin 
if (Node.Level = 0) and (stage = cdPostPaint) then 
begin 

    R := Node.DisplayRect(true); 
    R.Right := R.Right + 2; 
    Sender.Canvas.FillRect(R); // Just clear default text area 

    R.Right := R.Right + _Right; 
    R.Left := R.Left + _Left; 
    Sender.Canvas.Brush.Color := clRed; 
    Sender.Canvas.FillRect(R); 
    {- Make sure writing text with transparent background } 
    SetBkMode(Sender.Canvas.Handle, TRANSPARENT); 
    Sender.Canvas.TextOut(R.Left,R.Top,Node.Text); 
    PaintImages := true; 
    DefaultDraw := false; 
end;  
end; 

enter image description here