windows - Component disabling and enabling at runtime in Delphi 2K9. Weird problem -


यहाँ कोड है:

  प्रक्रिया DisableContrlOL (कॉन्स्ट cArray: स्ट्रिंग की सरणी; reeable: बूलियन = झूठी); // VKP / RAW / जनरेशन क्लिक से कहा जा सकता है AComponent: TComponent; CompListDis, CompListEna: TStringList; CompListDis शुरू करें: = TStringList.Create; CompListEna: = TStringList.Create; के लिए I: = कम (सीएआरआरए) से उच्च (सीएआरआरए) एसीएमएपेंन्ट शुरू करते हैं: = खोजकंपनी (सीएआरआरए [आई]); यदि असाइन किया गया है (एसीएमएपेंट) तो अगर (ACMponent TControl है) तब शुरू होता है जब TControl (AComponent)। तब सक्षम करें CompListEna.Add (TControl (AComponent) .नाम) और CompListDis.Add (TControl (AComponent) .नाम); ShowMessage (TControl (AComponent) .Name); यदि पुन: सक्षम तब शुरू होता है / यदि पुन: सक्षम करने की आवश्यकता है, तो सभी whi यदि नहीं TControl (AComponent)। तब सक्षम TControl (ACmponent)। सक्षम: = सत्य; एंड टू एंड (यदि टीकंट्रोल (एसीएमएपेंट)। सक्षम किया गया है) तो टीकंट्रोल (एसीएमएपेंट)। सक्षम: = फॉल्स; समाप्त; समाप्त; समाप्त;  

मुझे लगता है कि और स्पष्टीकरण की आवश्यकता नहीं है। ShowMessage प्रत्येक घटक का नाम सही रूप से दिखाता है, लेकिन स्ट्रिंगलिस्ट में कुछ भी नहीं जोड़ा गया है। क्यों?


अद्यतन: जैसा कि सवाल काफी जंगली हो गया है, मैंने उत्तर की पुष्टि की है, जिसने कुछ मदद की है।

मैं समझता हूं कि मैंने चीजों को बहुत अस्पष्ट रूप से लिखा है, लेकिन मैं बहुत सीमित हूं, क्योंकि ये कोड लाइन वाणिज्यिक परियोजना का हिस्सा हैं, और मेरा शौक और दिल की बात मुख्य समस्या पहले ही 6 घंटे पहले मिली थी, लेकिन रोब सिर्फ इस पूरे सवाल का विस्तार करना चाहता था: डी नहीं, कोई अपराध नहीं, दोस्त, यह ठीक है। मैं इतने तैयार और सहायक पदों को प्राप्त करने में प्रसन्न हूं फिर से धन्यवाद।

आप कैसे जानते हैं कि सूचियों में कुछ भी नहीं जोड़ा गया है? आप उन्हें इस कोड में बनाते हैं और उनका केवल संदर्भ स्थानीय चर में है। जब यह फ़ंक्शन वापस आ जाता है, तब वस्तुएं लीक हो जाती हैं, इसलिए आप कभी भी सूचियों का कभी भी उपयोग नहीं करते हैं।

आपने कहा है कि आपके पास "मॉड्यूलर परीक्षण" के लिए कोड है। चूंकि वह कोड यहाँ नहीं है, मुझे यह मानना ​​होगा कि कोड इस फ़ंक्शन का हिस्सा नहीं है। लेकिन अगर आपके पास बाह्य कोड है जो सूचियों की सामग्री को जांचना चाहता है, तो सूचियां सिर्फ स्थानीय चर नहीं हो सकतीं कोई अन्य कोड उन तक पहुंच सकता है। आपको उन सूचियों को वापस लौटना होगा या बाहर की सूचिओं को स्वीकार करना होगा ताकि आप फिर भरें। यहां के उदाहरण का एक उदाहरण है:

  प्रक्रिया अक्षम करेंकंट्रॉल (कॉन्स्ट cArray: स्ट्रिंग की सरणी; रीननेबल: बूलियन कॉम्पलिस्टडिस, कॉम्प्लिस्ट एना: टीएसट्रिंग्स); // VKP / RAW / जनरेशन क्लिक से कहा जा सकता है AComponent: TComponent; एंट्रंट्रोल: टीसीन्ट्रोल; I: पूर्णांक; मैं के लिए शुरू: = कम (सीएआरआरए) से उच्च (सीएआरआरए) एसीएमएपीनेट शुरू करते हैं: = खोजकंपनी (सीएआरआरए [आई]); यदि असाइन नहीं किया गया है (एसीएमएपेंट) या नहीं (ACMponent TControl है) तो जारी रखें; एंट्रंटोल: = टीकंट्रोल (एसीएमएपेंट); यदि AControl.Enabled तब CompListEna.Add (AControl.Name) और CompListDis.Add (AControl.Name); ShowMessage (AControl.Name); AControl.Enabled: = पुन: प्रयोज्य; समाप्त; समाप्त;  

इस फ़ंक्शन के कॉलर को प्रत्येक सूची के लिए एक TStrings वंश प्रदान करना होगा। वे TStringList हो सकते हैं, या वे अन्य संतानों जैसे कि TMemo.Lines हो सकते हैं, ताकि आप सीधे अपने कार्यक्रम में उनकी सामग्री का निरीक्षण कर सकें। (वे सिर्फ TStrings नहीं हो सकता, हालांकि, यह एक सार वर्ग है।)


जैसा कि आप देख सकते हैं, मैंने आपके कोड में कुछ अन्य बदलाव किए हैं। पुनः सक्षम पैरामीटर का उपयोग करके आपके सभी कोड को एकल कथन में सरलीकृत किया जा सकता है ऐसा इसलिए है क्योंकि पहले से सक्षम एक नियंत्रण सक्षम करने से पहले, और जो पहले से ही अक्षम कर रहे नियंत्रण को अक्षम कर रहे हैं, वो-ऑप्स हैं।

इसके अलावा, नाम TComponent कोड>। उस संपत्ति को पढ़ने से पहले आपको टाइप करने के लिए TControl टाइप करने की आवश्यकता नहीं है, लेकिन जब से आप कहीं और टाइप-कास्टिंग करते हैं, तब से यह एक नया चर टाइप-जाल्ड किए गए धारण करने के लिए समझ में आया < कोड> TControl मान, और यह आपके कोड को पढ़ने में आसान बना सकता है कोड को आसान-से-पढ़ा कोड आसान है, और इससे डीबग करना आसान होता है।


Comments

Popular posts from this blog

c# - ListView onScroll event -

PHP - get image from byte array -

Linux Terminal Problem with Non-Canonical Terminal I/O app -