डेल्फी में ट्री नोड में अधिक कस्टम डेटा स्टोर करें

TTreeView डेल्फी घटक वस्तुओं की श्रेणीबद्ध सूची प्रदर्शित करता है- पेड़ के नोड्स. एक नोड नोड टेक्स्ट और एक वैकल्पिक छवि द्वारा प्रस्तुत किया गया है। ट्री व्यू में प्रत्येक नोड TTreeNode क्लास का एक उदाहरण है।

जब आप उपयोग करते समय, डिज़ाइन समय पर आइटम के साथ ट्री दृश्य को भर सकते हैं ट्री व्यू आइटम एडिटर, ज्यादातर मामलों में आप रन टाइम के दौरान अपने पेड़ के दृश्य को भर देंगे- यह निर्भर करता है कि आपका आवेदन किस बारे में है।

ट्री व्यू आइटम संपादक से पता चलता है कि एक नोड के लिए आप केवल "कुछ" संलग्न कर सकते हैं: पाठ और कुछ छवि अनुक्रमित (सामान्य स्थिति के लिए, विस्तारित, चयनित और एक जैसे)।

संक्षेप में, ट्री व्यू घटक के खिलाफ प्रोग्राम करना आसान है। पेड़ पर नए नोड्स जोड़ने और उनकी पदानुक्रम निर्धारित करने के लिए कुछ तरीके हैं।

ट्री व्यू में 10 नोड्स जोड़ने का तरीका यहां बताया गया है (जिसका नाम "ट्री व्यू 1" है)। ध्यान दें कि आइटम गुण ट्री में सभी नोड्स तक पहुंच प्रदान करता है। AddChild ट्री व्यू में एक नया नोड जोड़ता है। पहला पैरामीटर पैरेंट नोड (पदानुक्रम बनाने के लिए) और दूसरा पैरामीटर नोड टेक्स्ट है।

instagram viewer

AddChild नए जोड़े गए TTreeNode को लौटाता है। ऊपरोक्त में कोड नमूना, सभी 10 नोड्स को रूट नोड्स के रूप में जोड़ा गया है (कोई मूल नोड नहीं है)।

किसी भी अधिक जटिल परिस्थितियों में आप अपने नोड्स को अधिक जानकारी ले जाना चाहेंगे- अधिमानतः कुछ विशेष मान (गुण) जो आपके द्वारा विकसित की जा रही परियोजना के लिए विशिष्ट हैं।

कहते हैं कि आप अपने डेटाबेस से ग्राहक-ऑर्डर-आइटम डेटा प्रदर्शित करना चाहते हैं। प्रत्येक ग्राहक के पास अधिक ऑर्डर हो सकते हैं और प्रत्येक ऑर्डर अधिक वस्तुओं से बना होता है। यह एक पदानुक्रमित संबंध है जो एक पेड़ दृश्य में प्रदर्शित हो सकता है:

आपके डेटाबेस में प्रत्येक ऑर्डर के लिए और प्रत्येक आइटम के लिए अधिक जानकारी होगी। ट्री दृश्य प्रदर्शित करता है (केवल पढ़ने के लिए) वर्तमान स्थिति - और आप चयनित ऑर्डर के लिए प्रति आदेश (या प्रति आइटम) विवरण देखना चाहते हैं।

जब उपयोगकर्ता नोड "ऑर्डर_1_1" का चयन करता है, तो आप उपयोगकर्ता को प्रदर्शित करने के लिए ऑर्डर विवरण (कुल राशि, तिथि, आदि) चाहते हैं।

आप उस समय, डेटाबेस से आवश्यक डेटा प्राप्त कर सकते हैं, लेकिन सही डेटा हड़पने के लिए आपको चयनित पहचान के अद्वितीय पहचानकर्ता (मान लें कि पूर्णांक मान कहें) की आवश्यकता होगी।

हमें नोड के साथ इस आदेश पहचानकर्ता को संग्रहीत करने के लिए एक तरीका चाहिए, लेकिन हम पाठ संपत्ति का उपयोग नहीं कर सकते। हमें प्रत्येक नोड में स्टोर करने के लिए आवश्यक कस्टम मान एक पूर्णांक (सिर्फ एक उदाहरण) है।

जब ऐसी स्थिति होती है तो आपको टैग संपत्ति (कई डेल्फी घटक हैं) की तलाश करने के लिए लुभाया जा सकता है लेकिन टैग की संपत्ति TTreeNode वर्ग द्वारा उजागर नहीं की जाती है।

ट्री नोड्स में कस्टम डेटा जोड़ें: ट्रीनोड। डेटा संपत्ति

ट्री नोड का डेटा गुण आपको अपने कस्टम डेटा को ट्री नोड के साथ जोड़ने की अनुमति देता है। डेटा ए है सूचक और वस्तुओं और अभिलेखों को इंगित कर सकते हैं। एक ट्री व्यू में एक्सएमएल (आरएसएस फ़ीड) डेटा प्रदर्शित करता है कि कैसे स्टोर किया जाए रिकॉर्ड का प्रकार एक ट्री नोड के डेटा गुण में परिवर्तनशील।

कई आइटम-प्रकार कक्षाएं डेटा प्रॉपर्टी को उजागर करती हैं - आप किसी भी ऑब्जेक्ट को आइटम के साथ संग्रहीत करने के लिए उपयोग कर सकते हैं। एक उदाहरण TListView घटक के TListItem है। यहां बताया गया है डेटा प्रॉपर्टी में ऑब्जेक्ट कैसे जोड़ें.

ट्री नोड्स में कस्टम डेटा जोड़ें: ट्री व्यू। CreateNodeClass

यदि आप TTreeNode की डेटा प्रॉपर्टी का उपयोग नहीं करना चाहते हैं, बल्कि आप अपने ट्रीनोड को कुछ गुणों के साथ विस्तारित करना चाहते हैं, तो डेल्फी का भी एक समाधान है।

कहते हैं कि आप करने में सक्षम होना चाहते हैं

यहाँ अपने खुद के कुछ गुणों के साथ मानक TTreeNode का विस्तार करने का तरीका बताया गया है:

  1. TTreeNode बढ़ाकर अपना TMyTreeNode बनाएँ।
  2. इसे एक स्ट्रिंग प्रॉपर्टी MyProperty में जोड़ें।
  3. अपने नोड वर्ग को बनाने के लिए ट्री व्यू के लिए OnCreateNodeClass को हैंडल करें।
  4. प्रपत्र स्तर पर TreeView1_SelectedNode प्रॉपर्टी जैसी किसी चीज़ को उजागर करें। यह TMyTreeNode टाइप का होगा।
  5. चयनित ट्री नोड के मान को चयनित करने के लिए लिखने के लिए हैंडल ट्री व्यू का OnChange।
  6. नया कस्टम मान पढ़ने या लिखने के लिए TreeView1_Selected.myProperty का उपयोग करें।

यहां पूर्ण स्रोत कोड (TButton: "Button1" और TTreeView: "TreeView1" एक फ़ॉर्म पर है):

इस बार TTreeNode क्लास की डेटा प्रॉपर्टी का उपयोग नहीं किया गया है। इसके बजाय, आप एक ट्री नोड के अपने संस्करण के लिए TTreeNode क्लास का विस्तार करते हैं: TMTTreeNode।

ट्री व्यू के OnCreateNodeClass इवेंट का उपयोग करके, आप मानक TTreenode क्लास के बजाय अपने कस्टम वर्ग का एक नोड बनाते हैं।