Message를 C++모듈에서 보냈을때,
델파이에서 메세지를 받아야 하는데요...
문제는 그 Message가 한꺼번에 주루룩 올수도 있고, 띄엄띄엄 하나씩 올수도 있거든요.
참고로 전 Message를 주고 받는건 처음 쓰거든요.
Message를 받을때 받는 이벤트는 어떻게 구현이 되고,
(Timer를 돌려서 읽는 방법은 영 아닌것 같아서요...)
Message를 받아서 처리중일때 오는 Message는 어떻게 되나요?
Que에 쌓여서 나중에 차례로 받아지는지 아니면 날라가 버리는지...
도움 부탁 드립니다...
> Message를 C++모듈에서 보냈을때,
> 델파이에서 메세지를 받아야 하는데요...
> 문제는 그 Message가 한꺼번에 주루룩 올수도 있고, 띄엄띄엄 하나씩 올수도 있거든요.
> 참고로 전 Message를 주고 받는건 처음 쓰거든요.
> Message를 받을때 받는 이벤트는 어떻게 구현이 되고,
> (Timer를 돌려서 읽는 방법은 영 아닌것 같아서요...)
> Message를 받아서 처리중일때 오는 Message는 어떻게 되나요?
> Que에 쌓여서 나중에 차례로 받아지는지 아니면 날라가 버리는지...
> 도움 부탁 드립니다...
안녕하세요?
일단 메세지의 전송방식은 FIFO(First In First Out)을 기본으로 합니다.
하지만 메세지에서 아주 중요한것과는 우선순위라고 할까요.. 그런 세부사항이 있긴하지만요.
그건 일단 무시하시더래도 메세지를 받으실때는 해당 프로그램에서 사용자정의한 메세지이든 아니면 폼같은데서 받지 못하는 이벤트라면 헤더에서 특정 이벤트 발생시에 실행할 수 있는 모듈을 정의해서 사용하시면 됩니다.
음... 그리고.. 메세지는 다른 곳에서 보냈는데 해당 프로그램에서 응답이 없거나 별도의 처리를 하지 않으면 자동으로 없어집니다. 즉 메세지를 보내면 시스템 커널에서 메세지큐에 임시로 저장해 놓고 해당 어플리케이션으로 보내고자 하는 메세지가 있다는 신호가 가지요. C 쪽에서 보면 메세지 루프라고 하나요..? 암튼 처음 메인이 시작하면 프로그램에서 종료신호가 올 때까지 메세지만 처리하게끔해서 무한 루프를 돌자나요..
하지만 델파이는 그런 모듈 자체가 델파이안에서 감싸고 있기때문에 알기가 쉽지 않지요.
만약에 위에서 말한 특정 메세지일경우에는 어떤 루틴으로 가라는 모듈이 쉽지 않으면 application.onmessage := 이벤트핸들러;
라고 정의 하신후 이벤트 핸들러 안에서 원하는 특정이벤트인지 체크하셔도 무방할것 같습니다.
예를 들면 아래와 같은 코드가 나올수 있겠지요.
첫번째 방안으로
procedure WMLButtonDown(var Message: TWMLButtonDown); message WM_LBUTTONDOWN;
라고 헤더에 정의하시면 마우스 왼쪽버튼이 눌렸다는 이벤트 발생시 위의 프로시져로 들어가게 됩니다. 물론 프로시져 정의시에는 뒤쪽의 message 이하부분은 없애주시고요.
두번째 방법으론
oncreate 이벤트에서
application.OnMessage := message_process;
라고 이렇게 정의하신후에(물론 message_process 루틴은 헤더에서 메세지 타입으로 맞춰야죠... ^^) 사용하시면 모든 메세지를 다 받으실수 있을겁니다.
제대로 답변이 됐는지 모르겠네요.
델파이 안한지가 쫌 되서리... 쩌비.. ^^;
암튼 즐코하세요.