के बीच डेटा बदल गया है मेरे पास एक सरणी है, डेटा को टीवीर्टुअलस्ट्रिंगट्री पर प्रदर्शित किया जाएगा। यह सरणी थ्रेड-सुरक्षित और लॉक करने योग्य है। और एक और धागे से उगाया।टीवीर्टुअलस्टिंगट्री: ऑनमेइटर इटैम इवेंट और ऑनजीटटेक्स्ट इवेंट
मेरी समस्या यह है कि, जब VST नोड की ऊंचाई मापने के लिए OnMeasureItem ईवेंट निष्पादित करता है, तो माप के लिए उपयोग किया जाने वाला डेटा बदल सकता है जब यह ऑनगेटटेक्स्ट ईवेंट के साथ प्रिंटिंग डेटा के बिंदु पर आता है।
मैंने घटनाओं के निष्पादन आदेश की जांच की है और यह मेरे डिजाइन के लिए अच्छा नहीं है। सबसे पहले यह उन सभी नोड्स के लिए 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' का उपयोग कर रहे हैं। बस एक अतिरिक्त (शायद अप्रासंगिक) प्रश्न। वर्चुअल ट्री व्यू का कौन सा संस्करण आप उपयोग कर रहे हैं? – TLama
नवीनतम मुझे लगता है। मैंने एसवीएन से जांच की। // संस्करण 5.0.0 –