찾아바꾸기 파라미터 초기화가 안됩니다.

찾아바꾸기를 여러차례 걸처서 진행하는데 파라미터값의 초기화가 이루어지지 않습니다.

무엇이 문제인지 정확하게는 모르겠습니다만, 상태값을 초기화가 안되서 폰트 모양을 바꾼 뒤 값을 바꿀 때 포트 모양이 안맞아서 안바뀌게 된다거나, 문단모양 때문에 안되거나 하는 등의 문제가 발생합니다.

한컴에서 찾아바꾸기를 보면 글자모양, 문단모양 등의 옵션을 끌 수 있게 되어 있는데
파라미터 값을 초기화 하는 방법이 있을까요?

2개의 좋아요

사용하신 코드를 보여주시면 오류를 해결해 드리기 수월할 것 같습니다.
기본적인 프로세스는, GetDefault 명령어로 모든 파라미터셋 아이템을 초기화하고, 필요에 따라 특정 아이템만 변경한 후, Execute를 실행해서 반영하는 구조입니다.

1개의 좋아요

테스트 코드를 아래와 같이 달아봅니다.

## 빈칸 표시하기
action = hwp.CreateAction("AllReplace")
pset = hwp.HParameterSet.HFindReplace
hwp.HAction.GetDefault("AllReplace", pset.HSet)
pset.FindString = " "
pset.ReplaceCharShape.ShadeColor = hwp.RGBColor(123, 255, 123)
action.Execute(pset.HSet)

## 빈칸 원복하기
action = hwp.CreateAction("AllReplace")
pset = hwp.HParameterSet.HFindReplace
hwp.HAction.GetDefault("AllReplace", pset.HSet)
pset.FindCharShape.ShadeColor = hwp.RGBColor(123, 255, 123)
pset.FindString = " "
pset.ReplaceCharShape.ShadeColor = 2**32 - 1
action.Execute(pset.HSet)

## 다시 빈칸표시하기

action = hwp.CreateAction("AllReplace")
pset = hwp.HParameterSet.HFindReplace
hwp.HAction.GetDefault("AllReplace", pset.HSet)
pset.FindString = " "
pset.ReplaceCharShape.ShadeColor = hwp.RGBColor(123, 255, 123)
action.Execute(pset.HSet)

위에서 처음 시작하고 빈칸에 색을 넣는 걸 실행하고나서, 다시 원복시키는 코드를 돌렸습니다.
그리고 다시 빈칸에 색을 넣으려고 하면 공백을 찾을 수 없게 됩니다.

2개의 좋아요

아래와 같이 실행해 보시기 바랍니다.

# 음영 추가시
action = hwp.CreateAction("AllReplace")
pset = hwp.HParameterSet.HFindReplace
hwp.HAction.GetDefault("AllReplace", pset.HSet)
pset.FindString = " "
pset.FindCharShape.ShadeColor = 4294967295  # <-----------------
pset.ReplaceCharShape.ShadeColor = hwp.RGBColor(123, 255, 123)
pset.IgnoreMessage = True
action.Execute(pset.HSet)
# 음영 제거시
action = hwp.CreateAction("AllReplace")
pset = hwp.HParameterSet.HFindReplace
hwp.HAction.GetDefault("AllReplace", pset.HSet)
pset.FindString = " "
pset.FindCharShape.ShadeColor = hwp.RGBColor(123, 255, 123)
pset.ReplaceCharShape.ShadeColor = 4294967295
pset.IgnoreMessage = True
action.Execute(pset.HSet)

제 PC에서 테스트 화면은 아래와 같습니다.

녹화_2024_01_03_19_24_46_146

문제의 원인은, "빈칸 원복하기"를 실행하신 시점에, FindCharShape.ShadeColor가 지정되었는데,
다음번 찾아바꾸기 실행시에도 해당 옵션(찾을 글자 모양)이 자동으로 활성화되기 때문입니다.

그래서 "다시 빈칸표시하기"를 실행하실 때 FindCharShape.ShadeColor = 4294967295를 필수로 지정해주셔야 합니다.

잘 해결되었기를 바랍니다.
행복한 하루 되세요^^

=========
이 문제와는 별개로^^;
아래 코드처럼 action을 정의하지 않고 실행하셔도 무방합니다.
참고해 주시기 바랍니다ㅎ

pset = hwp.HParameterSet.HFindReplace
hwp.HAction.GetDefault("AllReplace", pset.HSet)
pset.FindString = " "
pset.ReplaceString = "_"
pset.IgnoreMessage = 1
hwp.HAction.Execute("AllReplace", pset.HSet)
1개의 좋아요

다시 리셋시키는 방법은 없는 걸까요?

글자모양을 다른 걸 지정하거나 하면 다 원복을 시켜야 하는 건가 싶어서요.
이게 글자모양 설정이 켜져서 이런 것 같은데 어떻게 하면 끌 수 있을까요?

2개의 좋아요

따로 리셋하는 명령어가 있는 건 아니지만,
GetDefault 라인을 빼고 실행하시면
pset이 현재값이 아닌 초기값 상태가 되어 있습니다.
(나름의 리셋이라고 볼 수도 있겠네요^^;)

근데 개인적으로는 조금 코드가 길더라도
GetDefault를 쓰시는 방법을 추천하고 싶네요…

# 음영넣기
action = hwp.CreateAction("AllReplace")
pset = hwp.HParameterSet.HFindReplace
pset.FindString = " "
pset.ReplaceCharShape.ShadeColor = hwp.RGBColor(123, 255, 123)
pset.IgnoreMessage = True
action.Execute(pset.HSet)
# 음영빼기
action = hwp.CreateAction("AllReplace")
pset = hwp.HParameterSet.HFindReplace
hwp.HAction.GetDefault("AllReplace", pset.HSet)
pset.FindString = " "
pset.FindCharShape.ShadeColor = hwp.RGBColor(123, 255, 123)
pset.ReplaceCharShape.ShadeColor = 4294967295
pset.IgnoreMessage = True
action.Execute(pset.HSet)

녹화_2024_01_05_01_29_01_59

1개의 좋아요