IME 클래스 사용

Flash Player 9 이상, Adobe AIR 1.0 이상

IME 클래스를 사용하면 Flash Player 또는 Adobe AIR 내에서 운영 체제의 IME를 조작할 수 있습니다.

ActionScript를 사용하여 다음을 확인할 수 있습니다.

  • IME가 사용자의 컴퓨터에 설치되어 있는지 여부( Capabilities.hasIME )

  • IME가 사용자의 컴퓨터에서 활성화되어 있는지 아니면 비활성화되어 있는지 여부( IME.enabled )

  • 현재 IME가 사용하는 변환 모드( IME.conversionMode )

입력 텍스트 필드를 특정 IME 컨텍스트에 연결시킬 수 있습니다. 입력 필드 간에 전환할 때 IME를 히라가나(일본어), 최대 폭 숫자, 반폭 숫자, 직접 입력 등으로 서로 전환할 수도 있습니다.

IME를 사용하면 한국어, 중국어 및 일본어 등 ASCII가 아닌 멀티바이트 언어 텍스트 문자를 입력할 수 있습니다.

IME 사용에 대한 자세한 내용은 개발 중인 응용 프로그램을 실행할 운영 체제의 설명서를 참조하십시오. 추가 리소스를 보려면 다음 웹 사이트를 참조하십시오.

참고: 사용자의 컴퓨터에 IME가 활성화되어 있지 않으면 Capabilities.hasIME 이외의 IME 메서드 또는 속성이 호출되지 않습니다. 이때 IME를 수동으로 활성화시키면 ActionScript에서 이후에 IME 메서드 및 속성을 정상적으로 호출할 수 있습니다. 예를 들어 일본어 IME를 사용하는 경우 IME 메서드 또는 속성을 호출하기 전에 해당 IME를 활성화해야 합니다.

IME 설치 여부 및 활성화 여부 확인

IME 메서드나 속성을 호출하기 전에 현재 사용자의 컴퓨터에 IME가 설치되어 있으며 활성화되어 있는지 항상 확인해야 합니다. 다음 코드는 메서드를 호출하기 전에 IME가 설치 여부 및 활성화 여부를 확인하는 방법을 보여 줍니다.

if (Capabilities.hasIME) 
{ 
    if (IME.enabled) 
    { 
        trace("IME is installed and enabled."); 
    } 
    else 
    { 
        trace("IME is installed but not enabled. Please enable your IME and try again."); 
    } 
} 
else 
{ 
    trace("IME is not installed. Please install an IME and try again."); 
}

앞의 코드는 먼저 Capabilities.hasIME 속성을 사용하여 IME 설치 여부를 확인합니다. 이 속성이 true 로 설정되어 있으면 이 코드가 IME.enabled 속성을 사용하여 사용자의 IME가 현재 활성화되어 있는지 여부를 확인합니다.

현재 활성화된 IME 변환 모드 확인

다국어 응용 프로그램을 작성할 때 사용자가 현재 활성화되어 있는 변환 모드를 확인해야 할 수 있습니다. 다음 코드는 메서드를 호출하기 전에 IME 설치 여부 확인 방법 및 IME가 설치된 경우 현재 활성화된 IME 변환 모드 확인 방법을 보여 줍니다.

if (Capabilities.hasIME) 
{ 
    switch (IME.conversionMode) 
    { 
        case IMEConversionMode.ALPHANUMERIC_FULL: 
            tf.text = "Current conversion mode is alphanumeric (full-width)."; 
            break; 
        case IMEConversionMode.ALPHANUMERIC_HALF: 
            tf.text = "Current conversion mode is alphanumeric (half-width)."; 
            break; 
        case IMEConversionMode.CHINESE: 
            tf.text = "Current conversion mode is Chinese."; 
            break; 
        case IMEConversionMode.JAPANESE_HIRAGANA: 
            tf.text = "Current conversion mode is Japananese Hiragana."; 
            break; 
        case IMEConversionMode.JAPANESE_KATAKANA_FULL: 
            tf.text = "Current conversion mode is Japanese Katakana (full-width)."; 
            break; 
        case IMEConversionMode.JAPANESE_KATAKANA_HALF: 
            tf.text = "Current conversion mode is Japanese Katakana (half-width)."; 
            break; 
        case IMEConversionMode.KOREAN: 
            tf.text = "Current conversion mode is Korean."; 
            break; 
        default: 
            tf.text = "Current conversion mode is " + IME.conversionMode + "."; 
            break; 
    } 
} 
else 
{ 
    tf.text = "Please install an IME and try again."; 
}

앞의 코드는 먼저 IME가 설치되어 있는지 여부를 확인합니다. 다음으로 IMEConversionMode 클래스의 각 상수와 IME.conversionMode 속성을 비교하여 현재 IME에서 사용하고 있는 변환 모드를 확인합니다.

IME 변환 모드 설정

사용자의 IME 변환 모드를 변경할 때 코드가 try..catch 블록에서 래핑되는지 확인해야 합니다. IME에서 변환 모드를 설정할 수 없는 경우에 conversionMode 속성을 사용하여 변환 모드를 설정하면 오류가 발생할 수 있습니다. 다음 코드는 try..catch 블록을 사용하여 IME.conversionMode 속성을 설정하는 방법을 보여 줍니다.

var statusText:TextField = new TextField; 
statusText.autoSize = TextFieldAutoSize.LEFT; 
addChild(statusText); 
if (Capabilities.hasIME) 
{ 
    try 
    { 
        IME.enabled = true; 
        IME.conversionMode = IMEConversionMode.KOREAN; 
        statusText.text = "Conversion mode is " + IME.conversionMode + "."; 
    } 
    catch (error:Error) 
    { 
        statusText.text = "Unable to set conversion mode.\n" + error.message; 
    } 
}

앞의 코드는 먼저 사용자에게 상태 메시지를 표시하는 데 사용되는 텍스트 필드를 만듭니다. 그 다음에는 IME가 설치되어 있는 경우 이 코드가 IME를 활성화하고 변환 모드를 한국어로 설정합니다. 사용자의 컴퓨터에 한국어 IME가 설치되어 있지 않으면 Flash Player 또는 AIR에서 오류가 발생하고 try..catch 블록에서 이 오류가 catch됩니다. try..catch 블록은 앞에서 만든 텍스트 필드에 오류 메시지를 표시합니다.

특정 텍스트 필드에 대해 IME 비활성화

경우에 따라 문자를 입력할 때 사용자의 IME를 비활성화할 수 있습니다. 예를 들어 숫자만 입력할 수 있는 텍스트 필드가 있는 경우 IME를 사용하지 않고 천천히 데이터를 입력할 수 있습니다.

다음 예제에서는 FocusEvent.FOCUS_IN FocusEvent.FOCUS_OUT 이벤트를 수신하고 그에 따라 사용자의 IME를 비활성화하는 방법을 보여 줍니다.

var phoneTxt:TextField = new TextField(); 
var nameTxt:TextField = new TextField(); 
 
phoneTxt.type = TextFieldType.INPUT; 
phoneTxt.addEventListener(FocusEvent.FOCUS_IN, focusInHandler); 
phoneTxt.addEventListener(FocusEvent.FOCUS_OUT, focusOutHandler); 
phoneTxt.restrict = "0-9"; 
phoneTxt.width = 100; 
phoneTxt.height = 18; 
phoneTxt.background = true; 
phoneTxt.border = true; 
addChild(phoneTxt); 
 
nameField.type = TextFieldType.INPUT; 
nameField.x = 120; 
nameField.width = 100; 
nameField.height = 18; 
nameField.background = true; 
nameField.border = true; 
addChild(nameField); 
 
function focusInHandler(event:FocusEvent):void 
{ 
    if (Capabilities.hasIME) 
    { 
        IME.enabled = false; 
    } 
} 
function focusOutHandler(event:FocusEvent):void 
{ 
    if (Capabilities.hasIME) 
    { 
        IME.enabled = true; 
    } 
}

다음 예제는 phoneTxt nameTxt 라는 두 가지 입력 텍스트 필드를 만든 다음 두 개의 이벤트 리스너를 phoneTxt 텍스트 필드에 추가합니다. 사용자가 phoneTxt 텍스트 필드를 강조하도록 설정하면 FocusEvent.FOCUS_IN 이벤트가 전달되고 IME가 비활성화됩니다. phoneTxt 텍스트 필드가 강조되지 않으면 FocusEvent.FOCUS_OUT 이벤트가 전달되어 IME를 다시 활성화합니다.

IME 구성 이벤트 수신

구성 문자열을 설정하면 IME 구성 이벤트가 전달됩니다. 예를 들어 사용자가 IME를 활성화하고 일본어로 문자열을 입력한 경우 사용자가 구성 문자열을 선택하는 즉시 IMEEvent.IME_COMPOSITION 이벤트가 전달됩니다. IMEEvent.IME_COMPOSITION 이벤트를 수신하려면 다음 예제와 같이 이벤트 리스너를 System 클래스( flash.system.System.ime.addEventListener(...) )의 정적 ime 속성에 추가해야 합니다.

var inputTxt:TextField; 
var outputTxt:TextField; 
 
inputTxt = new TextField(); 
inputTxt.type = TextFieldType.INPUT; 
inputTxt.width = 200; 
inputTxt.height = 18; 
inputTxt.border = true; 
inputTxt.background = true; 
addChild(inputTxt); 
 
outputTxt = new TextField(); 
outputTxt.autoSize = TextFieldAutoSize.LEFT; 
outputTxt.y = 20; 
addChild(outputTxt); 
 
if (Capabilities.hasIME) 
{ 
    IME.enabled = true; 
    try 
    { 
        IME.conversionMode = IMEConversionMode.JAPANESE_HIRAGANA; 
    } 
    catch (error:Error) 
    { 
        outputTxt.text = "Unable to change IME."; 
    } 
    System.ime.addEventListener(IMEEvent.IME_COMPOSITION, imeCompositionHandler); 
} 
else 
{ 
    outputTxt.text = "Please install IME and try again."; 
} 
 
function imeCompositionHandler(event:IMEEvent):void 
{ 
    outputTxt.text = "you typed: " + event.text; 
}

앞의 코드는 두 개의 텍스트 필드를 만들고 해당 필드를 표시 목록에 추가합니다. 첫 번째 텍스트 필드인 inputTxt 는 사용자가 일본어 텍스트를 입력할 수 있는 입력 텍스트 필드입니다. 두 번째 텍스트 필드인 outputTxt 는 사용자에게 오류 메시지를 표시하거나 사용자가 inputTxt 텍스트 필드에 입력한 일본어 문자열을 반복하여 표시하는 동적 텍스트 필드입니다.