2011-10-10 11 views
7

मैं डेल्फी 6 प्रो का उपयोग कर रहा हूं। मुझे एक ऐसी घटना की ज़रूरत है जो मेरा आवेदन निश्चित रूप से बंद हो जाने पर आग लग जाएगी लेकिन किसी भी फॉर्म को नष्ट करने से पहले। मैंने मुख्य रूप WNDProc() में WM_QUIT संदेशों को फँसाने के बारे में सोचा था, लेकिन यह काम नहीं किया क्योंकि WM_QUIT संदेश देखने से पहले फॉर्म नष्ट हो गए। मैं सोच रहा था कि क्या एक मानक डेल्फी घटना है जिसे मैं घटनाओं की शटडाउन श्रृंखला के इस बिंदु पर कोड निष्पादित करने के लिए उपयोग कर सकता हूं? मैं मुख्य रूप के फॉर्मक्लोज़() ईवेंट का उपयोग नहीं कर सकता क्योंकि यह आग की गारंटी नहीं है, और FormDestroy() ईवेंट बहुत देर हो चुकी है। कोई विचार?क्या कोई डेल्फी घटना है जिसे ऐप समाप्त होने पर कॉल करने की गारंटी है लेकिन किसी भी रूप को नष्ट करने से पहले?

उत्तर

14

आप नहीं देखेंगे एक WM_QUIT पृष्ठभूमि में WndProc() विधि में आने, के रूप में WM_QUIT एक संकेत संदेश के लिए उन्हें रोकने का लूप है, और इस तरह के रूप में यह आम तौर पर एक खिड़की प्रक्रिया के लिए भेजा नहीं है।

आप जो पूछ रहे हैं उसके लिए कोई विशिष्ट घटना नहीं है। हालांकि, आप अपनी परियोजना की .dpr फ़ाइल खोल सकते हैं और Application.Run से बाहर निकलने के बाद आपको जो भी कोड चाहिए, उसे छोड़ दें। संदेश लूप अब नहीं चल रहा है, लेकिन Application और MainForm ऑब्जेक्ट्स अभी तक मुक्त नहीं किए गए हैं।

+0

उत्कृष्ट @ रेमी लेबेउ। मैंने प्रोजेक्ट फ़ाइल का उपयोग करने के बारे में नहीं सोचा था। –

+1

इसके साथ एकमात्र समस्या यह है कि आवेदन के बाद। रुन ने सब कुछ समाप्त कर दिया है प्रभावी रूप से बंद हो गया है और केवल अंतिमकरण खंड चलाने के लिए छोड़ दिया गया है। यह टुकड़ा में बहुत देर हो चुकी है - कोई प्रभावी काम करने में बहुत देर हो चुकी है। – Misha

7

ऐसा करने का सबसे अच्छा तरीका (और मैंने वर्षों से इस पर ध्यान देने में काफी समय लगाया है) SysUtils.pas में AddTerminateProc() दिनचर्या के माध्यम से एक प्रक्रिया को हुक करना है। यह हर बार काम करता है और मैं इसे वर्षों से उपयोग कर रहा हूं (जब तक आप कार्य प्रबंधक के माध्यम से प्रक्रिया को मार नहीं देते)।

+0

धन्यवाद मिशा। मैं इसे भी कोशिश करूंगा। –

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

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