Q&A

  • 한영키 제어
windows.pas를 봐도 한영키의 가상키값은 없는 것같군요.

키값이 없다면 API로 제어를 할텐데 찾기가 힘들군요.

한영키의 상태를 체크하고 토글시킬 수 있는 방법을 알고 싶습니다.

도움을 부탁드립니다.

1  COMMENTS
  • Profile
    김영대 1999.09.06 21:55
    박성훈 께서 말씀하시기를...

    > windows.pas를 봐도 한영키의 가상키값은 없는 것같군요.

    > 키값이 없다면 API로 제어를 할텐데 찾기가 힘들군요.

    > 한영키의 상태를 체크하고 토글시킬 수 있는 방법을 알고 싶습니다.

    > 도움을 부탁드립니다.



    이건 델파이 팁 사이트에 많이 있는건데...



    unit Unit1;



    interface



    uses

    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

    StdCtrls, Imm, Buttons; // Imm을 추가했네요



    type

    TForm1 = class(TForm)

    Edit1: TEdit;

    Edit2: TEdit;

    Label1: TLabel;

    SpeedButton1: TSpeedButton;

    procedure Edit1Enter(Sender: TObject);

    procedure Edit1Exit(Sender: TObject);

    procedure SpeedButton1Click(Sender: TObject);

    private

    { Private declarations }

    public

    { Public declarations }

    procedure SetHangeulMode(SetHangeul: Boolean);

    function GetHangeulMode: Boolean;

    end;



    var

    Form1: TForm1;



    implementation

    {$R *.DFM}



    {한글/영문 변환 루틴}

    procedure TForm1.SetHangeulMode(SetHangeul: Boolean);

    var

    tMode : HIMC;

    begin

    tMode := ImmGetContext(handle);

    if SetHangeul then // 한글모드로

    ImmSetConversionStatus(tMode, IME_CMODE_HANGEUL,

    IME_CMODE_HANGEUL)

    else // 영문모드로

    ImmSetConversionStatus(tMode, IME_CMODE_ALPHANUMERIC,

    IME_CMODE_ALPHANUMERIC);

    end;



    {현재 한글/영문 상태}

    function TForm1.GetHangeulMode: Boolean;

    var

    tMode : HIMC;

    Conversion, Sentence: DWORD;

    begin

    tMode := ImmGetContext(handle);

    ImmGetConversionStatus(tMode, Conversion, Sentence);

    if Conversion = IME_CMODE_HANGEUL then

    GetHangeulMode := True

    else

    GetHangeulMode := False;

    end;



    procedure TForm1.Edit1Enter(Sender: TObject);

    begin

    // Edit1에 focus가 오면 한글 모드로

    SetHangeulMode(True);

    end;



    procedure TForm1.Edit1Exit(Sender: TObject);

    begin

    // Edit1에서 focus가 없어지면 영문 모드로

    SetHangeulMode(False);

    end;



    procedure TForm1.SpeedButton1Click(Sender: TObject);

    begin

    // 현재 한글/영문 상태는 ?

    if GetHangeulMode then

    Label1.Caption := '한글'

    else

    Label1.Caption := '영문';

    end;



    end.