मोडल फॉर्म विशिष्ट सुविधाएँ प्रदान करते हैं जो कि हम गैर-सामान्य रूप से प्रदर्शित करते समय नहीं कर सकते हैं। आमतौर पर, हम अपनी प्रक्रियाओं को किसी भी चीज़ से अलग करने के लिए एक रूप प्रदर्शित करेंगे जो मुख्य रूप से अन्यथा हो सकता है। एक बार ये प्रक्रिया पूरी हो जाने के बाद, आप यह जानना चाह सकते हैं कि उपयोगकर्ता ने मोडल फॉर्म को बंद करने के लिए सेव या कैंसल बटन को दबाया है या नहीं। इसे पूरा करने के लिए आप कुछ दिलचस्प कोड लिख सकते हैं, लेकिन यह मुश्किल नहीं है। डेल्फी ModalResult प्रॉपर्टी के साथ मोडल फॉर्म की आपूर्ति करता है, जिसे हम यह बताने के लिए पढ़ सकते हैं कि उपयोगकर्ता ने फॉर्म को कैसे छोड़ा।
निम्नलिखित कोड एक परिणाम देता है, लेकिन कॉलिंग रूटीन इसे अनदेखा करता है:
वर एफ: TForm2; शुरू एफ: = TForm2.Create (शून्य); F.ShowModal; F.Release; ...
ऊपर दिखाया गया उदाहरण केवल फ़ॉर्म दिखाता है, उपयोगकर्ता को इसके साथ कुछ करने देता है, फिर इसे जारी करता है। यह जाँचने के लिए कि फ़ॉर्म को कैसे समाप्त किया गया था, हमें इस तथ्य का लाभ उठाने की आवश्यकता है कि ShowModal विधि एक ऐसा फ़ंक्शन है जो कई मोडल.ऑनलाइन मानों में से एक को लौटाता है। लाइन बदलो
F.ShowModal
सेवा
अगर F.ShowModal = mrOk फिर
हमें जो कुछ भी हम प्राप्त करना चाहते हैं, उसे सेट करने के लिए हमें मोडल फॉर्म में कुछ कोड की आवश्यकता है। ModalResult प्राप्त करने का एक से अधिक तरीका है क्योंकि TForm केवल ModalResult संपत्ति वाला घटक नहीं है - TButton में एक भी है।
आइए हम पहले TButton के ModalResult को देखें। एक नई परियोजना शुरू करें, और एक अतिरिक्त फ़ॉर्म जोड़ें (डेल्फी आईडीई मुख्य मेनू: फ़ाइल -> नया -> फॉर्म)। इस नए फॉर्म में एक 'फॉर्म 2' नाम होगा। अगला एक TButton (नाम: 'Button1') को मुख्य रूप (Form1) में जोड़ें, नए बटन पर डबल-क्लिक करें और निम्नलिखित कोड दर्ज करें:
प्रक्रिया TForm1.Button1 क्लिक करें (प्रेषक: TObject); वर एफ: TForm2; शुरू f: = TForm2.Create (शून्य); प्रयत्नअगर च। शोमॉडल = mrOk फिर कैप्शन: = 'हां' अन्य कैप्शन: = 'नहीं'; आखिरकार च। रिलीज; समाप्त; समाप्त;
अब अतिरिक्त फॉर्म का चयन करें। इसे दो TButtons दें, एक 'सेव' लेबल करें (नाम: 'btnSave'; कैप्शन: 'सहेजें') और अन्य 'रद्द' (नाम: 'btnCancel'; कैप्शन: 'रद्द करें')। सहेजें बटन का चयन करें और ऑब्जेक्ट इंस्पेक्टर को लाने के लिए F4 दबाएं, संपत्ति को खोजने तक / नीचे स्क्रॉल करें। इसे mrOk पर सेट करें। फ़ॉर्म पर वापस जाएं और रद्द करें बटन चुनें, F4 दबाएं, संपत्ति ModalResult चुनें, और इसे सेट करें mrCancel।
यह इतना सरल है। अब प्रोजेक्ट को चलाने के लिए F9 दबाएं। (आपकी पर्यावरण सेटिंग के आधार पर, डेल्फी फाइलों को सहेजने के लिए संकेत दे सकती है।) एक बार मुख्य फॉर्म दिखाई देने पर, आपके द्वारा पहले जोड़ा गया Button1 दबाएं, बच्चे का फॉर्म दिखाने के लिए। जब बच्चा फ़ॉर्म दिखाई देता है, तो सहेजें बटन दबाएं और फ़ॉर्म बंद हो जाता है, एक बार मुख्य रूप से नोट करें कि यह कैप्शन "हां" कहता है। बच्चे के फॉर्म को फिर से लाने के लिए मुख्य फॉर्म का बटन दबाएं लेकिन इस बार कैंसिल बटन दबाएं (या सिस्टम मेनू बंद करें आइटम या कैप्शन क्षेत्र में [x] बटन)। मुख्य रूप का कैप्शन "नहीं" पढ़ा जाएगा।
यह कैसे काम करता है? TButton के लिए क्लिक करें (StdCtrls.pas से) पर एक नज़र डालें:
प्रक्रिया TButton। पर क्लिक करें; वर प्रपत्र: TCustomForm; शुरू प्रपत्र: = गेटपेंटफॉर्म (स्वयं); अगर रूप नील फिर प्रपत्र। ModalResult: = ModalResult; विरासत में मिला पर क्लिक करें; समाप्त;
क्या होता है कि मालिक (इस मामले में द्वितीयक रूप) TButton को इसके ModalResult को TButton के ModalResult के मान के अनुसार सेट किया गया है। यदि आप TButton सेट नहीं करते हैं। ModalResult, फिर मान mrNone है (डिफ़ॉल्ट रूप से)। यहां तक कि अगर टीबीटटन को दूसरे नियंत्रण पर रखा जाता है, तब भी इसका परिणाम निर्धारित करने के लिए मूल रूप का उपयोग किया जाता है। अंतिम पंक्ति उसके पूर्वज वर्ग से विरासत में मिली क्लिक घटना को आमंत्रित करती है।
यह समझने के लिए कि फॉर्म मोडलस्कूल के साथ क्या होता है, यह फॉर्मपस में कोड की समीक्षा करना सार्थक है, जिसे आपको.. \ डेल्फीएन स्रोत (जहां एन संस्करण संख्या का प्रतिनिधित्व करता है) में खोजने में सक्षम होना चाहिए।
TForm के ShowModal फ़ंक्शन में, फ़ॉर्म दिखाए जाने के तुरंत बाद, रिपीट-अप लूप शुरू होता है, जो शून्य से अधिक मान बनने के लिए चर ModalResult की जाँच करता रहता है। जब ऐसा होता है, तो अंतिम कोड फ़ॉर्म को बंद कर देता है।
जैसा कि ऊपर वर्णित है, आप डिज़ाइन-टाइम पर मोडल-सेट सेट कर सकते हैं, लेकिन रन-टाइम में आप कोड में सीधे मोडल-टाइप संपत्ति भी सेट कर सकते हैं।