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

델파이 dll 모달폼을 일반 폼으로 변경하기 위한 팁..

by 메르세데쓰 2015. 5. 29.
반응형

  안녕하세요 메르세데스입니다. 이번시간에는.. 델파이의 DLL-modal폼으로 만들어진 프로그램을 창모드로 띄우는 방법에 대해 알아보려고 합니다.


 상황에 따라 다르긴 하지만..  저희 사이트에서 주로 이용하고 있는 DLL폼을 띄우는 방법들 중 하나는 ModalForm으로 띄우는 것입니다. 기본이 거의 이렇게 되어서 시작된 프로그램들이 많다보니..  이 방식에서 크게 벗어나지 않는 수준에서 유지보수를 하며 개발이 되고 있는데요..


모달폼(Modal)같은경우 불편한 것이 하나가 있는데 해당 폼이 떠있을 경우 다른곳에 포커스 이동이 안 되기 때문에 다른작업을 위해서는 열려있는 창을 닫아야만 실행이 됩니다.


이런 특징을 잘 이용한다면.. 경고창이나 필수입력을 받아야할 경우 구현하면 좋겠죠..?  


그런데 문제는 이런 기반으로 프로그램이 개발 되다보니.. 이미 이렇게 구현 되어있는 것을 용도에 맞게 변경하는게 쉽지 않은 일이 되었다는 거죠..  인터넷익스플로러와같은 창모드로 변경하려고 해보니 생각보다 많은곳에서 예상치 못한 난관에 부딪히게 됩니다.


제가 알고있는 지식을 좀 업그레이드 하지 않는 이상에야.. 쉽게 해결될 문제가  아닌 것 같아서 생각을 조금 바꿔봤습니다.


어차피 dll프로그램은.. 실행파일에서 호출해서 사용하는 것이기 때문에..  이런 프로그램을 호출하는 일종의 브릿지같은 exe프로그램 호출할 때마다 복수로 띄운다면..만들면되지 않을까..?  이죠..


다만.. 폼을 안보이게 가리고 원하는 모듈만 실행하게 하면 Modal이는 일반폼이든.. 기존의 소스를 거의 수정하지 않고 호출하는 쪽만 조금 손보면 될 것 같았거든요..



델파이 dll폼 호출용 브릿지프로그램


그래서 브릿지 프로그램에..  FormCreate문 내의 초반부분에   파라메터로 입력받아온 정보의 조건에 따라 제 나름대로?  버튼을 만들어서.. 이 조건으로오면..  A라는 프로그램을 띄우고..   B라는 조건일때는 다른것을 띄우는 식으로  만들어봤습니다.

*버튼안에 호출하는 구문을 집어넣으시면 되겠습니다.


그리고.. 프로그램을 호출하는 쪽의 버튼에는 아래처럼.. 기존에 DLL을 Call을 하는 모듈을 걷어내고 대신.. 브릿지용  exe프로그램을 호출하는 ShellExcute를 이용하여 처리하고, 파라메터정보를 넘겨서 구분과... 필요한 정보를 넘겨주시면 되겠습니다.


use절에 ShellAPI를 넣어주셔야  ShellExcute문을 사용할 수 있겠죠? 


델파이 dll폼 호출


그리고.. 조건문을 좀 걸어서.. 중복실행을 하면..  먼저 띄워놓은 폼을 닫고 다시 띄우도록  SendMessage를 걸었습니다.


뭐.. 100점짜리 답안은 아니지만.. 기존의 소스를 수정할 필요없이 호출하는 방법을 수정하는 방식으로 처리하기 때문에 시간적으로나.. 오류에 대한 염려가 크게 줄게 되었습니다.


기술적인 해결방법이 아닌.. 조금 멀지만 생각을 조금 바꾼.. 팁이라고 해야겠네요...






반응형

댓글