Delphi/C++Builder 2007에 번들된 RaveReports 7.5에는, Memo에 한글을 출력할 때 한글이 깨지는 버그가 있습니다. Memo에 긴 한글 문자열이 들어갈 때 자동으로 여러 줄로 나누게 되는데요. 이때 2바이트인 한글을 인식하지 못하고 그냥 바이트 단위로 잘라서 한글 한 글자가 각각의 글자로 강제로 쪼개져서 생기는 문제입니다.
이것은 명백한 Rave의 버그인데, 유니코드가 적용된 Delphi/C++Builder 2009, 2010 버전에서는 발생하지 않습니다. 왜냐하면 유니코드 환경에서는 따로 한글을 처리하지 않아도 한글이 바이트 단위가 아닌 한글 그대로의 글자 단위로 처리되기 때문에 중간에서 잘리는 일이 없기 때문입니다.
사실 RaveReports는 엄밀히 말해 단순 번들 제품일 뿐 Delphi, C++Builder의 일부가 아니기 때문에 Rave의 벤더인 Nevrona에서 해결해야 할 문제입니다. (Rave 이외에 TChart, InstallAware 등의 다른 번들 제품도 해당 벤더에서 버그 패치를 내놓습니다) 그런데 최근 Nevrona가 제대로 돌아가지 않는 것으로 보여 문제 해결이 어렵고요. 또 더욱이 2007 버전 자체가 연장 지원까지 지원이 모두 끝난 상태이기 때문에, 어떻게든 공식적인 버그 패치가 나올 수 없는 상태입니다.
이 문제에 대한 근본적인 해결 방법은, 유니코드가 적용되는 2009, 2010 버전으로 업그레이드하는 것입니다. 유니코드가 적용된 상태에서는 기본적으로 서드파티 컴포넌트라고 하더라도 한글 입출력에서 문제가 생길 수가 없습니다. 따라서 잘 알지 못하는 서드파티 컴포넌트를 쓰더라도 적어도 한글 문제는 생기지 않을 거라고 기대할 수 있습니다.
하지만 이 문제는 Delphi/C++Builder 2007 버전을 사용중인 국내 사용자에게는 당장 아주 심각할 수 있기 때문에… 비공식적이지만 제가 해당 버그 루틴을 가진 유닛을 수정해봤습니다. 근데.. 일단 공개하기는 합니다만, 저도 바쁜 일정 중이라 대충 작업한 거고… 또 2007 Rave의 다른 부분에서도 비슷한 한글 문제가 있을 가능성도 있습니다.
아래 압축 파일을 다운받은 후, 압축 파일에 포함된 RpMemo.dcu와 RpMemo.obj 파일을 Delphi/C++Builder 2007 설치 디렉토리 아래의 \RaveReports\Lib 디렉토리에 복사해넣으면 됩니다.
Rave2007_patch_RpMemo.zip
다만, 보다시피 이 패치는 런타임 패키지인 Rave75VCL.bpl을 다 컴파일한 것이 아니라 해당 유닛 하나만 컴파일한 것이므로, Rave75VCL.bpl을 런타임 패키지로 이용하도록 빌드하면 한글 문제가 그대로 나타납니다. 따라서, 혹시 다른 런타임 bpl 들은 따로 배포하더라도 RaveReport 부분은 꼭 정적으로 링크해야 합니다.
아마도, 이 한글 버그는 Rave가 처음 탑재된 Delphi 7이후로 2005, 2006 버전에도 동일하게 발생할 것입니다. 하지만 환경적인 이유로 2007보다 이전 버전들에 대한 패치 제공은 어려울 것 같습니다.