폼내에서 편집

VBA 폼내에서 한글 파일 띄우고
필드삽입하고 편집하고 그랬는데요

이제 HWPCTRL.OCX 도 지원이 종료되고

파이썬으로 갈아타서 새로 만들려니 어렵네요

Pyqt5나 다른 gui툴로
폼 만들고 따로 한글을 실행해서 편집하는거 말고

폼내부에서 실행해서 편집하고 싶은데 방법이 있을까요?..

1개의 좋아요

안녕하세요.

한글 오토메이션은 HwpCtrl.ocx와 실행 방식의 차이가 있어서 동일한 형식으로 구현하기는 어렵습니다.
아시겠지만 HwpCtrl.ocx은 dll의 형식이라서 다른 응용프로그램에 임베딩되어 실행이 가능했습니다.

반면에 한글오토메이션은 Hwp.exe를 Out of Process COM 방식으로 운영하기 때문에
다른 응용프로그램에 임베딩하는 형식으로 개발은 어렵습니다. :sob: :sweat_smile:
(* 사용 용도가 다름)

그래도 Win32 API를 이용하면 HwpCtrl과 같은 형식을 흉내는 내볼 수 있습니다.
(python의 UI 개발 방식에 대한 이해는 깊지 못해 MFC C++ 방식으로 설명 드립니다.)

한글 오토메이션 API에는 아래 4개의 API가 있습니다.
주어진 인자의 윈도우 핸들을 Parent 설정, 위치/크기 설정

  • 4개의 API는 한글 2018 최신 버전 이상에서만 사용 가능
  • CXHwpWindow::put_Parent, put_Left, put_Top, put_Width, put_Height

그래서 아래와 같이 코드를 작성하면

CHwpObject m_app;
...

// 임베딩하고자 하는 윈도우의 크기를 구함
RECT rcClient = {0, };
GetClientRect(&rcClient);
...

CXHwpWindows wins = m_app.get_XHwpWindows();
CXHwpWindow win = m_app.get_Active_XHwpWindow();

// m_hWnd = 임베딩하려는 윈도우의 핸들
win.put_Parent((long)m_hWnd);
win.put_Height(rcClient.bottom - rcClient.top);
win.put_Width(rcClient.right - rcClient.left);
win.put_Visible(TRUE);

최초 실행할 때는 임베딩이 되더라도 한글 기능을 제한할 수 없기 때문에
새 문서를 열거나 하면 임베딩에서 벗어날 수 있어서 100% 원하는 형식으로 구현하기는 어려울 것 같네요. :disappointed_relieved:

감사합니다.

2개의 좋아요