열흘쯤 전에 문의를 받은 건 중에, DBGrid에서 한글 입력에 문제가 있다는 메일이 있었습니다. 그저께 그걸 뒤져봤는데…
결론부터 말하자면, DBGrid의 버그더군요. Delphi/C++Builder 2009의 DBGrid에서 한글로 입력하던 중에 입력중이던 글자가 조합중(compositing)이면, 그때 마우스로 다른 윈도우 컨트롤을 클릭하여 포커스를 옮기면 마지막 조합중이던 글자가 사라집니다. 마지막 한 글자만요.
아무래도 유니코드 적용으로 인한 버그인 것 같은데, 만 하루 정도 VCL 소스들을 뒤져봤습니다만 결국 당장 문제의 원인을 파악하는 데 실패했습니다.
정확한 에러 위치를 모르니, 본사에 리포팅하기도 좀 그러네요. 본사에서는 IME를 사용하는 입력을 테스팅할 환경이나 인력이 안될 것 같아서요. 좀 여유가 있을 때 다시 추적해보고 리포팅하겠습니다.
당장은, 회피 방법(workaround)을 쓰는 수밖에 없을 거 같습니다. 제가 테스트해본 결과로는, 왜인지는 모르겠는데 DBGrid의 Options 속성의 dgTabs 값을 기본값인 True에서 False로 수정하면 이 문제가 발생하지 않습니다.
dgTabs을 true로 설정하면 DBGird 내에서 탭 키로 각 컬럼을 이동할 수 있는데요. 일반 사용자들은 이렇게 탭키를 꼭 쓰려고 하는 경우가 많지 않으므로, 이걸 막아버리면 이 버그를 간단히 넘어갈 수 있습니다.
Delphi 2009에서 TEdit의 OnExit 이벤트에서 Text을 얻어 올때도 같은 문제가 발생하고 있습니다.