मेनफॉर्म विभिन्न विकल्प पैनलों को प्रदर्शित करने के लिए रनटाइम पर कुछ माध्यमिक फ़्रेम ऑब्जेक्ट बनाता है।डेल्फी और लाजर के बीच फॉर्म आरंभ में अंतर?
यहाँ (वे एक TFrame विस्तार) उन फ्रेम वर्गों में से एक के लिए एक विशिष्ट निर्माता है:
constructor Tframe2.Create(AOwner: TComponent);
begin
inherited;
edTime.Text := '12:00pm'; //edTime is a TEdit control. this line is where it throws the exception
//etc.
end;
इस कोड डेल्फी में ठीक काम किया (चाहे या नहीं यह काम करने के लिए सही रास्ता नहीं था), लेकिन लाज़र में एक ही कोड एक EInvalidOperation अपवाद फेंकता रहता है, क्योंकि नियंत्रण (TEdit) में अभी तक कोई अभिभावक "विंडो" असाइन नहीं किया गया है (rsControlHasNoParentWindow), जो वास्तव में समझ में आता है जब मैं कोड की जांच करता हूं क्योंकि माता-पिता को असाइन नहीं किया जा रहा है जब तक कन्स्ट्रक्टर कहा जाता है।
if Assigned(frame) then FreeAndNil(frame);
case Node.AbsoluteIndex of
optInterval: frame := Tframe2.Create(Self); //here's where the constructor gets called.
//etc
end;
frame := TframeOther.Create(Self);
if Assigned(frame) then
begin
frame.Parent := panOptions; //here's where Tframe2's parent gets set
frame.Align := alClient;
end;
तो किसी को भी वहाँ प्रपत्र प्रारंभ अनुक्रम के रूप में डेल्फी और लाजर के बीच कोई महत्वपूर्ण अंतर है, चाहे जहाँ तक व्याख्या कर सकते हैं:
यहाँ MainForm में कोड माध्यमिक फ्रेम initializes है?
और इस प्रकार की प्रारंभिकरण आदेश समस्या को हल करने का सबसे मानक तरीका क्या होगा? अन्य भाषाओं की तुलना में मैं अधिक परिचित हूं, ऐसी त्रुटियों को हल करने के लिए अलग-अलग रणनीतियां हो सकती हैं। मैं कन्स्ट्रक्टर को एक और पैरामीटर जोड़ सकता हूं, या यदि ऐसी कोई विधि है जिसे पोस्ट कन्स्ट्रक्टर को स्क्रीन पर प्री-ड्रॉइंग कहा जाता है जिसे मैं ओवरराइड कर सकता हूं, तो मैं उस कोड को स्थानांतरित कर सकता हूं, या केवल एक सहायक विधि बना सकता हूं और सेट के बाद इसे कॉल कर सकता हूं। यहां कोई विशेष सर्वोत्तम अभ्यास है?
संपादित करें]: ऐसा प्रतीत होता है कि यह किसी भी तरह से TEdit के लिए विशिष्ट हो सकता है। ऐसा लगता है कि चेकबॉक्स के लिए राज्य शुरू करने वाली रेखाएं एक ही समस्या नहीं हैं। क्या यह लाजर में बस एक बग हो सकता है?
मुझे नहीं पता कि यह समस्या को ठीक करता है, लेकिन विरासत बनाएँ (AOwner) सेट करें; निर्माण प्रक्रिया में। – Ravaut123
सरल कोड का प्रयास करें * TEDit.Create (शून्य) .क्स्ट: = '12345' *; यह कोड अभिभावक-रहित संपादन बनाता है और इसे कुछ कैप्शन असाइन करता है। यदि यह वीसीएल में काम करता है लेकिन एलसीएल में नहीं - तो इसका मतलब है कि वे माता-पिता होने के अलग-अलग wrt हैं। यह भी ध्यान रखें कि एलसीएल कुछ टूलकिट लाइब्रेरी के खिलाफ केवल एक रैपर है। जीटीके + पर एलसीएल हैं, क्यूटी पर एलसीएल और कौन जानता है और क्या। हो सकता है कि आप एलसीएल बैकएंड को दूसरी लाइब्रेरी में स्विच कर सकें और इसे ठीक कर सकें। या शायद नहीं। –
मैंने इसे एक शॉट दिया, लेकिन मैं इस मुद्दे को डुप्लिकेट नहीं कर सकता (लाज़र 0.9.30.4)। –