배열 보유 데이터가 TVirtualStringTree에 표시됩니다. 이 배열은 스레드로부터 안전하고 잠글 수 있습니다. 그리고 다른 스레드에 의해 성장했다.TVirtualStringTree : OnMeasureItem 이벤트와 OnGetText 이벤트간에 데이터가 변경되었습니다.
내 문제는 VST가 노드의 높이를 측정하기 위해 OnMeasureItem 이벤트를 실행할 때 OnGetText 이벤트로 데이터를 인쇄 할 때 측정에 사용 된 데이터가 변경 될 수 있다는 점입니다.
이벤트의 실행 순서를 확인했는데 내 디자인에 좋지 않습니다. 먼저 초기화되지 않은 모든 노드에 대해 OnMeasureItem 이벤트를 발생시킨 다음 OnGetText 이벤트를 호출하기 시작합니다.
OnMeasureItem for node 1
OnMeasureItem for node 2
OnMeasureItem for node 3
OnGetText for node 1
OnGetText for node 2
OnGetText for node 3
하지만 잠글 수 있도록이 같은 뭔가가 필요 : 내 말은 , 우리는 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 –