"मेरे पास एक डेल्फी 2007 प्रोजेक्ट है जो विंडोस एक्सपी, विस्टा और कई वर्षों से" 7 "पर ठीक चल रहा है, तो सिस्टमवाइड हॉट कुंजी" सिस्टम-वाइड "नहीं है। यह डेल्फी 5 से अपग्रेड था, इस प्रकार "मेनफॉर्मऑन टास्कबार" डिफ़ॉल्ट रूप से "झूठा" था (मैंने कभी इसे डीपीआर में नहीं बदला)। इस परिदृश्य में, सिस्टम-व्यापी हॉट कुंजी ने मुख्य रूप के ऑनक्रेट ईवेंट हैंडलर में निम्न कोड के साथ "सिस्टम-वाइड" काम किया।डेल्फी 2007 - "मेनफॉर्मऑन टास्कबार: = ट्रू"
HotKey_xyz := GlobalAddAtom('Hotkey_xyz');
if NOT RegisterHotKey(Self.Handle, HotKey_xyz, MOD_CONTROL, VK_F12) then
ShowMessage('Unable to register Control-F12 as system-wide hot key') ;
(I have GlobalDeleteAtom() and UnregisterHotKey() in Form.OnDestroy as expected.)
अब, मैं टास्कबार पर अपने स्वयं के बटन को दिखाने के लिए एक प्रपत्र की जरूरत है, तो मैं "Application.MainFormOnTaskBar: = यह सच है" सेट डीपीआर में। यह उम्मीद के रूप में काम करता है। हालांकि, इस पक्ष प्रभाव है कि नियंत्रण-F12 सिस्टम-वाइड काम नहीं करता है, यह केवल तभी कारगर अपने आवेदन ध्यान केंद्रित किया (हां, तो यह नहीं "सिस्टम-वाइड" अब है।)
मैं बड़े पैमाने पर खोज की है नेट को कुछ सबूत मिलते हैं कि क्यों/क्यों "MainFormOnTaskBar" कुछ सबफॉर्म/मोडल फॉर्म व्यवहार को प्रभावित करता है। हालांकि, मुझे उपरोक्त वर्णित "सिस्टम-वाइड हॉट की" समस्या पर इसके प्रभाव के बारे में कुछ भी नहीं मिला है। मैंने मेनफॉर्मऑन टास्कबार के साथ अपने एप्लिकेशन का परीक्षण और पुनः परीक्षण किया है, जबकि सत्य और गलत पर सेट किया गया है जबकि बाकी सब ठीक वही रहता है। मैं सकारात्मक रूप से सत्यापित कर सकता हूं कि उपरोक्त वर्णित समस्या सिस्टम-व्यापी हॉट कुंजी के साथ MainFormOnTaskBar ध्वज से संबंधित है।
मैं काम के आसपास के बारे में किसी भी मार्गदर्शन की सराहना करता हूं। मुझे दोनों की आवश्यकता है - एक सिस्टम-व्यापी गर्म कुंजी और टास्कबार पर अपने बटन के साथ एक फॉर्म।
आपको बहुत बहुत धन्यवाद।
क्या आप इसे * नई * परियोजना के साथ डुप्लिकेट कर सकते हैं? मैं नहीं कर सका .. –
मैं इसे फिर से पेश नहीं कर सकता। क्या आप अधिक कोड पोस्ट कर सकते हैं? (और संभवतः 'Self.Handle' को 'ApplicationHandkey' कॉल में' एप्लिकेशन। हैंडल 'में बदलने का प्रयास करें?' WM_HOTKEY' संदेश अभी भी आपके फॉर्म पर पहुंच जाएगा, क्योंकि एप्लिकेशन का संदेश हैंडलर इसके साथ कुछ नहीं करता है ; इसे सामान्य रूप से आपके फॉर्म पर भेजा जाएगा।) –
@ केनहाइट: यदि 'कुंजी। हैंडल' हॉट कुंजी को पंजीकृत करने के लिए उपयोग किया जाता है, तो' WM_HOTKEY' संदेशों को सीधे या अप्रत्यक्ष रूप से TForm पर निर्देशित नहीं किया जाएगा। उन्हें 'TAplication' के लिए निर्देशित किया जाएगा, इसलिए उन संदेशों को पकड़ने के लिए जिन्हें आपको 'TApplication.OnMessage' ईवेंट और/या' TApplication.HookMainWindow() 'विधि का उपयोग करना है। –