2010-05-15 14 views

Respuesta

5

ScrollIntoView funciona bien para mí. También puede intentar tree1.FocusedNode := tree1.GetLast;

Es usted la creación altura nodo personalizado en caso OnMeasureItem? Si no funciona, intente establecer DefaultNodeHeight del árbol en el valor más grande y en el evento OnMeasureItem cambiarlo a menor. Noté que el árbol recalcula la longitud de la barra de desplazamiento de esa manera.

+0

Gracias Linas. Sí, estoy configurando una altura personalizada para cada nodo en la base de eventos OnMeasureItem en los contenidos del nodo. la configuración de 'tree1.FocusedNode' no funciona. Probaré lo que dijiste sobre establecer la altura máxima para todos los nodos y luego ajustar los valores. –

+0

Hola Linas, ¡El segundo enfoque que sugeriste funciona! Parece que Virtual Treeview usa DefaultNodeHeight al hacer el cálculo durante una operación de desplazamiento. –

+0

Eso es correcto, Edwin. La alternativa sería que el control inicialice cada nodo en el árbol, incluso aquellos que no han tenido que ser visibles todavía. Eso puede llevar mucho tiempo. –

1

Esto también debería funcionar:

tree1.TopNode := tree1.GetLast 
+0

Gracias Straveu. tampoco funciona ... PS. Puedo obtener la vista de árbol completada impresa si me desplazo manualmente (no programáticamente) al último nodo. –

1

que he tenido el mismo problema trabajar con TVirtualDrawTree de. Debe asegurarse de que las alturas de los nodos se computen antes de que el árbol se desplace.

Esto es lo que hago:

1.- Añadir este código al evento OnInitNode para que el árbol sabe que la altura del nuevo nodo debe ser calculado:

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

2.- en el OnMeasureItem, si no se puede calcular la altura (por ejemplo, nodo no inicializado aún), asegúrese de informar al árbol para repetir la llamada cuando sea necesario: en el controlador de eventos OnMeasureItem:

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; 

Espero que te ayude.

4

Prueba esto:

SendMessage(VST.Handle, WM_VSCROLL, SB_BOTTOM, 0); 
PostMessage(VST.Handle, WM_VSCROLL, SB_BOTTOM, 0); 
Cuestiones relacionadas