मालिक बनाम समझ डेल्फी अनुप्रयोगों में जनक

हर बार जब आप किसी पैनल को एक फॉर्म और उस पैनल के एक बटन पर रखते हैं तो आप "अदृश्य" कनेक्शन बनाते हैं। पर्चा बनता है मालिक बटन का, और पैनल का होना तय है माता-पिता.

हर डेल्फी घटक में एक मालिक की संपत्ति होती है। मालिक ध्यान रखता है मुक्त स्वामित्व वाले घटक जब इसे मुक्त किया जा रहा है।

इसी तरह, लेकिन अलग-अलग, मूल संपत्ति उस घटक को इंगित करती है जिसमें "बच्चा" घटक होता है।

माता-पिता

अभिभावक उस घटक को संदर्भित करता है जो किसी अन्य घटक में निहित होता है, जैसे कि TForm, TGroupBox या एक TPanel। यदि एक नियंत्रण (माता-पिता) में अन्य शामिल हैं, तो निहित नियंत्रण बच्चे माता-पिता के नियंत्रण हैं।

घटक कैसे प्रदर्शित होता है, यह निर्धारित करता है। उदाहरण के लिए, वामपंथी और शीर्ष गुण सभी जनक के सापेक्ष हैं।

मूल संपत्ति को रन-टाइम के दौरान सौंपा और बदला जा सकता है।

सभी घटकों में अभिभावक नहीं होते हैं। कई रूपों में माता-पिता नहीं होते हैं। उदाहरण के लिए, विंडोज़ डेस्कटॉप पर सीधे दिखाई देने वाले फॉर्म में पैरेंट को शून्य पर सेट किया जाता है। एक घटक है HasParent विधि एक बूलियन मान देता है जो यह दर्शाता है कि घटक को माता-पिता को सौंपा गया है या नहीं।

instagram viewer

हम एक नियंत्रण के जनक को प्राप्त करने या स्थापित करने के लिए मूल संपत्ति का उपयोग करते हैं। उदाहरण के लिए, एक फॉर्म पर दो पैनल (पैनल 1, पैनल 2) रखें और पहले पैनल (पैनल 1) पर एक बटन (बटन 1) रखें। यह Button की पैरेंट प्रॉपर्टीज को पैनल 1 में सेट करता है।

 Button1.Parent: = पैनल 2; 

यदि आप उपरोक्त कोड को दूसरे पैनल के लिए ऑनक्लिक इवेंट में रखते हैं, तो जब आप पैनल 2 पर क्लिक करते हैं तो पैनल 1 से पैनल 2 तक बटन "जंप" होता है: पैनल 1 अब बटन के लिए जनक नहीं है।

जब आप रन-टाइम में एक टीबीटाउन बनाना चाहते हैं, तो यह महत्वपूर्ण है कि हम एक अभिभावक को असाइन करना याद रखें - नियंत्रण जिसमें बटन शामिल है। एक घटक के दिखाई देने के लिए, यह अपने भीतर खुद को प्रदर्शित करने के लिए माता-पिता होना चाहिए.

ParentThis और ParentThat

यदि आप डिज़ाइन समय पर एक बटन का चयन करते हैं और ऑब्जेक्ट इंस्पेक्टर को देखते हैं तो आप कई "पेरेंट-अवेयर" गुणों को देखेंगे। ParentFont, उदाहरण के लिए, इंगित करता है कि क्या बटन के कैप्शन के लिए उपयोग किया जाने वाला फ़ॉन्ट बटन के माता-पिता के लिए उपयोग किया गया एक ही है (पिछले उदाहरण में: पैनल 1)। यदि किसी पैनल पर सभी बटन के लिए ParentFont सही है, तो पैनल की फ़ॉन्ट संपत्ति को बोल्ड में बदलकर उस (बोल्ड) फ़ॉन्ट का उपयोग करने के लिए पैनल पर सभी बटन के कैप्शन का कारण बनता है।

संपत्ति को नियंत्रित करता है

सभी घटक जो समान अभिभावक को साझा करते हैं वे के हिस्से के रूप में उपलब्ध हैं नियंत्रण उस जनक की संपत्ति। उदाहरण के लिए, नियंत्रण का उपयोग किया जा सकता है खिड़की नियंत्रण के सभी बच्चों पर पुनरावृति.

पैनल 1 पर सभी समाहित घटकों को छिपाने के लिए कोड के अगले टुकड़े का उपयोग किया जा सकता है:

के लिये ii: = 0 सेवा पैनल 1। कांट्रोलकाउंट - 1 कर

 पैनल 1. कंट्रोल्स [ii]। अदृश्य: = गलत;


ट्रिक ट्रिक

विंडो नियंत्रण में तीन बुनियादी विशेषताएं हैं: वे इनपुट फ़ोकस प्राप्त कर सकते हैं, वे सिस्टम संसाधनों का उपयोग करते हैं, और वे अन्य नियंत्रणों के लिए माता-पिता हो सकते हैं।

उदाहरण के लिए, बटन घटक एक विंडो नियंत्रण है और किसी अन्य घटक के लिए माता-पिता नहीं हो सकता है - आप उस पर कोई अन्य घटक नहीं रख सकते। बात यह है कि डेल्फी इस सुविधा को हमसे छिपाती है। एक उदाहरण TStatusBar के लिए छिपी हुई संभावना है कि उस पर TProgressBar जैसे कुछ घटक हों।

स्वामित्व

सबसे पहले, ध्यान दें कि एक फॉर्म किसी भी घटक का समग्र स्वामी है जो उस पर रहता है (डिजाइन-समय पर प्रपत्र पर तैनात)। इसका मतलब यह है कि जब किसी फॉर्म को नष्ट किया जाता है, तो फॉर्म के सभी घटक भी नष्ट हो जाते हैं। उदाहरण के लिए, यदि हमारे पास एक ऐसा एप्लिकेशन है जिसमें एक फॉर्म तब होता है जब हम फॉर्म ऑब्जेक्ट के लिए फ्री या रिलीज विधि कहते हैं, हम उस रूप में सभी वस्तुओं को स्पष्ट रूप से मुक्त करने के बारे में चिंता करने की ज़रूरत नहीं है - क्योंकि यह फॉर्म इसके सभी का मालिक है अवयव।

प्रत्येक घटक जो हम डिज़ाइन या रन टाइम पर बनाते हैं, उसका स्वामित्व किसी अन्य घटक के पास होना चाहिए। एक घटक का मालिक- अपनी मालिक की संपत्ति का मूल्य- घटक बनाए जाने पर निर्माणकर्ता को दिए गए पैरामीटर द्वारा निर्धारित किया जाता है। स्वामी को फिर से असाइन करने का एकमात्र तरीका रन-टाइम के दौरान InsertComponent / RemoveComponent विधियों का उपयोग करना है। डिफ़ॉल्ट रूप से, एक फ़ॉर्म इस पर सभी घटकों का मालिक होता है और बदले में अनुप्रयोग के स्वामित्व में होता है।

जब हम कीवर्ड का उपयोग करते हैं स्वयं बनाएँ विधि के लिए पैरामीटर के रूप में - हम जो ऑब्जेक्ट बना रहे हैं, वह उस वर्ग के स्वामित्व में है जो विधि में निहित है - जो आमतौर पर एक डेल्फी फॉर्म है।

यदि दूसरी ओर, हम घटक का मालिक एक और घटक (प्रपत्र नहीं) बनाते हैं, तो हम उस घटक को नष्ट होने पर वस्तु के निपटान के लिए जिम्मेदार बना रहे हैं।

किसी अन्य की तरह डेल्फी घटक, कस्टम मेड TFindFile घटक को रन टाइम पर बनाया, इस्तेमाल और नष्ट किया जा सकता है। बनाने के लिए, का उपयोग करें और एक मुक्त TFindFile घटक रन पर, आप अगले कोड स्निपेट का उपयोग कर सकते हैं:

का उपयोग करता है फ़ाइल ढूंढे;

...
वर FFile: TFindFile;

प्रक्रिया TForm1.InitializeData;

शुरू // फॉर्म ("स्व") घटक का स्वामी है // कोई माता-पिता नहीं है क्योंकि यह // एक अदृश्य घटक है।

 FFile: = TFindFile। बनाएँ (स्व);

 ...

समाप्त;

नोट: चूंकि FFile एक मालिक (Form1) के साथ बनाया गया है, इसलिए हमें घटक को मुक्त करने के लिए कुछ भी करने की आवश्यकता नहीं है - जब मालिक को नष्ट कर दिया जाएगा तो इसे मुक्त कर दिया जाएगा।

अवयव गुण

एक ही मालिक को साझा करने वाले सभी घटक के हिस्से के रूप में उपलब्ध हैं अवयवों की संपत्ति उस मालिक का। निम्न प्रक्रिया का उपयोग फ़ॉर्म पर मौजूद सभी संपादन घटकों को साफ़ करने के लिए किया जाता है:

प्रक्रिया ClearEdits (AForm: TForm);

वर

 ii: पूर्णांक;

शुरू

के लिये ii: = 0 सेवा एक परचा। ComponentCount -1 कर

अगर (एक परचा। अवयव [ii] है TEdit) फिर TEdit (AForm) घटक [ii]) पाठ: = '';

समाप्त; 

"अनाथ"

कुछ नियंत्रण (जैसे कि ActiveX नियंत्रण) गैर-वीसीएल खिड़कियों में होते हैं, बजाय माता-पिता के नियंत्रण में। इन नियंत्रणों के लिए, जनक का मान है शून्य और यह ParentWindow संपत्ति गैर-वीसीएल मूल विंडो निर्दिष्ट करती है। पेरेंटविंडो की स्थापना नियंत्रण को स्थानांतरित करती है ताकि यह निर्दिष्ट विंडो में निहित हो। जब नियंत्रण का उपयोग कर बनाया जाता है, तो ParentWindow अपने आप सेट हो जाता है CreateParented तरीका।

सच्चाई यह है कि ज्यादातर मामलों में आपको माता-पिता और मालिकों की परवाह करने की जरूरत नहीं है, लेकिन जब ओओपी की बात आती है और घटक विकास या जब आप डेल्फी को एक कदम आगे ले जाना चाहते हैं तो इस लेख में दिए गए कथन आपको उस कदम को तेजी से उठाने में मदद करेंगे।