2010-05-15 40 views

Trả lời

5

ScrollIntoView hoạt động tốt cho tôi. Bạn cũng có thể thử tree1.FocusedNode := tree1.GetLast;

Bạn có đặt chiều cao nút tùy chỉnh trong sự kiện OnMeasureItem không? Nếu nó không hoạt động, hãy thử đặt DefaultNodeHeight của cây thành giá trị lớn hơn và trong sự kiện OnMeasureItem, thay đổi nó thành thấp hơn. Tôi nhận thấy rằng cây tính toán lại chiều dài của thanh cuộn tốt hơn theo cách đó.

+0

Cảm ơn Linas. Có, tôi đang thiết lập chiều cao tùy chỉnh cho mỗi nút trong cơ sở sự kiện OnMeasureItem trên nội dung nút. setting 'tree1.FocusedNode' không hoạt động. Tôi sẽ cố gắng những gì bạn nói về thiết lập chiều cao larges cho tất cả các nút sau đó điều chỉnh các giá trị. –

+0

Hi Linas, Cách tiếp cận thứ hai mà bạn đề xuất hoạt động! Có vẻ như Virtual Treeview sử dụng DefaultNodeHeight khi thực hiện phép tính trong khi thực hiện thao tác cuộn. –

+0

Đúng vậy, Edwin. Việc thay thế sẽ là để kiểm soát khởi tạo mọi nút trong cây, ngay cả những nút chưa được hiển thị. Điều đó có thể tốn thời gian. –

1

này cũng nên làm việc:

tree1.TopNode := tree1.GetLast 
+0

Cảm ơn Straveu. nó cũng không hoạt động ... PS. Tôi có thể nhận được các bản xem trước hoàn thành in nếu tôi theo cách thủ công (không phải theo chương trình) cuộn xuống nút cuối cùng. –

1

Tôi đã có cùng một vấn đề làm việc với TVirtualDrawTree của. Bạn phải đảm bảo rằng chiều cao nút được tính toán trước khi cây thực sự cuộn.

Đây là những gì tôi làm:

1. Thêm mã này vào sự kiện OnInitNode để cây biết rằng chiều cao của nút mới phải được tính toán:

Node.States := node.States + [vsMultiline] - [vsHeightMeasured]; 

2.- trong OnMeasureItem, nếu bạn không thể tính toán chiều cao (ví dụ như nút không được khởi tạo nào), chắc chắn rằng bạn nói cây để lặp lại các cuộc gọi khi cần thiết: trong OnMeasureItem xử lý sự kiện:

If (Node = Nil) Or (Node = tree.RootNode) Then Begin 
    Exclude(Node.States, vsHeightMeasured); 
    Exit; 
End; 

NodeData := tree.GetNodeData(Node); 
If (NodeData = Nil) Or (NodeData^.XMLNode = Nil) Then Begin 
    Exclude(Node.States, vsHeightMeasured); 
    Exit; 
End; 
Try 
    // Code to measure node height here. 
Except 
    Exclude(Node.States, vsHeightMeasured); 
End; 

Tôi hy vọng nó sẽ giúp bạn.

4

Hãy thử điều này:

SendMessage(VST.Handle, WM_VSCROLL, SB_BOTTOM, 0); 
PostMessage(VST.Handle, WM_VSCROLL, SB_BOTTOM, 0); 
Các vấn đề liên quan