한가지 편법으로는 DLL을 호출할 때 실행 어플리케이션의
Application 객체와 Screen 객체를 넘겨주는 방법도 있습니다
DLL 에선 자신의 Application, Screen을 잠시 딴데다 넣어두고
어플리케이션에서 넘긴 Application, Screen 객체를 사용하는 것이지요
젤 좋은 방법은 장성호님 말처럼 런타임 패키지를 쓰는 방법이구요
장성호 님이 쓰신 글 :
: RunTime Package를 쓰세요
:
: Dll 및 Exe를 Compile할때 Project-Option 에서 Run-time Package를 쓰도록 설정해서 Compile해보세요
: 그러면 vclxx.bpl , rtlxx.bpl 등을 exe와 함께 따로 배포해 줘야 하지만
: 위와같은 문제는 해결될 것입니다.
:
: 기억이 가물가물 한데...
: CM_MOUSEENTER , CM_MOUSELEAVE는 대게
: Application이 Idle상태일때 (메세지큐에 처리할 메세지가 없을때)
: Mouse아래의 Control이 변화하는지 체크해서 인위적으로 CM_MOUSEENTER , CM_MOUSELEAVE 메세지를 던져줍니다.(항상그런것은 아님,vcl 버젼에 따라 틀리기도 하고)
:
: runtime-package를 쓰지 않고
: dll에서 만들어진 Form은
: exe에 있는 Global객체인 Application과 Screen객체에서 정확히 판단을 할수가 없습니다.
: (TForm은 생성될때 Screen.Forms에 자신을 등록하고 , free될때 Screen.Forms에서 remove함)
:
: ....
:
:
: 그럼....
:
:
:
: 레드수샤 님이 쓰신 글 :
: : 안녕하세요.
: :
: : 초초초보입니다;;;
: :
: : 아래와 같은 문제로 1주일째 뜬눈으로 밤을 지새웁니다 ㅠ_ㅠ
: :
: : -------------
: : DLL에 포함된 Form을 생성하고 화면에 출력하면,
: :
: : 그 화면에 포함된 Edit 에서 CM_MOUSELEAVE, CM_MOUSEENTER 등이 발생하지 않습니다.
: :
: : 물론 같은 Edit 를 별도의 application에 넣고 실행하면, CM_MOUSELEAVE, CM_MOUSEENTER 이 잘 발생합니다.
: : -------------
: :
: : 이거 어떻게 해야하나요? ㅠ_ㅠ
|