2014-06-06 6 views
5

के रूप में मैं जब बुलाया जा रहा है दूसरी एक्सेल में उत्पादन करने में सक्षम आवेदन की आवश्यकता है मैं दो आवेदनों को खारिज कर दिया है कि मैं PostMessage (SendMessage माध्यम से संवाद करने की जरूरत है।डेल्फी: PostMessage से एक कस्टम विंडोज संदेश कैसे प्राप्त करें?

अब तक आवेदन 1को फोन करेगा आवेदन 2, यकीन है कि यह खुला है, और जब यह है, अनुप्रयोग 1 अक्षम पर सेट किया जाता है बना रही है।

उपयोगकर्ता आवेदन 2 साथ समाप्त हो गया है जब मैं वापसapplciation 1 के लिए एक संदेश भेजने की जरूरत है ए के लिए अनलॉक करने के लिए इसे कम करें।

मैं का उपयोग कर प्रत्येक आवेदन में पंजीकृत किया है उसी Windows संदेश:

const 
    MyMessage = 'My-Message'; 

var 
    MyMessageID: cardinal; 

procedure TMF.FormCreate(Sender: TObject); 
begin 
    MyMessageID := RegisterWindowMessage(MyMessage); 
end; 

और आवेदन 2 में मैं का उपयोग कर आवेदन 1 के लिए संदेश पोस्ट कर सकते हैं:

targetHandle := FindWindow(Pchar('TMF'), Pchar('Send Test')); 
... 
if PostMessage(targetHandle, (MyMessageID), 0, 0) then 
... 

मैं क्या समझ में नहीं आता मैं एप्लिकेशन में संदेश के लिए हैंडलर कैसे घोषित करता हूं 1.

यदि मैं मानक विंडोज संदेश का उपयोग कर रहा था, जैसे WM_COPYDATA मैं एक प्रक्रिया घोषित करता हूं

procedure WMCopyData(var Msg: TWMCopyData); message WM_COPYDATA; 

लेकिन यह गिरता है क्योंकि मैं MyMessageID को पर्याप्त जल्दी घोषित नहीं कर सकता।

शायद ऐसा इसलिए है क्योंकि शुक्रवार दोपहर है, लेकिन मुझे क्या याद आ रही है?

उत्तर

6

आप message कीवर्ड का उपयोग नहीं कर सकते क्योंकि संदेश निरंतर संकलन समय पर ज्ञात नहीं है। इसके बजाय आपको WndProc:

procedure WndProc(var Message: TMessage); override; 
.... 
procedure TMF.WndProc(var Message: TMessage); 
begin 
    inherited; 
    if Message.Msg = MyMessageID then begin 
    .... 
    end; 
end; 
ओवरराइड करना होगा
संबंधित मुद्दे