Программно добавить символ в TextInput, когда Hiragana IME активен - PullRequest
1 голос
/ 18 марта 2011

Я бы хотел иметь возможность программно добавлять символ в 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>

Ответы [ 2 ]

2 голосов
/ 18 марта 2011

Сначала посмотрите на эту ссылку: http://livedocs.adobe.com/flex/3/html/help.html?content=18_Client_System_Environment_6.html

Убедитесь, что у вас включен IME и правильные настройки.Во-вторых, какую версию flex вы используете?У вас есть шрифт, который загружен в приложение, которое может обрабатывать язык?

0 голосов
/ 31 марта 2011

подал ошибку - посмотрим, что скажет Adobe.

...