Q&A

  • 반각모드인 경우 전각모드로 바꾸는 방법?


안녕하세요...

검색을 해 보다가 원하는 내용이 없는 것 같아 질문을 올립니다.



TEdit에서 입력받을때 전각모드에서만 입력을 받아야 하거든요..

전각인지 반각인지 체크하여

반각모드인 경우 전각모드로 바꾸려면 어떻게 해야 하는지...

아시는 분의 답변을 부탁드립니다...

1  COMMENTS
  • Profile
    정명희 1999.08.03 22:05
    정명희 께서 말씀하시기를...

    >

    > 안녕하세요...

    > 검색을 해 보다가 원하는 내용이 없는 것 같아 질문을 올립니다.

    >

    > TEdit에서 입력받을때 전각모드에서만 입력을 받아야 하거든요..

    > 전각인지 반각인지 체크하여

    > 반각모드인 경우 전각모드로 바꾸려면 어떻게 해야 하는지...

    > 아시는 분의 답변을 부탁드립니다...





    자문자답이네요...

    제가 하는 방법의 효율성이 어떨지 모르겠지만요..



    먼저 TEdit의 ImeMode -> imHanguel 로 하고

    TEdit의 KeyDown Event가 발생할 때 전각/반각 전환 key가 눌린 것인지

    check하여 ImeMode를 다시 설정하였습니다.

    현재 한/영 상태를 return해주는 IsHanState()은 통신상에서 다른 분이

    올려놓으신 겁니다. 출처는 잘 모르지만 감사드립니다..



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

    {Desc 현재 한/영 상태 Return}

    var

    fFlag, imeMode : DWORD;

    hIMC : THandle;

    begin

    Result := True;

    fFlag := 1;

    hIMC := ImmGetContext(paForm.Handle);

    if hIMC = 0 then exit;

    ImmGetConversionStatus(hIMC,fFlag,imeMode);

    ImmReleaseContext(paForm.Handle,hIMC);

    Result := (fFlag = 1);

    end;



    procedure Tform.TEditKeyDown(Sender: TObject; var Key: Word;

    Shift: TShiftState);

    {Desc : 전각모드 유지}

    var iKey : Integer; //입력된 Key

    sHanState : String; //한/영 상태

    sImeMode : TImeMode; //ImeMode

    begin

    iKey := Ord(Key);



    if IsHanState(form) Then

    sHanState := '한글'

    else sHanState := '영문';



    // 전각 / 반각 전환 key가 눌린 경우

    if iKey = 23 Then Begin

    if sHanState = '한글' Then

    sImeMode := imHanguel

    else sImeMode := imAlpha;



    ImeMode := sImeMode;

    SetIme;

    End;

    end;