配列を保持しているデータがTVirtualStringTreeに表示されます。この配列はスレッドセーフでロック可能です。別のスレッドで成長しました。TVirtualStringTree:OnMeasureItemイベントとOnGetTextイベントの間でデータが変更されました
私の問題は、ノードの高さを測定するためにVSTがOnMeasureItemイベントを実行すると、OnGetTextイベントでデータを印刷する時点になると、測定に使用されるデータが変わる可能性があるということです。
私はイベントの実行順序をチェックしましたが、それは私の設計にとっては良くありません。まず、初期化されていないすべてのノードのOnMeasureItemイベントを起動し、OnGetTextイベントの呼び出しを開始します。 私が意味する、イベントがその順序で発行されます、我々は3つのノードがあるとします。
OnMeasureItem for node 1
OnMeasureItem for node 2
OnMeasureItem for node 3
OnGetText for node 1
OnGetText for node 2
OnGetText for node 3
しかし、私はロックできるように、私はこのようなものが必要:
OnMeasureItem for node 1
OnGetText for node 1
OnMeasureItem for node 2
OnGetText for node 2
OnMeasureItem for node 3
OnGetText for node 3
するための最良の方法は何ですかOnMeasureItemイベントとOnGetTextイベントの間で取得されたデータの同期を維持しますか?
すべてのOnMeasureItem()およびOnGetText()イベント中に配列をロックしたくありません。
ありがとうございます。
追加の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;
質問に追加。 –
あなたが 'toVariableNodeHeight'を使用しているのを忘れてしまったので、最後のコメントを削除しました。ちょうど追加(多分無関係)の質問。 VirtualTreeViewのどのバージョンを使用していますか? – TLama
最新だと思います。私はSVNからチェックアウトしました。 // Version 5.0.0 –