Ich habe ein Array enthält Daten werden auf TVirtualStringTree dargestellt werden. Dieses Array ist Thread-sicher und abschließbar. Und von einem anderen Thread gewachsen.TVirtualStringTree: Daten zwischen OnMeasureItem-Ereignis und OnGetText-Ereignis geändert
Mein Problem ist, dass, wenn VST OnMeasureItem -Ereignis ausführt, um die Höhe des Knotens zu messen, Daten für die Messung geändert werden können, wenn es zum Drucken von Daten mit OnGetText -Ereignis kommen.
Ich habe die Ausführungsreihenfolge der Ereignisse überprüft und es ist nicht gut für mein Design. Zuerst wird das OnMeasureItem-Ereignis für alle Knoten ausgelöst, das nicht initialisiert wird und dann OnGetText-Ereignisse aufruft.
OnMeasureItem for node 1
OnMeasureItem for node 2
OnMeasureItem for node 3
OnGetText for node 1
OnGetText for node 2
OnGetText for node 3
Aber ich brauche so etwas wie dies, damit ich sperren: Ich meine, nehmen wir an drei Knoten haben, werden Ereignisse in dieser Reihenfolge gezündet werden
OnMeasureItem for node 1
OnGetText for node 1
OnMeasureItem for node 2
OnGetText for node 2
OnMeasureItem for node 3
OnGetText for node 3
Was ist der beste Weg ist, um Aufrechterhaltung der Synchronisation von Daten, die zwischen OnMeasureItem- und OnGetText-Ereignissen erhalten werden?
Ich möchte nicht mein Array während aller OnMeasureItem() und OnGetText() Ereignisse sperren.
Vielen Dank.
Added 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;
Zu Frage hinzugefügt. –
Ich habe meinen letzten Kommentar gelöscht, da ich vergessen habe, dass Sie 'toVariableNodeHeight' verwenden. Nur eine zusätzliche (vielleicht irrelevante) Frage. Welche Version von VirtualTreeView verwenden Sie? – TLama
Spätestens ich denke. Ich habe von SVN ausgecheckt. // Version 5.0.0 –