델파이 Seattle에서 TComport 를 통해 시리얼단말기(신용카드 단말기) 인쇄시 한글이 깨진다.
ComPort1.WriteStr('abcd 1234테스트 페이지 ***********'+ #13#10);
기존에 델파이 2007에서 잘되던 부분이다.
TStringStream, TBytes 등으로 해결했다는내용도 검색되었지만 내 경우에는 실패했다.
결국 CPort.pas 파일의 String 타입을 AnsiString 타입으로 수정해서 해결했다.
문자열을 인쇄하는 ComPort1.WriteStr() 함수와 WriteStrAsync 함수를 수정했다.
(첫번째)
function TCustomComPort.WriteStr(Str: string): Integer;
->
function TCustomComPort.WriteStr(Str: Ansistring): Integer;
(두번째)
function TCustomComPort.WriteStrAsync(var Str: string; var AsyncPtr: PAsync): Integer;
->
function TCustomComPort.WriteStrAsync(var Str: Ansistring; var AsyncPtr: PAsync): Integer;
선언 부분도 같이 바꾸었다.
CPort.pas 파일만 변경하고 기존 응용프로그램 소스는 수정하지 않아도 잘 인쇄된다.
첨부파일 참고하면 된다.
종합해 보면 유니코드 체계인 델파이 2009 이후 버전에서는 WriteStr 함수의 파라미터 Str 이 String 으로 선언되어 있으므로 UnicodeString 으로 해석된다.
CPort.pas 파일을 수정하지 않고 응용프로그램 개발 소스 단에서 AnsiString 변환해도 소용 없었던 것이다.
유니코드가 대세라고 하지만 아직도 많은 장치들과 그것을 연결하는 DLL라이브러리 등은 Ansi 체계라 당분간 혼선은 계속 될 것 같다.
'델파이' 카테고리의 다른 글
TDBCtrlGrid 마우스휠 이벤트 구현, TMessage 타입 변경이 원인 (0) | 2016.03.17 |
---|---|
Copy, Length AnsiString UnicodeString 차이, IsCharAlphaA 알파벳 문자확인 (0) | 2016.03.12 |
한영모드 알아내기 윈도우7 64비트에서 (0) | 2016.03.11 |
MDIChild 폼을 Modal폼으로 생성하기, 사용자정의 생성자(constructor) (0) | 2015.12.31 |
델파이 10 Seattle 설치후 콤포넌트 라이브러리 설치( ComPort, NumEdit) (0) | 2015.10.31 |