डेल्फी 200 9 में, मैं एक साधारण करता हूं:मैं FindDialog को शीर्ष पर रहने से कैसे बचा सकता हूं? डेल्फी)?
FindDialog.Execute;
FindDialog विंडो मेरे प्रोग्राम की मुख्य विंडो के शीर्ष पर रहती है जैसा इसे करना चाहिए।
हालांकि, अगर मैं अपने प्रोग्राम की विंडो पर किसी अन्य प्रोग्राम से दूसरी विंडो खोलता हूं, तो FindDialog विंडो दूसरी विंडो के शीर्ष पर बनी हुई है।
अगर मैं इसे किसी अन्य प्रोग्राम (जैसे नोटपैड) से FindDialog के साथ आज़माता हूं, तो ऐसा नहीं होता है। नोटपैड पर एक और प्रोग्राम की विंडो खोलना और इसके FindDialog नोटपैड और FindDialog विंडोज़ दोनों को कवर करेगा। यह सही और अपेक्षित व्यवहार प्रतीत होता है।
क्या यह कुछ गलत है या क्या यह डेल्फी ने FindDialog को लागू करने के तरीके में एक समस्या है? क्या नोटपैड तरीके से काम करने के लिए मैं कुछ कर सकता हूं?
टिप्पणियों के लिए सभी को धन्यवाद। तथ्य यह है कि आप मेरी समस्या का पुनरुत्पादन नहीं कर सकते हैं, यह पहले से ही एक सुराग है कि यह कुछ और कारण है। यह मुझे इसे ट्रैक करने में मदद करेगा। जब मैं कुछ पता लगाता हूं तो मैं थोड़ी अधिक शोध करूँगा और यहां अतिरिक्त जानकारी पोस्ट करूंगा।
बहुत रोचक। मेरा PrintDialog शीर्ष पर नहीं रहता है। अभी भी नहीं पता कि मेरा FindDialog क्यों करता है। अभी भी शोध कर रहा है ...
मैंने कॉल को बदल दिया: FindDialog.Execute (हैंडल); अभी भी शीर्ष पर।
मैंने अपने मुख्य रूप में एक और FindDialog (इस बार FindDialog1) जोड़ा और मैं इसे अपने प्रोग्राम के स्टार्टअप पर निष्पादित करता हूं। यह वही रह-ऑन-टॉप व्यवहार है। कम से कम यह इंगित करता है कि मेरे FindDialog या अनुकूलन के साथ ऐसा करने के लिए कुछ भी नहीं था जिसे मैंने इसके साथ किया था। तो यह मेरे मुख्य रूप में एक सेटिंग होना चाहिए।
ऐसा नहीं लगता है कि मैं अकेला हूं जिसने इसका सामना किया है। देखें: Resource Tuner: Version History जो डेल्फी एप्लिकेशन प्रतीत होता है, जहां संस्करण 1.99 के तहत यह कहता है: "बगफिक्स: (खोज) संवाद पूर्वावलोकन विंडो किसी अन्य एप्लिकेशन पर स्विच करते समय शीर्ष पर रुक गई।" मैं उनसे संपर्क करने का प्रयास कर सकता हूं और देख सकता हूं कि उन्हें याद होगा कि उनका क्या फिक्स था।
मैं अपने फॉर्म में कुछ नए संवाद जोड़ता हूं और इन कॉल को एक ही स्थान पर डालता हूं:
FindDialog1.Execute();
PrintDialog1.Execute();
ReplaceDialog1.Execute();
FontDialog1.Execute();
FindDialog और ReplaceDialog अन्य विंडो के सामने शीर्ष पर रहता है। PrintDialog और FontDialog शीर्ष पर नहीं रहते हैं और काम करते हैं जैसा कि उन्हें करना चाहिए।
तो संवाद के दो सेटों के बीच क्या अंतर है जो पहले दो को गलत बनाता है?
इसके अलावा, यह समस्या मेरे प्रोग्राम के पुराने संस्करण में होती है जिसे डेल्फी 4 xxx113 के साथ संकलित किया गया था। अब मुझे लगता है कि यह समस्या मेरे पुराने संस्करण में नहीं हुई थी जो डेल्फी 4.
का उपयोग करती थी और यह एक उपयोगकर्ता था जिसने इस समस्या की सूचना दी थी। वह विंडोज एक्सपी का उपयोग करता है, और मैं विस्टा पर विकास कर रहा हूं, इसलिए यह विभिन्न ओएस के तहत होता है।
पुष्टिकरण: हाँ, मैं एक नया रूप बनाता हूं और उस पर एक FindDialog जोड़ता हूं। FindDialog में समस्या नहीं है। यह इंगित करता है कि मेरे प्रोग्राम में कुछ ढूँढें FindDialog को शीर्ष पर रहने का कारण बन रहा है। अब, मुझे यह पता लगाना है कि वह क्या है। कोई और विचार? अगर कोई मुझे जवाब देता है जो मुझे हल करने में मदद करने के लिए मुझे एक सुराग देता है, तो उन्हें स्वीकार्य उत्तर मिल जाएगा।
समाधान: Sertac के उत्तर में उनके जवाब ने मुझे कामकाज दिया:
Application.NormalizeTopMosts;
FindDialog.Execute();
Application.RestoreTopMosts;
ऐसा करने से FindDialog TopMost होने से रोकता है जब एप्लिकेशन TopMost नहीं होता है।
... लेकिन मैं अभी भी वास्तव में यह नहीं समझता (NormalizeTopMosts पर डेल्फी सहायता) बहुत भ्रमित है और यह इंगित नहीं करता कि इसे ऐसा करना चाहिए।
उम्मीद है कि यह "ठीक" अन्य समस्याओं का कारण नहीं बनता है।
इसे पुन: पेश नहीं कर सकता (डी 200 9 पूरी तरह अद्यतन)। दोनों 'FindDialog1.Execute;' और 'FindDialog1.Execute();' दोनों को दोनों को कोई संभाल नहीं लेना चाहिए। जब मैं ढूँढें संवाद खोलता हूं, तो कुछ अन्य ऐप खोलें (मेरे मामले में नोटपैड) और इसे मेरे ऊपर ले जाएं संवाद के साथ डेल्फी ऐप, इसकी मुख्य विंडो और खोज संवाद दोनों नोटपैड की खिड़की से ढके हुए हैं। –
मैंने यहां कुछ गलत समझा होगा लेकिन मैं डेल्फी एक्सई में पुन: उत्पन्न नहीं कर सकता। –
एफडब्ल्यूआईडब्ल्यू मैं इस व्यवहार को डी 2010 में पुन: उत्पन्न नहीं कर सकता। क्या आप निष्पादन विधि के लिए एक HWND पास कर रहे हैं? यदि मुख्य रूप के हैंडल को पार करने का प्रयास न करें और देखें कि क्या इससे मदद मिलती है। –