A classe IME permite manipular o IME do sistema operacional de dentro do Flash Player ou do Adobe AIR.
Usando o ActionScript, é possível determinar o seguinte:
-
Se um IME está instalado no computador do usuário (
Capabilities.hasIME
)
-
Se o IME está ativado ou desativado no computador do usuário (
IME.enabled
)
-
O modo de conversão do IME atual está usando (
IME.conversionMode
)
É possível associar um campo de texto de entrada a um contexto de IME específico. Ao alternar entre campos de texto, também é possível alternar o IME entre Hiragana (japonês), números de largura total, números de meia largura, entrada direta e assim por diante.
Um IME permite que os usuários digitem caracteres de texto não ASCII em idiomas com vários bytes, como chinês, japonês e coreano.
Para obter mais informações sobre como trabalhar com IMEs, consulte a documentação do sistema operacional no qual você está desenvolvendo o aplicativo. Para obter recursos adicionais, consulte os seguintes sites:
Nota:
Se o IME não estiver ativo no computador do usuário, chamadas para métodos ou propriedades do IME, que não sejam
Capabilities.hasIME
, falharão. Depois de ativar manualmente o IME, chamadas subsequentes do ActionScript para métodos e propriedades do IME funcionarão conforme o esperado. Por exemplo, se estiver usando um IME japonês, você deverá ativá-lo para poder chamar qualquer método ou propriedade do IME.
Verificação da instalação e ativação do IME
Antes de chamar qualquer um dos métodos ou propriedades do IME, você deve sempre verificar se o computador do usuário tem um IME instalado e ativado. O código a seguir ilustra como verificar se o usuário tem um IME instalado e ativo antes de chamar qualquer método:
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.");
}
O código anterior primeiro verifica se o usuário tem um IME instalado usando a propriedade
Capabilities.hasIME
. Se essa propriedade estiver definida como
true
, o código verificará se o IME do usuário está ativado usando a propriedade
IME.enabled
.
Determinação de qual modo de conversão do IME está ativado
Ao criar aplicativos multilíngue, talvez seja necessário determinar qual modo de conversão está ativo para o usuário. O código a seguir demonstra como verificar se o usuário tem um IME instalado e, nesse caso, qual modo de conversão do IME está ativo no momento:
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.";
}
O código anterior primeiro verifica se o usuário tem um IME instalado. Em seguida, ele verifica qual modo de conversão o IME atual está usando, comparando a propriedade
IME.conversionMode
com cada uma das constantes na classe IMEConversionMode.
Configuração do modo de conversão do IME
Quando você altera o modo de conversão do IME do usuário, é necessário verificar se o código está inserido em um bloco
try..catch
, porque a configuração de um modo de conversão usando a propriedade
conversionMode
poderá emitir um erro, se o IME não puder definir o modo de conversão. O código a seguir demonstra como usar um bloco
try..catch
ao definir a propriedade
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;
}
}
O código anterior primeiro cria um campo de texto que é usado para exibir uma mensagem de status para o usuário. Em seguida, se o IME estiver instalado, o código ativará o IME e definirá o modo de conversão como coreano. Se o computador do usuário não tiver um IME coreano instalado, o Flash Player ou o AIR emitirá um erro que será capturado pelo bloco
try..catch
. O bloco
try..catch
exibe a mensagem de erro no campo de texto criado anteriormente.
Desativação do IME para determinados campos de texto
Em alguns casos, convém desativar o IME do usuário enquanto ele digita caracteres. Por exemplo, se você tiver um campo de texto que aceita apenas entrada numérica, é conveniente ativar o IME e diminuir a velocidade da entrada de dados.
O exemplo a seguir demonstra como é possível ouvir os eventos
FocusEvent.FOCUS_IN
e
FocusEvent.FOCUS_OUT
e desativar o IME do usuário de maneira correspondente:
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;
}
}
Esse exemplo cria dois campos de texto de entrada,
phoneTxt
e
nameTxt
e, em seguida, adiciona dois ouvintes de eventos ao campo de texto
phoneTxt
. Quando o usuário define o foco para o campo de texto
phoneTxt
um evento
FocusEvent.FOCUS_IN
é despachado e o IME é desativado. Quando o campo de texto
phoneTxt
perde o foco, o evento
FocusEvent.FOCUS_OUT
é despachado para reativar o IME.
Ouvir eventos de composição do IME
Os eventos de composição do IME são despachados quando uma string de composição está sendo definida. Por exemplo, se o usuário tiver o IME habilitado e ativo e digitar uma string em japonês, o evento
IMEEvent.IME_COMPOSITION
despachará assim que o usuário selecionar a string da composição. Para ouvir o evento
IMEEvent.IME_COMPOSITION
, é necessário adicionar um ouvinte de eventos à propriedade estática
ime
na classe System (
flash.system.System.ime.addEventListener(...)
), conforme mostrado no exemplo a seguir:
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;
}
O código anterior cria dois campos de texto e os adiciona à lista de exibição. O primeiro campo de texto,
inputTxt
, é um campo de texto de entrada que permite que o usuário digite texto japonês. O segundo campo de texto,
outputTxt
, é um campo de texto dinâmico que exibe mensagens de erro para o usuário ou ecoa a string em japonês que o usuário digita no campo de texto
inputTxt
.
|
|
|