본문 바로가기

프로그래밍/Delphi

런타임(Runtime) 한영 전환

[출처 : http://blog.daum.net/ryang000/66]

public에 밑에 함수 추가

const

  English = 0; Korean = 1;



uses InputUnit, ViewUnit, Imm;


{$R *.DFM}


//////////// 한/영상태 검사 루틴///////////////

function TMainForm.IsHanState(paForm: TForm): boolean;

var

   fFlag, imeMode: DWORD;

   hIMC: THandle;

begin

   hIMC:= ImmGetContext(paForm.Handle);

   ImmGetConversionStatus(hIMC, fFlag, imeMode);

   ImmReleaseContext(paForm.Handle, hIMC);

   Result:= (fFlag = 1);

end;

//////////// 한/영상태 변화 루틴///////////////

procedure TMainForm.SetIMEMode(const Language: Integer);

var

   dwConversion, dwSentence: DWORD;

   hIMC: THandle;

begin

   hIMC:= ImmGetContext(Application.Handle);

   ImmGetConversionStatus(hIMC, dwConversion, dwSentence);

   Case Language Of

      English: ImmSetConversionStatus(hIMC, IME_CMODE_ALPHANUMERIC, dwSentence);

      Korean : ImmSetConversionStatus(hIMC, IME_CMODE_NATIVE, dwSentence);

   end; {Case Value Of}

   ImmReleaseContext(Application.Handle, hIMC);

end;


procedure TMainForm.AppMessage(var Msg: TMsg; var Handled: Boolean);

begin

   If IsHanState(Self) Then StatusBar1.Panels[1].Text:= ' 한글 '

   Else StatusBar1.Panels[1].Text:= ' 영문 ';

end;

procedure TMainForm.FormCreate(Sender: TObject);

begin

   InputFormActive:= False;

   ViewFormActive:= False;

   InputClose:= True;

   Application.OnHint:= ShowHint;

   Application.OnMessage:= AppMessage;

   SetIMEMode(Korean);

   Left:= 1;

   Top:= 1;

end;