De klasse IME gebruiken

Flash Player 9 of hoger, Adobe AIR 1.0 of hoger

Met de klasse IME kunt u de invoermethode-editor (IME) van het besturingssysteem manipuleren binnen Flash Player of Adobe AIR.

Met ActionScript kunt u het volgende bepalen:

  • Of een IME is geïnstalleerd op de computer van de gebruiker ( Capabilities.hasIME )

  • Of de IME is ingeschakeld of uitgeschakeld op de computer van de gebruiker ( IME.enabled )

  • De omzettingsmodus die door de huidige IME wordt gebruikt ( IME.conversionMode )

U kunt een invoertekstveld koppelen aan een bepaalde IME-context. Door van het ene naar het andere invoerveld te gaan kunt u van IME wisselen, bijvoorbeeld tussen Hiragana (Japans), getallen op volledige breedte, getallen op halve breedte, directe invoer, enzovoort.

Met een IME kunnen gebruikers niet-ASCII-teksttekens typen in multibyte-talen zoals Chinees, Japans en Koreaans.

Raadpleeg de documentatie van het besturingssysteem waarvoor u de toepassing ontwikkelt voor meer informatie over werken met IME's. Raadpleeg de volgende websites voor aanvullende bronnen:

Opmerking: Als de IME niet actief is op de computer van de gebruiker, mislukken aanroepen naar andere IME-methoden of -eigenschappen dan Capabilities.hasIME . Wanneer u de IME handmatig hebt geactiveerd, werken volgende ActionScript-aanroepen naar IME-methoden en -eigenschappen naar behoren. Wanneer u bijvoorbeeld een Japanse IME gebruikt, moet u deze activeren voordat u een IME-methode of -eigenschap kunt aanroepen.

Bepalen of een IME is geïnstalleerd en ingeschakeld

Voordat u één van de IME-methoden of -eigenschappen aanroept, moet u altijd controleren of er op de computer van de gebruiker op dat moment een IME is geïnstalleerd en ingeschakeld. De volgende code toont hoe u kunt controleren of er op de computer van de gebruiker een IME is geïnstalleerd en ingeschakeld voordat u methoden aanroept:

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

De bovenstaande code controleert eerst met de eigenschap Capabilities.hasIME of de gebruiker een IME heeft geïnstalleerd. Als deze eigenschap is ingesteld op true , controleert de code vervolgens met de eigenschap IME.enabled of de IME van de gebruiker op dit moment is ingeschakeld.

Bepalen welke IME-omzettingsmodus op dit moment is ingeschakeld

Wanneer u meertalige toepassingen bouwt, moet u soms kunnen bepalen welke omzettingsmodus actief is op het systeem van de gebruiker. De volgende code laat zien hoe u kunt controleren of een IME is geïnstalleerd op de computer van de gebruiker, en zo ja, welke IME-omzettingsmodus op dat moment actief is:

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

De bovenstaande code controleert eerst of op het systeem een IME is geïnstalleerd. Vervolgens wordt gecontroleerd welke omzettingsmodus de huidige IME gebruikt door de eigenschap IME.conversionMode te vergelijken met elke constante in de klasse IMEConversionMode.

De IME-omzettingsmodus instellen

Wanneer u de omzettingsmodus van de IME van de gebruiker wijzigt, moet u ervoor zorgen dat de code is opgenomen in een blok try..catch . Hiermee voorkomt u dat er bij het instellen van de omzettingsmodus met de eigenschap conversionMode een fout optreedt als de IME de omzettingsmodus niet kan instellen. De volgende code laat zien hoe u een blok try..catch gebruikt wanneer u de eigenschap IME.conversionMode instelt:

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

De bovenstaande code maakt eerst een tekstveld, dat wordt gebruikt om een statusbericht voor de gebruiker weer te geven. Vervolgens activeert de code de IME, indien deze is geïnstalleerd, en stelt de omzettingsmodus in op Koreaans. Als er op de computer van de gebruiker geen Koreaanse IME is geïnstalleerd, genereert Flash Player of AIR een fout die wordt afgevangen door het blok try..catch . Het blok try..catch geeft de foutmelding weer in het eerder gemaakte tekstveld.

De IME uitschakelen voor bepaalde tekstvelden

Het kan voorkomen dat u de IME van de gebruiker wilt uitschakelen op het moment dat de gebruiker tekens invoert. Zo wilt u bij een tekstveld dat alleen numerieke invoer accepteert, wellicht niet dat de IME de gegevensinvoer vertraagt.

Het volgende voorbeeld laat zien hoe u kunt luisteren naar de gebeurtenissen FocusEvent.FOCUS_IN en FocusEvent.FOCUS_OUT en afhankelijk van het resultaat de IME van de gebruiker kunt uitschakelen:

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

In dit voorbeeld worden twee invoertekstvelden gemaakt, phoneTxt en nameTxt , waarna twee gebeurtenislisteners worden toegevoegd aan het tekstveld phoneTxt . Wanneer de gebruiker de focus instelt op het tekstveld phoneTxt , wordt een gebeurtenis FocusEvent.FOCUS_IN verzonden en wordt de IME uitgeschakeld. Wanneer het tekstveld phoneTxt focus verliest, wordt de gebeurtenis FocusEvent.FOCUS_OUT verzonden en wordt de IME weer ingeschakeld.

Luisteren naar IME-compositiegebeurtenissen

IME-compositiegebeurtenissen worden verzonden wanneer een compositietekenreeks wordt ingesteld. Als de IME van de gebruiker bijvoorbeeld ingeschakeld en actief is en de gebruiker een tekenreeks invoert in het Japans, wordt de gebeurtenis IMEEvent.IME_COMPOSITION verzonden zodra de gebruiker de compositietekenreeks selecteert. Als u wilt luisteren naar de gebeurtenis IMEEvent.IME_COMPOSITION , moet u een gebeurtenislistener toevoegen aan de statische eigenschap ime in de klasse System ( flash.system.System.ime.addEventListener(...) ), zoals getoond in het volgende voorbeeld:

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

De bovenstaande code maakt twee tekstvelden en voegt deze toe aan het weergaveoverzicht. Het eerste tekstveld, inputTxt , is een invoertekstveld waarin de gebruiker Japanse tekst kan invoeren. Het tweede tekstveld, outputTxt , is een dynamisch tekstveld dat foutmeldingen weergeeft of een echo toont van de Japanse tekenreeks die de gebruiker invoert in het tekstveld inputTxt .