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
.
|
|
|