Documentation Flash CS3 |
|||
| Programmation avec ActionScript 3.0 > Environnement du système client > Utilisation de la classe IME | |||
La classe IME vous permet de manipuler l'IME du système d'exploitation au sein de Flash Player.
A l'aide d'ActionScript, vous pouvez déterminer les éléments suivants :
Capabilities.hasIME)IME.enabled)IME.conversionMode)Vous pouvez associer un champ de saisie de texte à un contexte IME particulier. Lorsque vous passez d'un champ d'entrée à 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, reportez-vous à la documentation du système d'exploitation correspondant à la plate-forme pour laquelle vous développez l'application. Pour davantage de ressources, consultez également les sites Web suivants :
|
REMARQUE |
|
Si aucun IME n'est actif sur l'ordinateur de l'utilisateur, les appels de méthodes ou propriétés IME échouent à l'exception de |
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("L'IME est installé et activé.");
}
else
{
trace("L'IME est installé mais pas activé. Activez votre IME et réessayez.");
}
}
else
{
trace("L'IME n'est pas installé. Installez un IME et réessayez.");
}
Le code précédent vérifie d'abord si l'utilisateur a un IME installé à l'aide de 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.
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 = "Le mode de conversion actuel est alphanumérique (pleine largeur).";
break;
case IMEConversionMode.ALPHANUMERIC_HALF:
tf.text = "Le mode de conversion actuel est alphanumérique (demi-largeur).";
break;
case IMEConversionMode.CHINESE:
tf.text = "Le mode de conversion actuel est Chinois.";
break;
case IMEConversionMode.JAPANESE_HIRAGANA:
tf.text = "Le mode de conversion actuel est Hiragana japonais.";
break;
case IMEConversionMode.JAPANESE_KATAKANA_FULL:
tf.text = "Le mode de conversion actuel est Katakana japonais (pleine largeur).";
break;
case IMEConversionMode.JAPANESE_KATAKANA_HALF:
tf.text = "Le mode de conversion actuel est Katakana japonais (demi-largeur).";
break;
case IMEConversionMode.KOREAN:
tf.text = "Le mode de conversion actuel est Coréen.";
break;
default:
tf.text = "Le mode de conversion actuel est " + IME.conversionMode + ".";
break;
}
}
else
{
tf.text = "Installez un IME et réessayez.";
}
Le code précédent vérifie d'abord si l'utilisateur a un IME installé. 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.
Lorsque vous modifiez le mode de conversion de l'IME de l'utilisateur, vous devez veiller à envelopper le code dans un bloc try..catch. En effet, si l'IME est incapable de définir le mode de conversion, l'utilisation de la propriété conversionMode peut renvoyer une erreur. Le code ci-après montre comment utiliser 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 = "Le mode de conversion est " + IME.conversionMode + ".";
}
catch (error:Error)
{
statusText.text = "Impossible de définir le mode de conversion.\n" + error.message;
}
}
Le code précédent crée d'abord un champ de texte utilisé pour afficher un message d'état à 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 et interceptée par le bloc try..catch. Le bloc try..catch affiche le message d'erreur dans le champ texte créé précédemment.
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 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 texte d'entrée, phoneTxt et nameTxt, puis ajoute deux écouteurs d'événements au champ de texte 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.
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énements à 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 = "Installez l'IME et réessayez.";
}
function imeCompositionHandler(event:IMEEvent):void
{
outputTxt.text = "vous avez tapé: " + event.text;
}
Le code précédent 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.
Flash CS3
M'envoyer un message électronique lorsque des commentaires sont ajoutés à cette page | Rapport de commentaire
Page en cours: http://livedocs.adobe.com/flash/9.0_fr/main/00000328.html