Tôi có một mảng giữ dữ liệu sẽ được trình bày trên TVirtualStringTree. Mảng này an toàn và có thể khóa. Và được trồng bởi một sợi khác.TVirtualStringTree: Dữ liệu thay đổi giữa sự kiện OnMeasureItem và sự kiện OnGetText
Vấn đề của tôi là, khi VST thực hiện sự kiện OnMeasureItem để đo chiều cao của nút, dữ liệu được sử dụng để đo có thể thay đổi khi nó đến điểm in dữ liệu với sự kiện OnGetText.
Tôi đã kiểm tra thứ tự thực hiện các sự kiện và nó không tốt cho thiết kế của tôi. Đầu tiên Nó kích hoạt sự kiện OnMeasureItem cho tất cả các nút không được khởi tạo sau đó nó bắt đầu gọi các sự kiện OnGetText. Ý tôi là, giả sử chúng ta có 3 nút, sự kiện sẽ được bắn theo thứ tự:
OnMeasureItem for node 1
OnMeasureItem for node 2
OnMeasureItem for node 3
OnGetText for node 1
OnGetText for node 2
OnGetText for node 3
Nhưng tôi cần một cái gì đó như thế này để tôi có thể khóa:
OnMeasureItem for node 1
OnGetText for node 1
OnMeasureItem for node 2
OnGetText for node 2
OnMeasureItem for node 3
OnGetText for node 3
cách tốt nhất để là gì duy trì đồng bộ dữ liệu thu được giữa các sự kiện OnMeasureItem và OnGetText?
Tôi không muốn khóa mảng của mình trong tất cả các sự kiện OnMeasureItem() và OnGetText().
Cảm ơn bạn.
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;
Đã thêm vào câu hỏi. –
Tôi đã xóa nhận xét cuối cùng của mình vì tôi quên bạn đang sử dụng 'toVariableNodeHeight'. Chỉ một câu hỏi bổ sung (có thể không liên quan). Bạn đang sử dụng phiên bản VirtualTreeView nào? – TLama
Mới nhất tôi đoán. Tôi đã kiểm tra từ SVN. // Phiên bản 5.0.0 –