2011-08-29 7 views
6

tôi đang cố gắng để có được một kết quả trông như thế này ra khỏi TVirtualStringTree:Làm một cái nhìn tổng thể-chi tiết với một thanh tiêu đề cho mỗi nhóm mục trong một TreeView ảo (TVirtualStringTree)

desired virtualtreeview appearance

Tôi tin rằng nó có thể có thể trực tiếp với TVirtualStringTree (kiểm soát Treeview ảo chính của Mike Lischke), hoặc bằng cách phân lớp nó và sửa đổi điều khiển kế thừa, hoặc bằng cách truy cập TVirtualDrawTree.

Dưới đây là những gì tôi có thể nhận được, và cho thấy vấn đề mà tôi phải đối mặt:

actual vritualtreeview appearance

Tôi có vấn đề là tôi dường như không thể nhận được văn bản cho cột từ 0 đến chiếm các toàn bộ diện tích nằm ngang của điều khiển treeview ảo. Có một bản demo treeview ảo trong bản demo nâng cao hiển thị văn bản nhiều dòng xuất hiện để làm những gì tôi cần, nhưng tôi không thể tìm ra cách áp dụng nó kết hợp với các cột chi tiết mà tôi cần bên dưới hàng tiêu đề (được hiển thị dưới dạng nút, Nút, Nút trong ảnh).

Đây là những gì tôi đã cố gắng:

  • Sửa ContentRect.Right trong trường hợp BeforeCellPaint:
  • thiết toGridExtensions trên trong TreeOptions.MiscOptions.

Đây là một mẫu mã cho thấy làm thế nào tôi đã cố gắng để thay đổi contentRect:

procedure TForm1.VirtualStringTree1BeforeCellPaint(Sender: TBaseVirtualTree; 
    TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; 
    CellPaintMode: TVTCellPaintMode; CellRect: TRect; var ContentRect: TRect); 
var 
    level:Integer; 
begin 
level := VirtualStringTree1.GetNodeLevel(Node); 
if (level=0) then 
    Inc(ContentRect.Right, 300); 

end; 

Cập nhật:

Sử dụng câu trả lời được chấp nhận dưới đây, tôi nhận được như sau:

enter image description here

Trả lời

5

Tôi nghĩ bạn muốn se toAutoSpanColumns tùy chọn (trong TreeOptions.AutoOptions), có thể với sự kiện OnGetCellIsEmpty (không cần thiết nếu bạn chỉ trả lại văn bản cho cột đầu tiên).

Để có được hạch multiline init chúng với ivsMultiline nhà nước (trong trường hợp OnInitNode) hoặc thiết lập vtree.MultiLine[Node] := boolean;

+0

Brilliant! Điều đó hoạt động rất tốt. –