2014-06-06 1 views
5

내가 호출되는 동안 Excel로 출력 할 수있는 두 번째 응용 프로그램이 필요로 내가 배제되어 내가 PostMessage를 (sendMessage 첨부를 통해 통신해야하는 두 응용 프로그램이있다. 지금까지Delphi : PostMessage에서 맞춤 Windows 메시지를받는 방법?

응용 프로그램 1를 호출합니다 응용 프로그램이, 열려있는, 그리고이 때, 응용 프로그램 1이 비활성화로 설정되어 있는지 확인하고.

사용자가 응용 프로그램이 완료되면 내가 다시Applciation 1에 메시지 를 보낼 필요 잠금을 해제하면 잠금 해제됩니다.

내가 사용하여 각 응용 프로그램에서 동일한 Windows 메시지를 등록

:

const 
    MyMessage = 'My-Message'; 

var 
    MyMessageID: cardinal; 

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

그리고 응용 프로그램이 내가 사용하여 응용 프로그램 1에 메시지를 게시 할 수 있습니다

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

이해가 안 무엇 응용 프로그램 1에서 메시지에 대한 처리기를 선언하는 방법입니다.

표준 Windows 메시지 (예 : 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; 
관련 문제