एक वर्ग (TObject) मेरे पास है के साथ:गैर-विंडो वाले वर्गों में कस्टम संदेश - एक डिफ़ॉल्ट हैंडलर की आवश्यकता है?
private
FHwnd : HWND;
procedure HandleMyMessage(var Message : TMessage); message TH_MYMESSAGE;
जहां TH_MYMESSAGE = WM_USER + 1
वर्ग निर्माता में:
FHwnd := AllocateHWND(HandleMyMessage);
केवल वस्तु जो प्राप्त करता है FHwnd
के लिए एक संदर्भ के लिए एक निजी रिवाज है TThread (इस वर्ग के भीतर बनाया गया) और यह एकमात्र संदेश है जो TH_MYMESSAGE
है। मेरी समझ यह है कि message
प्रक्रिया घोषणा में निर्देश केवल TH_MYMESSAGE
पर हैंडलिंग को प्रतिबंधित करता है।
यह परीक्षण में ठीक काम कर रहा था, लेकिन एक बड़े आवेदन में एकीकरण पर मुझे प्रतिक्रिया मिल रही है कि HandleMyMessage
अन्य संदेशों के साथ भी फ़ायरिंग कर रहा है (स्पष्ट अवांछित परिणामों के साथ)।
HandleMyMessage
में इसे आसानी से ठीक किया गया था। मेरा सवाल है: यह क्यों हो रहा है?
मेरे सबसे अच्छा अनुमान है कि AllocateHWND
HandleMyMessage
यह message
निर्देश होने के बावजूद एक DefWndProc
के बराबर कर दिया गया है। क्या मुझे यह लागू करने का कोई सही तरीका है जिसे मैं याद कर रहा हूं?
अपने अनुमान सही है '' HandleMyMessage' हो जाता है गैर दृश्य बनाया WndProc' खिड़की। इसलिए यह सभी संदेशों को प्राप्त करता है; 'Message.Msg' फ़िल्टर करने का आपका समाधान भी सही है। 'संदेश' विधि संशोधक जिसे हम डेल्फी द्वारा डिफॉल्ट हैंडलिंग 'TObject.Dispatch' कॉल (गैर खिड़की वाले वर्गों में) – teran
@teran मानते हैं कि, मैं अन्य संदेशों के लिए एक डिफ़ॉल्ट' WndProc 'चाहता था,' HandleMyMessage' फ़िल्टर ठीक से ' 'संदेश' निर्देश के साथ अगर मैंने कुछ अन्य सामान्य प्रक्रियाओं पर 'AllocateHWND' किया था? –
@Ken यहां WM_USER के साथ कोई समस्या नहीं है। –