मेरे पास एक मालिक कॉम्बो बॉक्स तैयार है जो कॉलम में स्ट्रिंग प्रदर्शित करता है। ड्राइंग रूटीन को combos में साझा किया जा सकता है यदि मैं किसी भी तरह से OnDrawItem ईवेंट में कॉलम विनिर्देशों को पार कर सकता हूं। ऐसा करने का एक स्वाभाविक तरीका, कॉम्बोबॉक्स में कॉलम चौड़ाई की सरणी को पास करना होगा। संपत्ति को रीग करें और फिर उसे सरणी में डालें।डेल्फी में पॉइंटर और वापस एक सरणी डालने के लिए कैसे?
जब मैं के रूप में स्तंभ सरणी को परिभाषित:
const arrWidth :array[1..4] of integer = (100,100,100,70);
और करने के लिए टैग गुण सेट:
: OnDrawItem घटना मेंComboBox.Tag := integer(@arrWidth);
और उसके बाद, इसे वापस एक सरणी के लिए डाली
Widths :array of integer;
Widths := pointer(ComboBox.Tag);
मैं सरणी तत्वों को ठीक देख सकता हूं, लेकिन सरणी को इसकी लंबाई नहीं पता है। यह यादृच्छिक मूल्यों के सभी प्रकार के साथ बहुत लंबा प्रतीत होता है।
मैंने गतिशील सरणी का उपयोग करने का प्रयास किया है, लेकिन फिर मुझे उचित कॉलम मान भी नहीं मिलते हैं।
वैकल्पिक कि टैग में सरणी संकेत भंडारण शामिल नहीं है एक वंशज है कि एक संपत्ति कार्य के लिए समर्पित में मान संग्रहीत कर लेता लेखन में शामिल हैं, और एक साहचर्य सरणी (TDictionary की तरह) में स्तंभ चौड़ाई भंडारण कि combo- नक्शे चौड़ाई सरणी के लिए बॉक्स उदाहरण। –
टिप्पणी के लिए धन्यवाद। मैंने एक वंश बनाने पर विचार किया था, लेकिन इसे बहुत अधिक प्रयास माना। शायद यह भविष्य में फॉर्म को और अधिक रखरखाव बनाएगा, लेकिन यह 15 वर्षों में पहली बार था जब मैं कॉलम के साथ एक कॉम्बो बॉक्स चाहता था, इसलिए मुझे नहीं लगता था कि मैं इसका अधिक उपयोग करूँगा। –