2014-09-29 56 views
2

我想我的樹視圖顯示爲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

回答

2

,也有更多的選擇。

這確實對我來說(過濾掉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