2011년 3월 3일 목요일

윈도우 메세지를 받아먹는 3가지 방법

- 보내는 통신규약은 아래와 같다고 가정.
SendMessage(FindWindow(nil, 'frmDebug'), WM_USER+123, 0, lParam(LongInt(메세지)));
혹은 PostMessage
 
 
 
 
 
1. TApplicationEvents 이용.
 
1. 폼에디터에 TApplicationEvents 를 하나 박아넣음.
2. 박아넣은 TApplicationEvents 의 OnMessage 함수를 만든다. 아래와 같은 모양으로.
 
procedureTForm1.ApplicationEvents1Message(varMsg: tagMSG; varHandled: Boolean);
begin
  ifMsg.message=WM_USER+123then begin
    Memo1.Lines.Add(PChar(Msg.lParam));
  end;
end;
3. 특징
  - F1 을 눌러서 헬프를 보면 알 수 있지만, SendMessage 로 보낸 건 못받아먹음. PostMessage 로 해야 함.
 
 
 
 
 
2. 메세지별 이벤트 핸들러 이용.
 
- 각 메세지별 이벤트 핸들러를 만든다. 아래의 모양으로.
 
<선언부>
procedureWM_USER123(varMSG: TMessage); messageWM_USER+123;
 
<구현부>
procedureTForm1.WM_USER123(varMSG: TMessage);
begin
  Memo1.Lines.Add(PChar(MSG.LParam));
end;
 
 
 
 
 
3. TForm 의 WndProc 을 오버라이딩해서 사용하는 방법.
 
- 아래와 같은 모양으로 구성.
 
<선언부>
procedureWndProc(varMessage: TMessage); override;
 
<구현부>
procedureTForm1.WndProc(varMessage: TMessage);
begin
  ifMessage.Msg=WM_USER+123then begin
    Memo1.Lines.Add(PChar(Message.LParam));
  end;
 
  inherited;
end;

댓글 없음:

댓글 쓰기