डेल्फी के TListView नियंत्रण स्तंभ हेडर और उप-आइटम वाले स्तंभों में या छोटे या बड़े आइकन के साथ लंबवत या क्षैतिज रूप से आइटम की एक सूची प्रदर्शित करता है।
जैसा कि अधिकांश डेल्फी को नियंत्रित करता है, TListView को उजागर करता है क्लिक पर तथा OnDblClick (OnDoubleClick) ईवेंट।
दुर्भाग्य से, यदि आपको यह जानना है कि किस आइटम पर क्लिक किया गया था या डबल क्लिक किया गया था, तो आप क्लिक की गई वस्तु को प्राप्त करने के लिए केवल ऑनक्लिक / ऑनडब्लिक पर क्लिक न करें।
जब भी उपयोगकर्ता नियंत्रण पर क्लिक करता है, तो TListView के लिए OnClick (OnDblClick) घटना निकाल दी जाती है - जब भी "क्लिक" होता है नियंत्रण के ग्राहक क्षेत्र के अंदर कहीं.
उपयोगकर्ता सूची दृश्य के अंदर क्लिक कर सकता है, लेकिन किसी भी आइटम को "मिस" कर सकता है। क्या अधिक है, क्योंकि सूची दृश्य ViewStyle संपत्ति, उपयोगकर्ता के आधार पर अपना प्रदर्शन बदल सकता है एक आइटम पर क्लिक किया हो सकता है, एक आइटम कैप्शन पर, एक आइटम आइकन पर, "कहीं नहीं", एक आइटम राज्य आइकन पर, आदि।
नोट: ViewStyle गुण यह निर्धारित करता है कि आइटम को सूची दृश्य में कैसे प्रदर्शित किया जाता है: आइटम को चल आइकन के सेट के रूप में, या पाठ के कॉलम के रूप में प्रदर्शित किया जा सकता है।
सूची दृश्य। आइटम पर क्लिक करें और सूची दृश्य। आइटम पर डबल क्लिक करें
सूची दृश्य के लिए OnClick ईवेंट को निकाल दिए जाने पर क्लिक किए गए (यदि कोई है) आइटम का पता लगाने में सक्षम होने के लिए, आपको यह निर्धारित करने की आवश्यकता है कि क्या सूची दृश्य के तत्व X और Y मापदंडों द्वारा निर्दिष्ट बिंदु के अंतर्गत आते हैं - जो कि इस समय माउस का स्थान है "क्लिक"।
TListiew का GetHitTestInfoAt फ़ंक्शन सूची के ग्राहक क्षेत्र में निर्दिष्ट बिंदु के बारे में जानकारी देता है।
यह सुनिश्चित करने के लिए कि आइटम पर क्लिक किया गया था (या डबल क्लिक किया गया) आपको गेटहाइटटेस्टइन्फो को कॉल करने और केवल एक वास्तविक आइटम पर क्लिक इवेंट होने पर प्रतिक्रिया करने की आवश्यकता है।
यहाँ ListView1 की OnDblClick घटना का एक उदाहरण कार्यान्वयन है:
// डबल क्लिक पर ListView1 के हैंडलप्रक्रिया TForm।ListView1DblClick(प्रेषक: Tobject);
वर
hts: ThitTests;
ht: थीटस्ट;
sht: तार;
ListViewCursosPos: TPoint;
चयनित आइटम: TListItem;
शुरू
// ListView से संबंधित माउस कर्सर की स्थिति
ListViewCursosPos: = ListView1.ScreenToClient (माउस)। CursorPos);
// डबल क्लिक करें कहां?
hts: = ListView1.GetHitTestInfoAt (ListViewCursosPos X, ListViewCursosPos। य);
// "डिबग" हिट टेस्ट
कैप्शन: = '';
के लिये हिंदुस्तान टाइम्स में HTS कर
शुरू
sht: = GetEnumName (TypeInfo (THitTest), Integer (ht));
कैप्शन: = फ़ॉर्मेट ('% s% s।', [कैप्शन, sht]);
समाप्त;
// डबल-क्लिक की गई वस्तु का पता लगाएं
अगर hts <= [htOnIcon, htOnItem, htOnLabel, htOnStateIcon] फिर
शुरू
चयनित आइटम: = सूची दृश्य 1। चयनित;
// डबल क्लिक की गई वस्तु के साथ कुछ करें!
कैप्शन: = प्रारूप ('DblClcked:% s', [selectItem। कैप्शन]);
समाप्त;
समाप्त;
OnDblClick (या OnClick) ईवेंट हैंडलर में, GetHitTestInfoAt फ़ंक्शन को नियंत्रण के अंदर "माउस" के स्थान के साथ प्रदान करके पढ़ें। सूची दृश्य से संबंधित माउस का स्थान प्राप्त करने के लिए, स्क्रीनटॉकिएंट फ़ंक्शन का उपयोग स्क्रीन के निर्देशांक में एक बिंदु (माउस एक्स और वाई) को स्थानीय, या क्लाइंट क्षेत्र में समन्वयित करने के लिए किया जाता है।
GetHitTestInfoAt का मान लौटाते हैं THitTests प्रकार। TheTitests का एक सेट है THitTest मूल्यों की गणना की।
सबसे अच्छा गणना मान, उनके विवरण के साथ, ये हैं:
- htAbove - क्लाइंट क्षेत्र के ऊपर।
- htBelow - क्लाइंट क्षेत्र के नीचे।
- htNowhere - नियंत्रण के अंदर, लेकिन एक आइटम पर नहीं।
- htOnItem - किसी आइटम पर, उसके टेक्स्ट या उसके बिटमैप पर।
- htOnButton - एक बटन पर।
- htOnIcon - एक आइकन पर।
- htOnIndent - किसी आइटम के इंडेंटेड एरिया पर।
- htOnLabel - एक लेबल पर।
- htOnRight - किसी वस्तु के दाईं ओर।
- htOnStateIcon - एक आइटम के साथ जुड़े राज्य आइकन या बिटमैप पर।
- htToLeft - क्लाइंट क्षेत्र के बाईं ओर।
- htToRight - क्लाइंट क्षेत्र के दाईं ओर।
यदि GetHitTestInfoAt पर कॉल का परिणाम है सबसेट (डेल्फी सेट!) [htOnIcon, htOnItem, htOnLabel, htOnStateIcon] पर आप सुनिश्चित कर सकते हैं कि उपयोगकर्ता आइटम पर क्लिक किया गया (या उसके आइकन / राज्य आइकन पर)।
अंत में, यदि उपरोक्त सत्य है, तो पढ़ें चयनित सूची दृश्य की संपत्ति, यह सूची में पहला चयनित आइटम (यदि एकाधिक का चयन किया जा सकता है) देता है। क्लिक किए गए / चयनित क्लिक / चयनित आइटम के साथ कुछ करें ...
कोड का पता लगाने और उसे अपनाकर सीखने के लिए पूर्ण स्रोत कोड डाउनलोड करना सुनिश्चित करें।