안녕하세요...
저는 다국어 관련 프로젝트를 하고 있습니다. ^^ 기회가 되면 강좌도 한번 쓰고 싶은데 아직 아는 것이 별로 없어서요...
현재 컴포넌트를 수정하고 있는데 문제가 있어서 질문을 합니다...
문제는 TrayIcon 에 나오는 힌트를 다국어 지원하게 해야 되는데 일단 힌트를 다국어 지원 하게 하려면 힌트에 나오는 문자열을 WideString을 바꾸고 힌트 Text가 화면에 Draw 될때 일반 AnsiString 이 아니라 WideString으로 Draw 되도록 해야 합니다.
문제는 힌트가 그려지는 시점을 찾아서 힌트를 다시 그려 줘야 하는데 그걸 어떻게 잡아야 할지 모르겠습니다....
일반적인 컴포넌는 상속받은 녀석을 다시 제정의 해서 사용하면 간편하게 처리 되는데 TrayIcon은 윈도우 것을 얻어서 쓰는거라 그게 잘 되지 않아요..
고수님 어떻게 해야 되는지 좀 알려주세요...
선언부 (다국어는 지원하는 놈은 TNotifyIconDataW --> 이것 같습니다..
TNotifyIconDataA --> 이놈은 안시입니다.
TNotifyIconData --> 보통 우리가 얻어서 쓰는 놈은 TNotifyIconDataA AnsiString 지원하는 놈입니다.
//............... ......................
NotifyStruc: TNotifyIconDataW;
//NotifyStruc: TNotifyIconData;
//....................................
NotifyStruc.cbSize := SizeOf(NotifyStruc);
NotifyStruc.Wnd := FHandle;
NotifyStruc.uID := 1;
NotifyStruc.uFlags := NIF_ICON or NIF_TIP or NIF_MESSAGE;
NotifyStruc.uCallbackMessage := WM_TRAYMESSAGE;
NotifyStruc.hIcon := 0;
// K. D. LEE 2005-01-17 다국어.
fTip := '';
fIcon := -1;
//StrPLCopy(NotifyStruc.szTip, pChar(Tip), sizeof(NotifyStruc.szTip));
StrPLCopyW(NotifyStruc.szTip, pWideChar(Tip), sizeof(NotifyStruc.szTip));
Shell_NotifyIconW(NIM_ADD, @NotifyStruc);
위와 같은 처리하면 문제가 다국어로 인식 되서 8글자 치면 4글자만 나옵니다. 일단 여기까지는 된것같은데 문제는 힌트를 다시 WideString으로 그려줘야 하는데 그걸 하는 시접을 잡을 수가 없습니다.
즉 힌트가 발생하는 시점에 windows message 가 들어올 것인데 그걸 좀 알려주셨으면 합니다..
아니면 어떻게 처리해야 되는지 좀 알려주세요...
==> 안녕하세요 BaSTaD 입니다..
Hint에 다국어 문자를 표현하신다면.. THintWindow를 상속받아서 procedure THintWindow.Paint; 를 override 해서 DrawTextW 하시면 될듯합니다. 물론 상속받으신 힌트 클래스에선 WideString으로 선언하셔야겠지요...
ps. 참고로.. HintClass 는 전역변수입니다. 성공하시길...