अभी तक यहां के अधिकांश उत्तर चिह्न पर बहुत अधिक हैं और आपको उनकी सलाह पर ध्यान देना अच्छा होगा। हालांकि, इस कहानी के लिए थोड़ा और है। जब आप एक या दूसरे को ओवरराइड करेंगे, तो आपके विशिष्ट प्रश्न के लिए, मैं कोशिश करता हूं और चीजों को थोड़ा सा कर दूंगा।
CreateParams();
सामान्यतः, अधिकांश समय आपको वास्तव में CreateParams() को ओवरराइड करने की आवश्यकता होती है। यदि आप सब कुछ करना चाहते हैं (विंडोज स्टाइल "सबक्लासिंग याद रखें?" विंडोज प्रोग्रामिंग पर पेटज़ोल्ड का मौलिक काम देखें) एक मौजूदा नियंत्रण वर्ग और इसे वीसीएल नियंत्रण में लपेटें, तो आप इसे CreateParams से करते हैं। आप यह भी नियंत्रित कर सकते हैं कि स्टाइल बिट्स सेट हैं और अन्य विभिन्न पैरामीटर। हमने "सबक्लास" बनाने की प्रक्रिया को बहुत आसान बना दिया है। बस अपनी CreateParams() विधि से CreateSubClass() को कॉल करें। उदाहरण के लिए कोर वीसीएल नियंत्रण देखें जैसे कि टीकेकबॉक्स या टीबटन।
CreateWnd();
यदि आप इसे बनाए जाने के बाद विंडो हैंडल के साथ थोड़ा और करने की ज़रूरत है तो आप इसे ओवरराइड करेंगे। उदाहरण के लिए, यदि आपके पास कोई नियंत्रण है जो किसी प्रकार की सूची, पेड़ है, या अन्यथा पोस्ट-निर्माण कॉन्फ़िगरेशन की आवश्यकता है, तो आप इसे यहां करेंगे। विरासत CreateWnd को कॉल करें, और जब यह वापस आता है (आप जानते हैं कि यदि आप CreateWnd से वापस आते हैं तो आपके पास एक वैध हैंडल है क्योंकि अगर कुछ ख़राब हो जाता है तो यह अपवाद उठाएगा), बस अपना अतिरिक्त जादू लागू करें। एक सामान्य परिदृश्य है कि डेटा को टीएसट्रिंग्स सूची में कैश किया गया डेटा लेना और वास्तव में इसे अंतर्निहित विंडो नियंत्रण में ले जाना है। टीएलिस्टबॉक्स इस का एक उत्कृष्ट उदाहरण है।
CreateWindowHandle();
मुझे इस पर मेरी याददाश्त ताज़ा करना पड़ा, लेकिन ऐसा लगता है कि यह शायद ही कभी, कभी भी ओवरराइड किया जाता है। वीसीएल के अंदर कुछ मामलों में, ऐसा प्रतीत होता है कि इसका उपयोग कुछ विंडोज़ जैसे विशिष्ट विंडोज संस्करण और लोकेल विषमताओं के आसपास काम करने के लिए किया जाता है, जैसे कि टीडिट और टीएममो। अन्य स्पष्ट-कट केस TCustomForm में ही है। इस मामले में पुराने एमडीआई (mutli- दस्तावेज़ इंटरफेस) मॉडल का समर्थन करने के लिए वहाँ है। इस मामले में सामान्य CreateWindowEx() API का उपयोग करके एमडीआई बच्चों को नहीं बनाया जा सकता है, आपको वास्तव में हैंडल बनाने के लिए एमडीआई पैरेंट फ्रेम पर एक संदेश भेजना होगा। इसलिए इस विधि को ओवरराइड करने का एकमात्र कारण यह है कि हैंडल बनाने की वास्तविक प्रक्रिया पुरानी कोशिश की और सही CreateWindowEx() से पूरी तरह से अलग माध्यमों के माध्यम से की जाती है।
मैंने नोटिस किया था कि आपका प्रश्न केवल निर्माण प्रक्रिया के बारे में पूछ रहा था, लेकिन कुछ मामलों में विनाश और "वूडू" दोनों के लिए कुछ मामलों में ओवरराइड किया गया है जो कभी-कभी मनोरंजन को संभालने में पड़ते हैं। लेकिन ये अन्य विषय हैं जिन्हें अलग से कवर किया जाना चाहिए :-)।
स्रोत
2009-02-24 21:44:54
शानदार उत्तर। मूल प्रश्न VCL का उल्लेख करने के बाद से जवाब को पूरा करने के लिए बस एक अच्छा वेब संसाधन जोड़ना चाहता था: http://edn.embarcadero.com/article/20569 – Ampere