2014-09-29 2 views
2

내 트리보기를 folows로 표시하고 싶습니다. enter image description heretreenode rect 크기를 변경하는 방법은 무엇입니까?

이것은 내가 사용하고있는 코드입니다.

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

+0

에 도달하고자하는 것에 따라, FillRect,'DefaultDraw : = false' 다음에'Sender.Canvas.Brush.Color : = clWhite;'를 설정하고 임의의 것을 페인트 할 수 있습니다. – bummi

+0

예 노드 캡션 – azad

답변

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

관련 문제