본문 바로가기
프로그래밍/delphi

DELPHI DLL을 Panel안에 집어넣기 2

by 메르세데쓰 2016. 1. 15.
반응형


안녕하세요 메르세데스입니다.  이번시간에는 DELPHI로 만든 DLL폼을  Panel안에 집어넣는 방법입니다.


예전에도 비슷한 내용으로 포스팅을 했었는데.. 좀더 정리를 하여 쉽게 적용해보겠습니다.


이렇게 하려고 하는 이유는  재사용성을 극대화 시키기 위해서입니다.


이렇게 재사용성을 극대화 시키기위해서는 여러가지 방법이 있긴 하지만..   프레임과같이 pas파일을 공유해서 처리할 수도있죠 하지만 변경작업시 소스를 업데이트를 해야하기 때문에 번거롭습니다. 저만 번거롭다면 다행이지만  다른 직원들에게도 소스수정의 여파가 미친다면 쉽지 않을것입니다.


그렇다보니 dll폼을 만드는것으로 자연스레 손이갑니다.


지난번 소개드린 방법을 좀 더 다듬어서 소개드립니다.  소스가 짧아졌습니다.



1.DLL쪽 소스입니다.


중요한 부분은.. Create문입니다. 


물론.. 저 처럼 하지 않고.. 일반적으로..  


dllform := TMODCALFS1.Create(nil);

...

Windows.SetParent(dllform.Handle, ParentForm);  


이런방법으로 처리할 수 있으나..  미세한 차이가 있습니다.   



패널안에 DLL폼 넣기 - DLL소스



이런방식의 경우 프로그램이 호출되어 패널안에 들어가게되면.. 포커스가 넘어가는 문제가 생깁니다. 


마우스로 조작하는 프로그램이라면 크게 신경쓰이진 않겠지만..  키보드방향키로 리스트를 왔다갔다 해야한다면 호출시 포커스를 잃어버리기 때문에 마우스 클릭이 필요하겠습니다. 싫어하는 사람들이 있겠죠..  애초에 생성시부터 이런식으로 Create를 하면 Focus를 잃어버릴 이유가없습니다.


dllform := TMODCALFS1.CreateParented(parentHandle);    



2. 호출프로그램 소스입니다.


dll폼이 적용될 패널의 HANDLE 값과.. 조잡한 프로그램처리를 위해 parameter몇개를 받아가는 것을 추가했습니다.


Object형으로도 매개변수를 전달하면.. 보다 유연한 프로그램처리가 가능합니다. 


전엔 이런걸 잘 몰라서 문자열 아니면 정수 배열정도만을 사용했었는데..그러고도 개발자라니 자기자신을 자책해 봅니다 ㅜㅜ


패널안에 DLL폼 넣기 - 호출부분



네.. 이게 끝입니다.   아주 안정적으로 잘 작동하네요..   혹시 고민하시는 분 계시다면 도움이 되셨으면 좋겠네요 감사합니다.



반응형

댓글