SetPosBySet 메서드가 ctrl + F로 찾아도 안나오는데,
해당 내용 확인부탁드립니다.
1개의 좋아요
안녕하세요.
API 문서에 해당 메소드가 누락됨을 확인했습니다.
메소드에 대한 설명은 아래와 같습니다.
1. SetPosBySet
- Description
캐럿을 문서 내 ParameterSet으로 지정한 위치로 옮깁니다.
- Declaration
BOOL SetPosBySet(LPDISPATCH pos)
- Parameters
pos : 캐럿을 옮길 위치에 대한 ParameterSet 정보
* ParameterSet/ListParaPos 참고
return : 성공하면 true, 실패하면 false
- See Also
GetPos, SetPos, GetPosBySet
2. GetPosBySet
- Description
현재 캐럿의 위치 정보를 ParameterSet으로 얻어옵니다.
- Declaration
LPDISPATCH GetPosBySet()
- Parameters
return : 캐럿 위치에 대한 ParameterSet
* ParameterSet/ListParaPos 참고
- See Also
GetPos, SetPos, SetPosBySet
1개의 좋아요
(C++)
// 본문 2번째 문단 앞으로 이동시키는 예제
CDHwpParameterSet posSet = m_app.CreateSet(_T("ListParaPos"));
posSet.SetItem(_T("List"), COleVariant((long)0));
posSet.SetItem(_T("Para"), COleVariant((long)1));
posSet.SetItem(_T("Pos"), COleVariant((long)0));
m_app.SetPosBySet(posSet);
// 현재 위치를 받아오는 예제
CDHwpParameterSet posSet = m_app.GetPosBySet();
long list = posSet.Item(_T("List")).intVal
long para = posSet.Item(_T("Para").intVal
long pos = posSet.Item(_T("Pos")).intVal
1개의 좋아요
(TMI인가 싶지만, 예전 개발가이드 문서를 참고하면요…)
SetPosBySet은
GetPos와 SetPos 메서드가 파라미터로 포인터를 사용하기 때문에,
포인터를 사용할 수 없는 언어에서는 사용 불가능하도록 만들어져 있었습니다.
그래서 포인터를 사용하지 않는 언어를 지원하기 위해서
포인터 대신 파라미터셋 자체를 사용할 수 있는
GetPosBySet이라는 메서드가 만들어지고
그에 따른 SetPosBySet이라는 메서드도 만들어진 듯 합니다.
그런데 파이썬에서는 win32com으로 한/글을 제어할 때
GetPos는 튜플을 리턴하고, SetPos도 정수 세 개를 매개변수로 사용할 수 있으므로
(어렵게 ListParaPos 파라미터셋을 사용해야 하는) SetPosBySet을 굳이 쓸 이유가 없어 보입니다.
참고로 GetPosBySet과, SetPosBySet을 사용하는 파이썬 코드를 보여드리면,
# 현재 커서 위치 저장
cur_pos = hwp.GetPosBySet()
# .Item으로 조회 가능
(cur_pos.Item("List"),
cur_pos.Item("Para"),
cur_pos.Item("Pos"))
# 저장해 둔 위치로 돌아갈 수 있음
hwp.SetPosBySet(cur_pos)
# 직접 아이템을 지정해서 이동 가능
pset = hwp.CreateSet("ListParaPos")
pset.SetItem("List", 3)
pset.SetItem("Para", 0)
pset.SetItem("Pos", -1) # 문단 끝으로
hwp.SetPosBySet(pset)
이런 식입니다.
…상당히 번거로운데요ㅜ
아래처럼 GetPos와 SetPos를 쓰면 훨씬 간결해집니다.
# 현재 커서 위치 저장
cur_pos = hwp.GetPos()
# 튜플을 리턴함
print(cur_pos)
# 저장해 둔 위치로 돌아갈 수 있음
hwp.SetPos(*cur_pos) # `*`는 튜플 언패킹 문법
# 직접 List,Para,pos 입력(pos는 소문자임..)
hwp.SetPos(3, 0, 1)
동작은 동일합니다.
1개의 좋아요