Klasa IME umożliwia manipulowanie edytorem IME systemu operacyjnego w programie Flash Player lub środowisku Adobe AIR.
Z poziomu kodu ActionScript można uzyskać następujące informacje:
-
czy na komputerze użytkownika jest zainstalowany edytor IME (
Capabilities.hasIME
);
-
czy edytor IME na komputerze użytkownika jest włączony, czy wyłączony
IME.enabled
);
-
jakiego trybu konwersji używa bieżący edytor IME (
IME.conversionMode
).
Istnieje możliwość skojarzenia pola tekstu wejściowego z konkretnym kontekstem edytora IME. Przełączaniu między polami wejściowymi może towarzyszyć przełączanie edytora IME między trybem Hiragana (jęz. japoński), liczbami o pełnej szerokości, liczbami o połówkowej szerokości, trybem wprowadzania bezpośredniego itd.
Edytor IME umożliwia użytkownikom wpisywanie znaków tekstu niebędących znakami ASCII, w szczególności w językach wielobajtowych, takich jak chiński, japoński i koreański.
Więcej informacji na temat pracy z edytorami IME zawiera dokumentacja systemu operacyjnego, dla którego tworzona jest aplikacja. Dodatkowe zasoby są dostępne w następujących witrynach sieci Web:
Uwaga:
Jeśli edytor IME nie jest aktywny na komputerze użytkownika, wywołania metod lub właściwości IME innych niż
Capabilities.hasIME
zakończą się niepowodzeniem. Po ręcznym aktywowaniu edytora IME wywołania ActionScript dotyczące metod i właściwości IME będą działały zgodnie z oczekiwaniami. Na przykład, jeśli używamy edytora IME dla języka japońskiego, musimy go aktywować zanim przed pierwszym odwołaniem do jakiejkolwiek metody lub właściwości IME.
Sprawdzanie, czy edytor IME jest zainstalowany i włączony
Przed wywołaniem jakichkolwiek metod lub właściwości edytora IME należy zawsze sprawdzić, czy na komputerze użytkownika jest zainstalowany i włączony edytor IME. Poniższy przykład ilustruje sprawdzanie, czy edytor IME na komputerze użytkownika jest zainstalowany i aktywny:
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.");
}
Poprzedni kod najpierw sprawdza, czy użytkownik ma zainstalowany edytor IME. Odczytywana jest w tym celu właściwość
Capabilities.hasIME
. Jeśli ta właściwość ma wartość
true
, kod sprawdza, czy edytor IME użytkownika jest włączony, odczytując właściwość
IME.enabled
.
Określanie, jaki tryb konwersji edytora IME jest włączony
W aplikacjach wielojęzycznych zachodzi czasem konieczność sprawdzenia, który tryb konwersji jest w danej chwili aktywny. Poniższy kod ilustruje sposób sprawdzenia, czy użytkownik ma zainstalowany edytor IME, a jeśli tak, to który tryb konwersji edytora IME jest obecnie aktywny:
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.";
}
Powyższy kod najpierw sprawdza, czy użytkownik ma zainstalowany edytor IME. Następnie sprawdza, który tryb konwersji obowiązuje obecnie w edytorze IME, porównując właściwość
IME.conversionMode
z poszczególnymi stałymi w klasie IMEConversionMode.
Ustawianie trybu konwersji edytora IME
Operację zmiany trybu konwersji edytora IME użytkownika należy zawsze ujmować w blok
try..catch
, ponieważ ustawienie trybu za pomocą właściwości
conversionMode
spowoduje zgłoszenie błędu, jeśli edytor IME nie będzie w stanie włączyć żądanego trybu. Poniższy kod demonstruje sposób użycia bloku
try..catch
do ustawiania właściwości
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;
}
}
Kod w powyższym przykładzie najpierw tworzy pole tekstowe, które służy do wyświetlania komunikatu o statusie. Następnie, jeśli edytor IME jest zainstalowany, kod włącza edytor IME i ustawia tryb konwersji na język koreański. Jeśli na komputerze użytkownika nie ma zainstalowanego edytora IME dla języka koreańskiego, program Flash Player lub środowisko AIR zgłasza błąd, który zostanie przechwycony przez blok
try..catch
wygenerowany zostanie obiekt ApplicationError. Instrukcja bloku
try..catch
wyświetla komunikat o błędzie w utworzonym wcześniej polu tekstowym.
Wyłączanie edytora IME dla określonych pól tekstowych
W niektórych przypadkach wskazane jest wyłączenie edytora IME użytkownika na czas wpisywania znaków. Przykładowo, jeśli mamy pole tekstowe przyjmujące tylko dane liczbowe, niecelowe jest wywoływanie edytora IME, który będzie tylko utrudniał wprowadzanie danych.
Poniższy przykład ilustruje wyłączanie edytora IME użytkownika w odpowiedzi na zdarzenia
FocusEvent.FOCUS_IN
i
FocusEvent.FOCUS_OUT
:
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;
}
}
W przykładzie tym tworzone są dwa pola tekstowe,
phoneTxt
oraz
nameTxt
, a następnie do pola tekstowego
phoneTxt
dodawane są dwa detektory zdarzeń. Gdy użytkownik aktywuje pole tekstowe
phoneTxt
, wywoływane jest zdarzenie
FocusEvent.FOCUS_IN
i edytor IME zostaje wyłączony. Gdy pole
phoneTxt
przestaje być aktywne, wywoływane jest zdarzenie
FocusEvent.FOCUS_OUT
powodujące włączenie edytora IME.
Wykrywanie zdarzeń kompozycji z edytora IME
Zdarzenia kompozycji edytora IME są wywoływane w trakcie zestawiania ciągu znaków kompozycji/ Na przykład, jeśli użytkownik ma włączony i aktywny edytor IME i wpisuje ciąg znaków w języku japońskim, zdarzenie
IMEEvent.IME_COMPOSITION
zostanie wywołane niezwłocznie po tym, jak użytkownik wybierze ciąg znaków kompozycji. Aby wykrywać zdarzenie
IMEEvent.IME_COMPOSITION
, należy dodać detektor zdarzenia do statycznej właściwości
ime
w klasie System (
flash.system.System.ime.addEventListener(...)
), tak jak ilustruje to poniższy przykład
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;
}
Powyższy kod tworzy dwa pola tekstowe i dodaje je do listy wyświetlania. Pierwsze pole tekstowe,
inputTxt
, to pole tekstu wejściowego, które umożliwia użytkownikowi wprowadzanie tekstu w języku japońskim. Drugie pole tekstowe,
outputTxt
, to pole dynamiczne, w którym wyświetlane są komunikaty o błędach lub replika japońskiego ciągu znaków wpisywanego w polu tekstowym
inputTxt
.
|
|
|