Я бы хотел иметь возможность программно добавлять символ в TextInput (скажем, когда вы нажимаете кнопку) даже при использовании IME (я сейчас использую японский IME). Обычно это было бы очень легко, то есть
protected function button_clickHandler(event:MouseEvent):void
{
ti.text = "k";
}
где ti - компонент TextInput. Однако при использовании IME все становится немного сложнее. Например, приведенный выше код добавляет k в ti, даже если вы используете IME Хирагана.
Я посмотрел документацию IME и попробовал что-то вроде этого
protected function button_clickHandler(event:MouseEvent):void
{
IME.setCompositionString("k");
}
Сначала я подумал, что это делает свое дело, но кажется, что по умолчанию он всегда выглядит как половинная ширина катакана (хотя я не уверен на 100%), даже если в настоящее время выбран режим преобразования Хирагана, или если Я установил это прямо перед установкой строки композиции. К сожалению, библиотека IME, похоже, не является открытым исходным кодом, поэтому я понятия не имею, является ли это ошибкой или нет.
Интересно, есть ли у кого-нибудь какой-нибудь совет - я понимаю, что это супер специфично, поэтому шансы невелики, но я решил попробовать.
спасибо!
post-edit: вот код, чтобы опробовать то, о чем я говорю. Примечание: вам понадобится японский IME на вашем компьютере. Я использую это на Windows 7 с японской настройкой IME и запускаю на автономной Flash. Трудно увидеть разницу между вводом k в хирагане и в катакане, но если вы присмотритесь, вы заметите разницу (и если вы наберете «a» сразу после того, как вы увидите разные результаты, всплывающие).
<?xml version="1.0"?>
<!-- dpcontrols/adg/SimpleADG.mxml -->
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:mx="library://ns.adobe.com/flex/mx"
xmlns:s="library://ns.adobe.com/flex/spark">
<fx:Script>
<![CDATA[
protected function button_clickHandler(event:MouseEvent):void
{
ti.setFocus();
try
{
IME.enabled = true;
IME.conversionMode = IMEConversionMode.JAPANESE_HIRAGANA;
IME.setCompositionString("k");
}
catch (error:Error)
{
trace("Unable to set conversion mode.\n" + error.message);
}
}
]]>
</fx:Script>
<s:VGroup>
<s:TextInput id="ti"/>
<s:Button label="go" click="button_clickHandler(event)"/>
</s:VGroup>
</s:Application>