Delphi Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
델파이 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
FreePascal/Lazarus
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
델마당
볼랜드포럼 광고 모집

델파이 팁&트릭
Delphi Programming Tip&Tricks
[168] 팁! 메시지로 한글 한글자 보내기
박지훈.임프 [cbuilder] 14337 읽음    1999-06-04 00:00
임펠리테리입니다.
오늘의 팁은.. 한글 한글자를 메시지로 보내기입니다.

물론, 기존에 쓰던 WM_CHAR 메시지를 보내어도 한글은 잘 보내집니다. 화면에도 잘
나오구요. 하지만, 만약 메모컴퍼넌트에 한글 글자 '한'자를 보냈다면,
이 글자는 잘 전달이 안될 수도 있고, 전달되어도
영문 두글자로 인식되어 '한'자의 중간에 커서가 들어갑니다. 커서가 들어갈 뿐
아니라 여기서 엔터를 치면 글자가 깨져버립니다! 이럼 안되겠지요?

이럴때는 WM_CHAR가 아닌 이 메시지의 2바이트문자 버전인 WM_IME_CHAR를 써야
합니다. 이 WM_IME_CHAR 메시지는 한글 한글자를 2바이트씩 보내기때문에 WM_CHAR처럼
한 바이트를 그냥 WPARAM에 넣으면 되는것이 아니라 한글 한글자에 해당하는
2바이트를 한꺼번에 넘겨줘야 합니다. WPARAM이 unsigned int형이니 당연히 2바이트를
한방에 보낼 수 있겠죠? 물론 시프트연산을 해서 두 바이트를 붙여줘야 합니다.
예를 봅시다.

// C++ 코드
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  AnsiString pString = "한";
  SendMessage(Memo1->Handle, WM_IME_CHAR, (unsigned char)pString[1]<<8 | (unsigned char)pString[2], 1);
}


// 델파이 코드
procedure TForm1.Button1Click(Sender: TObject);
var
  pString: string;
begin
  pString := '한';
  SendMessage(Memo1.Handle, WM_IME_CHAR, Ord(pString[1]) shl 8 or Ord(pString[2]), 1);
end;


이건 실제로 제 프로젝트에 써먹은 소스의 일부분입니다. 이렇게 2바이트씩 메시지로 보내는 거죠.

그럼, 도움되시길 바라면서, 이만..


독립문에서 임펠리테리였습니다.

+ -

관련 글 리스트
168 팁! 메시지로 한글 한글자 보내기 박지훈.임프 14337 1999/06/04
(링크)     C++Builder Tip'N Tricks > 팁! 메시지로 한글 한글자 보내기
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.