Tengo una matriz contiene datos que se representarán en TVirtualStringTree. Esta matriz es segura para subprocesos y bloqueable. Y crecido por otro hilo.TVirtualStringTree: los datos cambiados entre el evento OnMeasureItem y el evento OnGetText
Mi problema es que cuando VST ejecuta el evento OnMeasureItem para medir la altura del nodo, los datos utilizados para la medición pueden cambiar cuando llega el momento de imprimir datos con el evento OnGetText.
He comprobado el orden de ejecución de los eventos y no es bueno para mi diseño. Primero, activa el evento OnMeasureItem para todos los nodos que no se inicializan y luego comienza a llamar eventos OnGetText. Es decir, supongamos que tenemos 3 nodos, los eventos serán despedidos en ese orden:
OnMeasureItem for node 1
OnMeasureItem for node 2
OnMeasureItem for node 3
OnGetText for node 1
OnGetText for node 2
OnGetText for node 3
pero necesito algo como esto para que pueda bloquear:
OnMeasureItem for node 1
OnGetText for node 1
OnMeasureItem for node 2
OnGetText for node 2
OnMeasureItem for node 3
OnGetText for node 3
¿Cuál es la mejor manera de mantener la sincronización de los datos obtenidos entre los eventos OnMeasureItem y OnGetText?
No quiero bloquear mi matriz durante todos los eventos OnMeasureItem() y OnGetText().
Gracias.
Agregado OnTimer:
procedure TMainForm.SyncHexLog;
begin
HexLog.BeginUpdate;
Try
if (HexLog.RootNodeCount <> FirpList.ComOperationCountLagged) then
begin
HexLog.RootNodeCount := FirpList.ComOperationCountLagged;
// measure for fast scrolling
HexLog.ReInitNode(HexLog.GetLastNoInit(), True);
if FAutoScroll then
begin
HexLog.ScrollIntoView(HexLog.GetLast, False, False);
end;
end;
Finally
HexLog.EndUpdate;
End;
end;
Agregado a la pregunta. –
He borrado mi último comentario porque olvidé que estás usando 'toVariableNodeHeight'. Solo una pregunta adicional (tal vez irrelevante). ¿Qué versión de VirtualTreeView estás usando? – TLama
Lo último, supongo. Salí de SVN. // Versión 5.0.0 –