Uso della classe IME

Flash Player 9 e versioni successive, Adobe AIR 1.0 e versioni successive

La classe IME consente di manipolare l'IME del sistema operativo all'interno di Flash Player o Adobe AIR.

Utilizzando ActionScript potete determinare quanto segue:

  • se sul computer di un utente è installato un IME (Capabilities.hasIME);

  • se sul computer di un utente l'IME è abilitato o disabilitato (IME.enabled);

  • la modalità di conversione utilizzata dall'IME corrente (IME.conversionMode).

Potete associare un campo di testo di input con un contesto IME particolare. Quando passate da un campo di input a un altro, potete anche passare a una modalità dell'IME diversa, ad esempio Hiragana (giapponese), numeri a larghezza intera, numeri a larghezza ridotta, input diretto e così via.

Un IME consente all'utente di digitare caratteri di testo non ASCII nelle lingue multibyte quali il cinese, il giapponese e il coreano.

Per ulteriori informazioni sull'uso degli IME, vedete la documentazione del sistema operativo per il quale si sta sviluppando l'applicazione. Per ulteriori risorse, vedete i siti Web seguenti:

Nota: se nel computer dell'utente non è stato attivato alcun IME, le chiamate ai metodi o alle proprietà IME diversi da Capabilities.hasIME hanno esito negativo. Dopo che un IME è stato attivato manualmente, le successive chiamate ActionScript ai metodi e alle proprietà IME funzioneranno nei modi previsti. Ad esempio, se si utilizza un IME giapponese, è necessario attivarlo prima di chiamare qualsiasi metodo o proprietà IME.

Verifica dell'installazione e attivazione di un IME

Prima di chiamare qualsiasi metodo o proprietà IME, è necessario verificare sempre se sul computer dell'utente è installato e attivato un IME. Il codice riportato di seguito illustra come verificare se l'utente ha installato e attivato un IME prima di chiamare qualsiasi metodo:

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."); 
}

Il codice precedente controlla innanzitutto se sul computer dell'utente è installato un IME utilizzando la proprietà Capabilities.hasIME. Se questa proprietà è impostata su true, il codice controlla quindi se l'IME dell'utente è attualmente attivato utilizzando la proprietà IME.enabled.

Determinazione della modalità di conversione IME attivata

Quando si creano applicazioni in più lingue, può essere necessario determinare quale modalità di conversione è attualmente attivata per l'utente. Il codice riportato di seguito dimostra come verificare se l'utente ha attivato un IME e, in tal caso, quale modalità di conversione è attiva:

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."; 
}

Il codice precedente controlla innanzitutto se l'utente ha un IME installato, Quindi, controlla quale modalità di conversione viene utilizzata dall'IME corrente, confrontando la proprietà IME.conversionMode con ognuna delle costanti della classe IMEConversionMode.

Impostazione della modalità di conversione IME

Quando modificate la modalità di conversione dell'IME dell'utente, dovete assicurarvi che il codice sia racchiuso in un blocco try..catch, perché impostando una modalità di conversione utilizzando la proprietà conversionMode potrebbe essere generato un errore nel caso in cui l'IME non sia in grado di attivare la modalità di conversione. Il seguente codice mostra come utilizzare un blocco try..catch quando si imposta la proprietà 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; 
    } 
}

Il codice precedente crea innanzitutto un campo di testo, che viene utilizzato per visualizzare un messaggio di stato per l'utente. Quindi, se l'IME è installato, il codice attiva l'IME e imposta la modalità di conversione sulla lingua coreana. Se nel computer dell'utente non è installato l'IME per il coreano, Flash Player o AIR generano un errore che viene rilevato dal blocco try..catch. Il blocco try..catch visualizza il messaggio di errore all'interno del campo di testo precedentemente creato.

Disattivazione dell'IME per determinati campi di testo

In alcuni casi, può essere utile disattivare l'IME dell'utente mentre è in corso la digitazione dei caratteri. Ad esempio, se è stato creato un campo di testo che accetta solo input numerico, può non essere consigliabile attivare l'IME e rallentare l'immissione dei dati.

L'esempio riportato di seguito dimostra come impostare l'ascolto degli eventi FocusEvent.FOCUS_IN e FocusEvent.FOCUS_OUT e disattivare di conseguenza l'IME dell'utente:

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; 
    } 
}

Questo esempio crea due campi di testo, phoneTxt e nameTxt, quindi aggiunge due listener di eventi al campo di testo phoneTxt. Quando l'utente imposta l'attivazione sul campo di testo phoneTxt, viene inviato un evento FocusEvent.FOCUS_IN e l'IME viene disattivato. Quando il campo di testo phoneTxt non è più attivo, viene inviato l'evento FocusEvent.FOCUS_OUT per riattivare l'IME.

Ascolto degli eventi di composizione IME

Gli eventi di composizione IME vengono inviati quando si imposta una stringa di composizione. Ad esempio, se l'IME dell'utente è attivato e in uso e viene digitata una stringa in giapponese, l'evento IMEEvent.IME_COMPOSITION verrà inviato non appena l'utente seleziona la stringa di composizione. Per impostare l'ascolto dell'evento IMEEvent.IME_COMPOSITION, è necessario aggiungere un listener di eventi alla proprietà statica ime nella classe System (flash.system.System.ime.addEventListener(...)), come illustrato nell'esempio riportato di seguito:

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; 
}

Il codice precedente crea due campi di testo e li aggiunge all'elenco di visualizzazione. Il primo, inputTxt, è un campo di testo di input che consente all'utente di immettere testo in giapponese. Il secondo, outputTxt, è un campo di testo dinamico che visualizza i messaggi di errore per l'utente o che riflette la stringa in giapponese digitata dall'utente nel campo di testo inputTxt.