2011-06-03 11 views
5

के शीर्ष पर एक ओवरले आइकन प्रस्तुत करने के लिए सबसे अच्छा तरीका है, मैं टीवी टीचुअल स्ट्रीट्री का उपयोग करने के लिए मानक TTreeView से पेड़ दृश्य को परिवर्तित कर रहा हूं। मेरी अंतिम चुनौती एक ऐसी सुविधा को लागू करना है जहां मुझे ज्ञात नोड आइकन के शीर्ष पर 'पास/असफल' स्थिति सूचक आकर्षित करने की आवश्यकता है। TTreeView के साथ मैं प्रयोग किया है:मूल डेल्फी टीवीर्टुअल ट्री व्यू नोड आइकन

enter image description here

TVirtualStringTree के साथ मैं बेहतर पाने के लिए एक बेहतर तरीका खोजने के लिए या तो, या आशा व्यक्त की:

var 
    R : TRect; 
    begin 
    R := Node.DisplayRect(True); 
    StatusIconList.Draw(TreeView1.Canvas, 
         R.Left - StatusIconList.Width - 14, 
         R.Top, 
         3 {MyOverlayImageIndex}); 

परिणाम बुनियादी चिह्न पर लाल क्रॉस के रूप में नीचे दिखाया गया है आवश्यक ओवरले आइकन स्थिति के लिए ज्ञात पदों। मैं कर रहा हूं:

procedure DrawFailed; 
    var 
    R : TRect; 
    begin 
     R := CellRect; 
     StatusIconList.Draw(TargetCanvas, 
          R.Left - StatusIconList.Width + 49 + Sender.GetNodeLevel(Node) * 16, 
          R.Top, 
          siiFailed); 
    end; 

क्या यह सबसे अच्छा समाधान है? भयानक नोड स्तर कॉल के बिना मूल आइकन के शीर्ष/बाएं कोने को पाने का कोई बेहतर तरीका है?

उत्तर

8

आपको अपने OnGetImageIndex ईवेंट हैंडलर में Kind: TVTImageKind पैरामीटर मिलता है। इसे ikOverlay के लिए जांचें और बस उचित छवि अनुक्रमणिका वापस करें।

+0

यह एक अच्छा मुद्दा है, धन्यवाद। मैंने अपनी छवि सूची में कुछ छवियों को जोड़ा है (उदाहरण के लिए इंडेक्स 8 और 9), जिसे MyImageList.Overlay (8,0) और MyImageList.Overlay (9,1) कहा जाता है और ऑनगेट इमेज इंडेक्स को 0 या 1 लौटने के लिए व्यवस्थित किया जाता है जब कि ikOverlay है । हालांकि, कोई ओवरले दिखाई नहीं देता है, केवल मूल आइकन। क्या कोई और स्विच है जिसे मुझे सेट करने की ज़रूरत है? धन्यवाद। –

+1

यह वही है जो करने की ज़रूरत है, मैंने अभी कोशिश की है और यह काम करता है, मुझे किसी और चीज के बारे में पता नहीं है, क्षमा करें। –

संबंधित मुद्दे