TTreeView डेल्फी घटक ("Win32" घटक पैलेट टैब पर स्थित) एक खिड़की का प्रतिनिधित्व करता है जो एक प्रदर्शित करता है वस्तुओं की श्रेणीबद्ध सूची, जैसे किसी दस्तावेज़ में शीर्षक, एक सूचकांक में प्रविष्टियाँ, या फ़ाइलें और निर्देशिकाएँ एक डिस्क।
चेक बॉक्स या रेडियो बटन के साथ ट्री नोड?
डेल्फी का TTreeview मूल रूप से चेकबॉक्स का समर्थन नहीं करता है, लेकिन अंतर्निहित WC_TREEVIEW नियंत्रण करता है। आप इसमें चेकबॉक्स जोड़ सकते हैं ट्री व्यू TTreeView की CreateParams प्रक्रिया को ओवरराइड करके, नियंत्रण के लिए TVS_CHECKBOXES शैली निर्दिष्ट करता है। नतीजा यह है कि सभी नोड्स ट्रीव्यू में उनसे जुड़े चेकबॉक्स होंगे। इसके अलावा, StateImages संपत्ति का उपयोग नहीं किया जा सकता क्योंकि WC_TREEVIEW चेकबॉक्स को लागू करने के लिए आंतरिक रूप से इस कल्पनाशील का उपयोग करता है। यदि आप चेकबॉक्स को टॉगल करना चाहते हैं, तो आपको इसका उपयोग करना होगा मेसेज भेजें या TreeView_SetItem / TreeView_GetItem मैक्रोज़ से CommCtrl.pas. WC_TREEVIEW केवल चेकबॉक्स का समर्थन करता है, न कि रेडियो बटन का।
इस लेख में आपको जिस दृष्टिकोण की खोज करनी है वह बहुत अधिक लचीला है: आपके पास चेकबॉक्स और हो सकते हैं TTreeview को बदलने या एक नया बनाने के बिना किसी भी तरह से अन्य नोड्स के साथ मिश्रित रेडियो बटन
कक्षा यह काम करने के लिए। इसके अलावा, आप अपने आप को तय करते हैं कि चेकबॉक्स / रेडियोबुटनों के लिए उपयोग की जाने वाली छवियों को स्टेटिमेज इमेजिनेटर को उचित छवियां जोड़कर क्या करना है।एक चेक बॉक्स या रेडियो बटन जोड़ें
आप जिस पर विश्वास कर सकते हैं, उसके विपरीत, यह पूरा करने के लिए काफी सरल है डेल्फी. यहाँ यह काम करने के लिए कदम हैं:
- TTreeview के लिए "Win32" घटक पैलेट टैब पर एक छवि सूची (TImageList घटक) सेट करें। चेक बॉक्स और / या रेडियो बटन के लिए जाँच की गई और अनियंत्रित स्थिति (ओं) के लिए छवियों वाली संपत्ति का राज्य करता है।
- ToggleTreeViewCheckBoxes प्रक्रिया को देखें (नीचे देखें) ट्रीव्यू के ऑनक्लिक और ऑनकेडाउन ईवेंट में। ToggleTreeViewCheckBoxes प्रक्रिया चालू जाँच / अनियंत्रित स्थिति को दर्शाने के लिए चयनित नोड के StateIndex को बदल देती है।
अपने ट्रीव्यू को और भी अधिक पेशेवर बनाने के लिए, आपको यह देखना चाहिए कि स्टेट्स को टॉगल करने से पहले एक नोड पर क्लिक कहां किया जाता है: वास्तविक छवि पर क्लिक करने के बाद केवल नोड को टॉगल करके, आपके उपयोगकर्ता अभी भी इसे बदले बिना नोड का चयन कर सकते हैं राज्य।
इसके अतिरिक्त, यदि आप अपने उपयोगकर्ताओं को ट्रीव्यू का विस्तार / पतन नहीं करना चाहते हैं, तो ऑन-शो इवेंट में फ़ुलएक्सपैंड प्रक्रिया को कॉल करें और ट्रीव्यू के ऑनकोलैप्सिंग इवेंट में AllowCollapse को गलत पर सेट करें।
यहाँ ToggleTreeViewCheckBoxes प्रक्रिया का कार्यान्वयन है:
प्रक्रिया ToggleTreeViewCheckBoxes (
नोड: TTreeNode;
cUnChecked,
cChecked,
cRadioUnchecked,
cRadioChecked: पूर्णांक);
वर
tmp: TTreeNode;
beginif सौंपा (नोड) thenbeginif नोड। StateIndex = cUnChecked फिर
नोड। StateIndex: = cChecked
अन्यअगर नोड। स्टेटिंडेक्स = cChecked फिर
नोड। StateIndex: = cUnChecked
और अगर नोड। StateIndex = cRadioUnChecked thenbegin
tmp: = नोड। जनक;
अगर नहीं सौंपा (tmp) फिर
tmp: = TTreeView (नोड)। TreeView) .Items.getFirstNode
अन्य
tmp: = tmp.getFirstChild;
जबकि सौंपा (tmp) dobeginif (Tmp। StateIndex में
[cRadioUnChecked, cRadioChecked]) फिर
tmp। StateIndex: = cRadioUnChecked;
tmp: = tmp.getNextSibling;
समाप्त;
नोड। StateIndex: = cRadioChecked;
समाप्त; // अगर StateIndex = cRadioUnCheckedसमाप्त; // यदि असाइन किया गया (नोड)
समाप्त; (* ToggleTreeViewCheckBoxes *)
जैसा कि आप ऊपर दिए गए कोड से देख सकते हैं, प्रक्रिया किसी भी चेकबॉक्स के नोड्स को खोजने और बस उन्हें चालू या बंद करने से शुरू होती है। अगला, यदि नोड एक अनियंत्रित रेडियो बटन है, तो प्रक्रिया वर्तमान स्तर पर पहले नोड पर जाती है, सभी नोड सेट करती है उस स्तर पर cRadioUnchecked (यदि वे cRadioUnChecked या cRadioChecked नोड्स हैं) और अंत में नोड टॉगल करें cRadioChecked।
ध्यान दें कि किसी भी पहले से ही चेक किए गए रेडियो बटन को कैसे अनदेखा किया जाता है। जाहिर है, इसका कारण यह है कि पहले से ही चेक किया गया रेडियो बटन अनियंत्रित हो जाएगा, जो एक अपरिभाषित स्थिति में नोड्स को छोड़ देगा। शायद ही आप ज्यादातर समय क्या चाहते हैं।
यहाँ कोड को और भी अधिक पेशेवर बनाने का तरीका बताया गया है: ट्रीव्यू की ऑनक्लिक घटना में, केवल टॉगल करने के लिए निम्नलिखित कोड लिखें चेकबॉक्स यदि स्टेटिमेज पर क्लिक किया गया था (cFlatUnCheck, cFlatChecked आदि स्थिरांक को स्टेटमीज में इंडेक्स के रूप में कहीं और परिभाषित किया गया है) चित्र सूची):
प्रक्रिया TForm1.TreeView1Click (प्रेषक: TObject);
वर
पी: टीपोट;
शुरू
GetCursorPos (P);
P: = TreeView1.ScreenToClient (P);
अगर (htOnStateIcon में
TreeView1.GetHitTestInfoAt (P.X, P.Y)) फिर
ToggleTreeViewCheckBoxes (
TreeView1.Selected,
cFlatUnCheck,
cFlatChecked,
cFlatRadioUnCheck,
cFlatRadioChecked);
समाप्त; (* TreeView1Click *)
कोड को वर्तमान माउस की स्थिति मिलती है, स्टेटहॉक को GetHitTestInfoAt फ़ंक्शन को कॉल करके क्लिक करने के लिए ट्रीव्यू निर्देशांक और चेक में कनवर्ट करता है। यदि यह था, तो टॉगल करने की प्रक्रिया को कहा जाता है।
अधिकतर, आप उम्मीद करेंगे कि स्पेसबार चेकबॉक्स या रेडियो बटन को टॉगल करेगा, इसलिए यहां उस मानक का उपयोग करके ट्रीव्यू ऑनकेडाउन इवेंट को कैसे लिखना है:
प्रक्रिया TForm1.TreeView1KeyDown (
प्रेषक: Tobject;
var कुंजी: शब्द;
पारी: TShiftState);
beginif (कुंजी = VK_SPACE) तथा
असाइन किया गया (TreeView1.Selected) फिर
ToggleTreeViewCheckBoxes (
TreeView1.Selected,
cFlatUnCheck,
cFlatChecked,
cFlatRadioUnCheck,
cFlatRadioChecked);
समाप्त; (* TreeView1KeyDown *)
अंत में, यहां बताया गया है कि फॉर्म का ऑनशॉ और ट्रीव्यू का ऑनचेंजिंग इवेंट कैसा दिख सकता है, यदि आप ट्रीव्यू के नोड्स को ढहने से रोकना चाहते हैं:
प्रक्रिया TForm1.FormCreate (प्रेषक: Tobject);
शुरू
TreeView1.FullExpand;
समाप्त; (* FormCreate *)
प्रक्रिया TForm1.TreeView1Collapsing (
प्रेषक: Tobject;
नोड: TTreeNode;
वर AllowCollapse: बूलियन);
शुरू
AllowCollapse: = false;
समाप्त; (* TreeView1Collapsing *)
अंत में, यह जांचने के लिए कि क्या नोड की जाँच की जाती है, आप बस निम्नलिखित तुलना करें (एक बटन के ऑनक्लिक ईवेंट हैंडलर में, उदाहरण के लिए):
प्रक्रिया TForm1.Button1 क्लिक करें (प्रेषक: TObject);
वर
BoolResult: बूलियन;
tn: TTreeNode;
beginif असाइन किया गया (TreeView1.Selected) thenbegin
tn: = TreeView1.Selected;
बूलोस्कूल: = टीएन। StateIndex में
[cFlatChecked, cFlatRadioChecked];
मेमो १। पाठ: = टीएन। पाठ +
#13#10 +
'चयनित:' +
BoolToStr (BoolResult, True);
समाप्त;
समाप्त; (* Button1Click *)
हालाँकि इस प्रकार की कोडिंग को मिशन-क्रिटिकल नहीं माना जा सकता है, लेकिन यह आपके अनुप्रयोगों को अधिक पेशेवर और स्मूद लुक दे सकता है। इसके अलावा, विवेकपूर्ण रूप से चेकबॉक्स और रेडियो बटन का उपयोग करके, वे आपके एप्लिकेशन का उपयोग करना आसान बना सकते हैं। उन्हें यकीन है कि अच्छा लगेगा!
इस लेख में वर्णित कोड का उपयोग करके नीचे दी गई छवि को एक परीक्षण एप्लिकेशन से लिया गया था। जैसा कि आप देख सकते हैं, आप स्वतंत्र रूप से उन चेकबॉक्स या रेडियो बटन वाले नोड्स को मिला सकते हैं जिनके पास कोई नहीं है, हालांकि आपको "खाली" नोड्स को "के साथ" मिश्रण नहीं करना चाहिएचेकबॉक्स"नोड्स (छवि में रेडियो बटन पर एक नज़र डालें) क्योंकि इससे यह देखना बहुत मुश्किल है कि नोड्स क्या संबंधित हैं।