TApplication.Handle
क्या है?डेल्फी: आवेदन क्या है। हैंडल?
- यह कहां से आता है?
- यह क्यों मौजूद है?
- और सबसे महत्वपूर्ण बात यह है कि सभी रूपों में यह उनके मूल विंडो हैंडल के रूप में क्यों है?
डेल्फी मदद का कहना है:
TApplication.Handle
प्रदान करता है विंडो तक पहुंच आवेदन का मुख्य रूप (विंडो) की संभाल।
property Handle: HWND;
विवरण
उपयोग हैंडल जब Windows API कार्यों एक माता पिता खिड़की संभाल की आवश्यकता है कि बुला। उदाहरण के लिए, एक डीएलएल प्रदर्शित करता है जो अपने स्वयं के शीर्ष-स्तरीय पॉप-अप विंडो को पेरेंट विंडो की आवश्यकता होती है एप्लिकेशन में अपनी विंडो प्रदर्शित करती है। हैंडल प्रॉपर्टी का उपयोग एप्लिकेशन के ऐसे विंडोज भाग को बनाता है, ताकि वे कम से कम, पुनर्स्थापित, सक्षम और एप्लिकेशन के साथ अक्षम हो जाएं।
तो मैं शब्दों पर "आवेदन का मुख्य रूप से खिड़की संभाल" ध्यान देते हैं, और मैं कि ले मतलब करने के लिए आवेदन का मुख्य रूप से खिड़की संभाल, तो मैं तुलना कर सकते हैं :
- "अनुप्रयोग का मुख्य रूप से खिड़की संभाल",
Application
MainForm
की खिड़की हैंडल
लेकिन वे एक ही नहीं कर रहे हैं:
Application.MainForm.Handle: 11473728
Application.Handle: 11079574
तो Application.Handle
क्या है?
- यह कहां से आता है?
- क्या विंडोज ® विंडो हैंडल है?
- यदि यह के
MainForm
की विंडो हैंडल है, तो वे क्यों मेल नहीं खाते हैं? - यदि यह
Application
केMainForm
की विंडो हैंडल है, तो यह क्या है? - अधिक महत्वपूर्ण बात यह है कि यह हर रूप का अंतिम अभिभावक क्यों है?
- और सबसे महत्वपूर्ण: अगर मैं एक फॉर्म को अनपेक्षित करने की कोशिश करता हूं तो सब कुछ क्यों खराब हो जाता है (इसलिए मैं टास्कबार पर दिखाई दे सकता हूं), या आईपी प्रोग्रेसडियलॉग जैसे कुछ उपयोग करने का प्रयास करें?
वास्तव में मैं जो पूछ रहा हूं वह है: डिज़ाइन तर्क क्या है जो एप्लिकेशन बनाता है। हैंडल मौजूद है? अगर मैं समझ सकता हूं कि क्यों, स्पष्ट होना चाहिए।
अद्यतन बीस प्रश्नों की एक खेल के माध्यम से समझना:
यह:
एक खिड़की बनाने का समाधान के बारे में बात में उसके मालिक
null
, Peter Below in 2000 said बनाकर कार्य पट्टी पर दिखाई देते हैं माध्यमिक रूपों से दिखाए गए मोडल रूपों के साथ कुछ समस्याएं पैदा कर सकती हैं।यदि उपयोगकर्ता एक मोडल फॉर्म के ऊपर ऐप से दूर स्विच करता है, और उसके बाद इसे दिखाए गए फॉर्म पर वापस ले जाता है, तो मोडल फॉर्म फ़ॉर्म के नीचे छिपा सकता है। यह सुनिश्चित करें कि मोडल प्रपत्र फार्म का है कि यह पता चला है parented है बनाकर इस से निपटने के लिए (का उपयोग कर `ऊपर के रूप में params.WndParent``)
संभव है लेकिन इस से मानक संवादों साथ संभव नहीं है
Dialogs
इकाई और अपवाद, जो के लिए और अधिक प्रयास की जरूरत है उन्हें सही काम करने के लिए मिलता है (मूल रूप सेApplication.OnActivate
, निपटनेGetLastActivePopup
के माध्यम से आवेदन को parented मोडल रूपों की तलाश में औरSetWindowPos
के माध्यम से जेड क्रम के शीर्ष पर उन्हें लाने) ।
- क्यों एक मॉडल फार्म खत्म करता है अन्य रूपों के पीछे अटक?
- कौन सी तंत्र आम तौर पर सामने के लिए एक मॉडल रूप लाती है, और यह यहां क्यों कार्यात्मक नहीं है?
- विंडोज ® विंडोज़ स्टैक्ड दिखाने के लिए ज़िम्मेदार है। क्या गलत हो गया है कि विंडोज ® सही खिड़कियां नहीं दिखा रहा है?
उन्होंने यह भी टास्कबार पर प्रकट करने के लिए (जब बनाने यह संयुक्त राष्ट्र के स्वामित्व वाली के सामान्य नियम, अपर्याप्त अव्यावहारिक, या अवांछनीय है) नए विंडोज बढ़ाया शैली है कि एक खिड़की बलों का उपयोग कर के बारे में बात WS_EX_APPWINDOW
बढ़ाया जोड़कर शैली:
procedure TForm2.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(params);
Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
end;
लेकिन फिर वह चेतावनी देते हैं:
आप टास्कबार बटन एक माध्यमिक रूपों पर क्लिक करते हैं, जबकि एक अन्य एप्लिकेशन सक्रिय यह अभी भी सभी अनुप्रयोगों च लाएगा है सामने के लिए ओएमएस। आपको बस इतना यदि नहीं चाहते विकल्प
कौन सामने से सभी रूपों ला रहा है जब प्रपत्र के मालिक अभी भी Application.Handle
है नहीं है। आवेदन यह कर रहा है? यह ऐसा क्यों कर रहा है?ऐसा करने के बजाय, इसे नहीं ऐसा नहीं करना चाहिए? का नकारात्मक पक्ष ऐसा नहीं कर रहा है; मैं देख का नकारात्मक पहलू कर यह (सिस्टम मेनू के propertly काम नहीं करते, टास्कबार बटन थंबनेल गलत हैं, विंडोज ® खोल खिड़कियां कम से कम नहीं कर सकते
एक और पोस्ट में, Application
के साथ काम कर Mike Edenfield says that the parent window sends other window's their minimize, maximize and restore messages:।
इससे आपके फ़ॉर्म के लिए टास्कबार बटन जोड़ना होगा, लेकिन वहाँ संभाल करने के लिए कुछ अन्य छोटे विवरण हैं। अधिकांश जाहिर है, अपने फार्म अभी भी कम से कम/अधिकतम कि माता-पिता फार्म के लिए भेजे जाते हैं (वें का मुख्य रूप प्राप्त करता है ई आवेदन)।
procedure WMSysCommand(var Msg: TMessage); WM_SYSCOMMAND; procedure TParentForm.WMSysCommand(var Msg: TMessage); begin if Msg.wParam = SC_MINIMIZE then begin // Send child windows message, don't // send to windows with a taskbar button. end; end;
ध्यान दें कि यह हैंडलर के स्वतंत्र रूप से एक आप व्यवहार करने के लिए चाहते हैं के PARENT रूप में चला जाता है>: इस से बचने के लिए, आप इस तरह के रूप में एक पंक्ति जोड़कर WM_SYSCOMMAND के लिए संदेश हैंडलर स्थापित कर सकते हैं शेष आवेदन, ताकि कम से कम संदेश पर गुजरने से बचें। आप, आदि SC_MAXIMIZE, SC_RESTORE के लिए इसी तरह के> कोड जोड़ सकते हैं
कैसे है यह है कि कम से कम/अधिकतम/मेरे Windows ® खिड़कियों के लिए संदेशों को बहाल अपनी खिड़की के लिए नहीं जा रहे हैं? क्या ऐसा इसलिए है क्योंकि विंडो के मालिक के लिए Windows ® द्वारा विंडो के लिए नियत संदेश भेजे जाते हैं? और इस मामले में डेल्फी आवेदन में सभी रूप Application
द्वारा "स्वामित्व" हैं? इसका मतलब यह नहीं है कि करता है मालिक अशक्त बनाने कि:
procedure TForm2.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.WndParent := 0; //NULL
end;
Application
निकाल देंगे और मेरे रूप में हस्तक्षेप करने से यह की खिड़की हैंडल, और Windows एक बार फिर से मुझे भेजना चाहिए मेरी mimimize/अधिकतम/संदेशों को बहाल?
शायद अगर हम तुलना और विषम अब एक "सामान्य" विंडोज़ अनुप्रयोग बातें, कैसे बोर्लेन्ड शुरू में डेल्फी अनुप्रयोगों काम करने के लिए तैयार किया गया है के साथ करता है - इस Application
वस्तु के संबंध में है और यह मुख्य पाश है।
Application
ऑब्जेक्ट हल करने का क्या समाधान था?- डेल्फी के बाद के संस्करणों के साथ क्या परिवर्तन किया गया था ताकि ये वही मुद्दे मौजूद न हों?
- क्या डेल्फी के बाद के संस्करणों में परिवर्तन अन्य समस्याओं का परिचय नहीं दिया गया था, कि प्रारंभिक अनुप्रयोग डिजाइन को हल करने के लिए इतना कठिन प्रयास किया गया था?
- उन नए एप्लिकेशन अभी भी उनके साथ हस्तक्षेप किए बिना आवेदन कैसे कर सकते हैं?
स्पष्ट रूप से बोर्लैंड ने अपने प्रारंभिक डिजाइन में दोष को महसूस किया। उनका प्रारंभिक डिज़ाइन क्या था, यह किस समस्या को हल कर रहा था, दोष क्या था, फिर से डिजाइन क्या था, और यह समस्या को कैसे हल करता है?
मुझे लगता है कि आपको इन दो चालों के बारे में जानने में रुचि होगी: http://yoy.be/item.asp?i89 http://yoy.be/item.asp?i87 –
@Stinh Sanders: i ' मैंने उन्हें देखा है, वे मुद्दों को हल नहीं करते हैं। इसके अलावा, किसी भी विंडो के मालिक के रूप में GetDesktopWindow को कभी भी कभी नहीं, कभी भी, और अन्य पोस्टों को इस विषय पर सुझाव न दें। ऐसा करने के लिए विंडोज़ को फ्रीज करने के लिए ऐसा करना। यह ऐसी समस्या थी कि माइक्रोसॉफ्ट ने CreateWindow को पैच किया, इसलिए GetDesktopWindow को पास करने वाले किसी भी व्यक्ति को इसके बजाय NULL का उपयोग करने के लिए बदल दिया गया है। और अगर मैं ** yoy.com ** पर उस पोस्ट को संपादित कर सकता हूं, तो मैं चाहता हूं। –