안녕하세요.
한글컨트롤을 이용해서
HWP의 메모 보이기/숨기기 여부를 확인할 수 있는 방법이 있는지요?
찾아보니
HwpCtrl.Run(“ViewOptionMemo”);
를 이용하여 메모를 보이기 또는 숨기기를 할 수 있는 방법만 제공하고 현재 메모가 보이기 상태인지? 숨기기 상태인지? 알 수 있는 방법은 찾지 못하여 문의드립니다.
안녕하세요.
한글컨트롤에만 제공하는 API 중에 GetActionCmdUIStatus 가 있습니다.
(한글 오토메이션에서는 제공하지 않음)
액션의 UI 업데이트 상태를 가져오는 함수인데요. checked 상태값을 통해 메모 보기 상태값을 가져올 수 있을 것 같습니다.
(C#)
int checked = 0;
int enabled = 0;
int radio = 0;
string text;
GetActionCmdUIStatue("ViewOptionMemo", true, ref enabled, ref checked, ref radio, text);
감사합니다.
먼저 답변 감사드립니다.
답변주신대로 해보았는데 checked 값은 항상 1로 출력됩니다.
메모 보이기 또는 숨기기를 해도 항상 아래와같은 값을 출력합니다.
checked = 1, enabled =1, radio = 0, text = 메모 보이기/숨기기(&M)
제가 직접 코드를 작성해서 확인해 봤는데 정상 동작했습니다.
(C++)
long bEnabled = 0;
long bChecked = 0;
long radio = 0;
CComBSTR text;
CString szMessage;
m_ocxHwpCtrl.GetActionCmdUIStatus(_T("ViewOptionMemo"), 1, &bEnabled, &bChecked, &radio, &text);
szMessage.Format(_T("메모 보이기 상태 : %s"), bChecked ? _T("보이기") : _T("숨기기"));
AfxMessageBox(szMessage);
작성하신 코드를 공유해주시면 확인해보겠습니다.
감사합니다.
답변감사드립니다.
저는 개발환경이 델파이7 입니다.
한글Neo 9.6.1.10312 사용중입니다.
procedure Buttion1Click(Sender: TObjet);
var
ls_hwpfile : string;
enabled : integer;
checked : integer;
radio : integer;
text : WideString;
begin
enabled := 0;
checked := 0;
radio := 0;
text := ‘’;
ls_hwpfile := ‘C:\1.hwp’;
HWPControl.Open(ls_hwpfile,olevariant(‘’),olevariant(‘forceopen:true’));
HWPControl.GetActionCmdUIStatus(‘ViewOptionMemo’, 1, enabled, checked, radio, text);
shwmessage('enabled : ’ + inttostr(enabled) + ’ checked : ’ + inttostr(checked) + ’ radio : ’ + inttostr(radio) + ’ text : ’ + text);
HWPControl.Clear(1);
end;
-
테스트는 1.hwp 파일을 열어서 메모 숨기기 후 1.hwp를 종료한 후 진행하였습니다.
-
메시지는 메모 보이기, 메모 숨기기 모두 아래와 같이 출력됩니다.
enabled :1 checked : 1 radio :0 text : 메모 보이기/숨기기(&M) -
모두 수기로 작성한 내용이라 오타가 있을 수 있지만 실제 코드는 정상작동하니 오타는 신경안쓰셔도 될것같습니다.
안녕하세요 ^^
GetActionCmdUIStatus의 인자값인 enabled, checked, radio, text 의 경우는 포인터를 한글로 직접 절다해 값을 얻어오는 API 입니다.
델파이에서 포인터를 이용하는 방법을 잠깐 검색해보니 변수명 앞에 ^를 쓰면 되는것 같습니다.
HWPControl.GetActionCmdUIStatus(‘ViewOptionMemo’, 1, ^enabled, ^checked, ^radio, ^text);
만약에 포인터를 사용이 가능하다면 위와 같이 해결할수 있지 않을까 생각이 듭니다.
해당 내용이 도움이 되셨으면 좋겠습니다. 감사합니다 ^^
[HWPCONTROLLib_TLB.pas 에서 해당 함수 내용]
function THwpCtrl.GetActionCmdUIStatus(const actid: WideString; bWithKey: integer; var bEnabled: Integer; var bChecked: Integer; var bRadio: Integer; var szText: WideString): WordBool;
begin
Result := DefaultInterface.GetActionCmdUIStatus(actid, bWithKey, bEnabled, bChecked, bRadio, szText);
end;
위의 내용을 보시면
GetActionCmdUIStatus 함수는 Call by Reference(참조 전달) 방식으로 매개변수를 전달하고 있습니다.
- 관련내용 링크(Call by Reference(참조 전달방식) 참고) : DELPHI 함수 프로시저에서 매개변수 전달방식
참고로 위에서 알려주신 포인터를 사용하는 방식으로 해보았으나 GetActionCmdUIStatus 사용 부분에서 오류가 발생하고 진행이 되지 않았습니다.
테스트하고 계신 문서(1.hwp) 외에 다른 문서로 확인해보셨는지요?
메모 상태가 문서 파일에 영향을 받는 요소가 보여서 확인차 테스트해보셨으면 좋을 것 같습니다.
먼저 계속되는 문의에도 답변을 해주셔서 감사드립니다.
-
말씀하신대로 다른 문서로도 해보았으나 동일한 값이 출력됩니다.
(checked = 1, enabled =1, radio = 0, text = 메모 보이기/숨기기(&M)) -
한글에서 문서를 새로 만들어서 내용도 간단하게만 작성한 후 메모만 추가하여 테스트 해보았고, 메모를 추가하지않고도 해보았고, 기존에 사용중인 문서로도 테스트 해보았지만 동일한 결과입니다.