Utilisation de la classe IME
Flash Player 9 et les versions ultérieures, Adobe AIR 1.0 et les versions ultérieures
La classe IME permet de manipuler l’IME du système d’exploitation à partir de Flash Player ou Adobe AIR.
A l’aide d’ActionScript, vous pouvez déterminer les éléments suivants :
-
Si un IME est installé sur l’ordinateur de l’utilisateur (
Capabilities.hasIME
)
-
Si l’IME est activé ou désactivé sur l’ordinateur de l’utilisateur (
IME.enabled
)
-
Le mode de conversion utilisé par l’IME actif (
IME.conversionMode
)
Vous pouvez associer un champ de saisie de texte à un contexte IME particulier. Lorsque vous passez d’un champ de saisie à un autre, vous pouvez également changer l’IME pour utiliser les caractères Hiragana (japonais), des nombres à pleine chasse, des nombres à demi-chasse, la saisie directe, etc.
Un IME permet aux utilisateurs d’entrer des caractères de texte non ASCII des langues codées sur plusieurs octets, telles que le chinois, le japonais et le coréen.
Pour plus d’informations sur les IME, voyez la documentation du système d’exploitation correspondant à la plate-forme pour laquelle vous développez l’application. Pour davantage de ressources, voir également les sites Web suivants :
Remarque :
si aucun IME n’est actif sur l’ordinateur de l’utilisateur, tout appel aux méthodes ou propriétés IME, autres que
Capabilities.hasIME
, échoue. Lorsque vous activez manuellement un IME, les appels ActionScript suivants aux méthodes et aux propriétés IME fonctionnent comme prévu. Par exemple, si vous utilisez un IME japonais, vous devez l’activer avant d’appeler une méthode ou une propriété IME.
Confirmation de l’installation et de l’activation d’un IME
Avant d’appeler des méthodes ou propriétés IME, vous devez toujours vérifier si un IME est installé et activé sur l’ordinateur de l’utilisateur. Le code suivant montre comment vérifier que l’utilisateur dispose d’un IME installé et activé avant d’appeler une méthode :
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.");
}
Le code précédent commence par vérifier si un IME est installé à l’aide la propriété
Capabilities.hasIME
. Si la valeur de la propriété est
true
, le code vérifie ensuite si l’IME est activé à l’aide de la propriété
IME.enabled
.
Identification du mode de conversion IME activé
Lorsque vous construisez une application multilingue, il peut être nécessaire de déterminer le mode de conversion actif dans le système d’exploitation. Le code suivant montre comment vérifier si l’utilisateur dispose d’un IME installé et, le cas échéant, quel mode de conversion IME est activé :
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.";
}
Le code ci-dessus commence par vérifier si l’utilisateur dispose d’un IME. Ensuite, il vérifie le mode de conversion actuellement utilisé par l’IME en comparant la propriété
IME.enabled
à chacune des constantes de la classe IMEConversionMode.
Définition du mode de conversion IME
Lorsque vous modifiez le mode de conversion de l’IME de l’utilisateur, veillez à ce que le code soit enveloppé dans un bloc
try..catch
, car la définition du mode de conversion à l’aide de la propriété
conversionMode
peut donner lieu à une erreur si l’IME ne peut pas définir le mode choisi. Le code suivant illustre l’utilisation d’un bloc
try..catch
lors de la définition de la propriété
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;
}
}
Ce code commence par créer un champ de texte qui sert à afficher un message d’état à l’intention de l’utilisateur. Ensuite, si l’IME est installé, le code l’active et définit le mode de conversion coréen. Si l’ordinateur de l’utilisateur ne dispose pas d’un IME coréen, une erreur est renvoyée par Flash Player ou AIR et interceptée par le bloc
try..catch
. Le bloc
try..catch
affiche le message d’erreur dans le champ de texte créé précédemment.
Désactivation de l’IME pour certains champs de texte
Dans certains cas, il peut être nécessaire de désactiver l’IME de l’utilisateur pendant que ce dernier saisit des caractères. Par exemple, si un champ de texte accepte uniquement des caractères numériques, il peut être préférable d’éviter l’intervention de l’IME pour ne pas ralentir la saisie des données.
L’exemple suivant montre comment écouter les événements
FocusEvent.FOCUS_IN
et
FocusEvent.FOCUS_OUT
et désactiver l’IME de l’utilisateur en conséquence :
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;
}
}
Cet exemple crée deux champs de saisie de texte,
phoneTxt
et
nameTxt
, puis ajoute deux écouteurs d’événement au champ
phoneTxt
. Lorsque l’utilisateur place le focus sur le champ
phoneTxt
, un événement
FocusEvent.FOCUS_IN
est distribué et l’IME est désactivé. Lorsque le focus est retiré du champ
phoneTxt
, l’événement
FocusEvent.FOCUS_OUT
est distribué pour réactiver l’IME.
Ecoute des événements IME composition
Les événements IME composition sont distribués lors de la définition d’une chaîne de composition. Par exemple, si l’IME de l’utilisateur est activé et que l’utilisateur saisit une chaîne en japonais, l’événement
IMEEvent.IME_COMPOSITION
est distribué dès que l’utilisateur sélectionne la chaîne de composition. Pour écouter l’événement
IMEEvent.IME_COMPOSITION
, vous devez ajouter un écouteur d’événement à la propriété statique
ime
de la classe System (
flash.system.System.ime.addEventListener(...)
), comme le montre l’exemple suivant :
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;
}
Le code ci-dessus crée deux champs de texte et les ajoute à la liste d’affichage. Le premier champ,
inputTxt
, est un champ de saisie de texte qui permet à l’utilisateur d’entrer du texte japonais. Le second champ,
outputTxt
, est un champ de texte dynamique qui affiche des messages d’erreur à l’utilisateur ou reprend la chaîne japonaise que l’utilisateur saisit dans le champ
inputTxt
.
|
|
|
|
|