2013-04-09 5 views
5

रनटाइम पर एक नई शैली को लागू करने के बाद मेरे एप्लिकेशन का मेनफॉर्म एक नया विंडो हैंडल बनाता है - क्या इसे रोकने या हैंडल को फिर से सौंपने का कोई तरीका है क्योंकि मुझे निम्न त्रुटि का टन मिल रहा है :डेल्फी XE2, vcl शैलियों को पुनर्निर्माण विंडो हैंडल

'सिस्टम त्रुटि। कोड: 1400. अमान्य विंडो हैंडल '

क्या इस प्रक्रिया में हेरफेर करने का कोई तरीका है जो नए हैंडल को असाइन करने के लिए मजबूर करता है?

मैं यह कर हल निम्नलिखित:

मेरा मुख्य रूप एक अदृश्य 'सहायक' रूप की जाती है कि कभी नहीं दिखाया गया है बनाया है, लेकिन है कि दृश्य घटक है - यह संभाल त्रुटि जब इन पुनः बनाने का प्रयास कर रहा था फेंक दिया गया था दृश्य घटकों, इसलिए मैंने प्रासंगिक घटकों को वस्तुओं के साथ बदल दिया (ध्यान दें कि मैंने मूल रूप से यह कोड नहीं लिखा था)।

+1

विंडो हैंडल (विशेष रूप से धागे में) की प्रतियों को स्टोर न करें, [थ्रेड में अमान्य विंडो हैंडल "अमान्य विंडो हैंडल देखें] (http://stackoverflow.com/q/3474227/576719)। –

+1

हां उससे बचने के तरीके हैं। अगर आप हमें बताएंगे कि ऐसा क्यों होता है तो हम मदद कर सकते हैं। तो, आपके पास एक पुरानी खिड़की हैंडल क्यों है? –

उत्तर

5

खिड़की हैंडल को फिर से बनाने से बचने का कोई तरीका नहीं है। इसके बजाए, अपनी विंडो के CreateWnd और DestroyWnd विधियों को ओवरराइड करें ताकि विंडो को फिर से बनाया जाने पर आपको अधिसूचित किया जा सके।

इसके अलावा, नष्ट होने वाली खिड़कियों के हैंडल के लगातार संदर्भ रखने से बचें। इसके बजाए, प्रत्येक बार आपको इसकी आवश्यकता होने पर Handle संपत्ति पढ़ें। तब आपको अधिसूचनाओं के लिए देखना नहीं होगा।

एक अलग धागे से Handle पढ़ने से सावधान रहें, हालांकि, इससे विंडो को गलत धागे से जोड़ा जा सकता है। किसी भी कोड को लपेटें जिसे वीसीएल विंडो के साथ Synchronize या Queue के माध्यम से कॉल करने की विधि में बातचीत करने की आवश्यकता है।

संबंधित मुद्दे