nod::ぶろぐ:RIA::Flex/AIR/Flash

FlashやFlex,(Ajax),S2Flex2,ActionScript3,yui-frameworks,Akabanaプロジェクトなどのメモ帳

FlexアプリケーションでIMEの制御をしてみる。(2)

前回のエントリーでボタンをクリックしてIMEを切り替えるというのを試しました。
そこで次は、Textフィールドにフォーカスが入るたびに切り替わるものを作ってみました。

IMEcheck.jpg

今度はMacでも動作確認してみたら、ちゃんとIMEが切り替わっていました。(ことえり)

今回はまず最初にTextInputタグでテキスト入力を並べて、focusInでIME制御を行うswfのfunctionを呼び出す
ものを作りました。(main.mxml)
おそらく中国語の入力に使うであろう、"CHINESE"はうまく動作しませんでした。
PCの状態によってはうまくいくかもしれませんが、作成時の環境では動きません。

次にTextInputに属性を加えて、IME制御用のパラメータを指定できるコンポーネントを作りました。
そのサンプルがmain2.mxmlです。

動いた環境:
FlashPlayer 8(WIN 8,0,5,0) windows2000
FlashPlayer 8(MAC 8,0,5,0) MacOS X 10.3.9

参考にしたもの:
Using Flash Player 8 Features in Your Flex 1.5 Application


必要なもの:
LibLoader.mxml
 devnetの記事である、Using Flash Player 8 Features in Your Flex 1.5 Application中の"LibLoader.mxml"が必要です。


今回作ったもの:
IME.mxml
  IMEConversion.swfをラップしたものです。devnetの記事通りに作りました。
IMETextInput.mxml
  TextInputに属性(useIME/IMEMode)を加えたカスタムコンポーネントです。
main.mxml
  IMEConversion.mxmlを使って、FocusInで切り替えるサンプルです。
main2.mxml
  IMETextInputを使った例です。

IMEConversion2.zip

今回わからなかったこと:
中国語のIMEに切り替える方法。


Posted by nod at 2005年08月15日 01:21 | コメント (5) | トラックバック (0) | Clip!! | Clip!! | このエントリーを含むはてなブックマーク |digg it! |del.icio.us it!

この記事に対するコメント

こんにちは
Flexでwebアプリなんかを作ろうとしていて、
ime制御にぶちあたってしまいました。。。
ネットを見ていましたら、当ブログにわかりすくime制御の説明がされていることを発見いたしました。
拝見させていただき、早速、ime制御をしようと実装しておりましたが、フォルダ構成によってime変換用のfunctionが効かなくなりました。

質問なのですが、main.mxmlとIME.mxmlは同じ階層に入れないといけないのでしょうか。
現状をご説明しますと、
以下のようなフォルダ構成にしています。
*testA、testBは同階層
testA
  ―main.mxml (以下の通りIME.mxmlをインクルード)

testB
  ―IME.mxmlとその他swf、LibLoader。
*ネームスペースでコンパイル時にエラーあったので、
*修正は致しました。
IMEConversion.swfは読み込んでいそうですが、main.mxmlで
ime制御が不可です。

同階層にIMEとmainを配置していれば、制御可能なのは
わかりましたが、階層がちがってくると現状では
ime制御ができておりません。
打開する方法がございましたら、ご教授いただけますでしょうか。

Posted by: webアプリに挑戦 at 2006年08月04日 15:39

webアプリに挑戦さん

はじめまして。
Flexの実行環境はFlex 1.5だと考えていいのでしょうか?

Flex2.0はコンポーネントでプロパティと指定すればよいのですが、1.5だとそのようにはいきませんね。

ちょっと見てみます。


Posted by: nod at 2006年08月04日 18:18

ご回答ありがとうございます。

はい、ご指摘の通りFlex1.5を使用しております。
2.0だと悩まなくてよいのですが。。
そんな時にここのブログを拝見しまして、
そのような方法が可能であるのかと感動しておりました。

imeの制御ができることはわかったものの、
モジュールの階層が異なってきたときに
どのようにすればよいのか困っております。

以下のようなフォルダ構成の場合を想定しております。
*testA、testB、testCは同階層
testA
  ―main1.mxml (IME.mxmlをインクルード)

testB
  ―main2.mxml (IME.mxmlをインクルード)

testC
  ―IME.mxmlとその他swf、LibLoader。

*当初main1.mxml、main2.mxmlに以下のようにインクルードしておりましたが、
どうもうまくいっておりません。
*<ime:IME xmlns:ime="testC.*" id="ime"/>

その他試行錯誤しておりますが、
成功にいたっておりません。

上記のような場合にimeの制御を行うためにはどのようにすればよいか、
ご教授いただけますでしょうか。


Posted by: webアプリに挑戦さん at 2006年08月04日 20:55

ご回答ありがとうございます。

はい、ご指摘の通りFlex1.5を使用しております。
2.0だと悩まなくてよいのですが。。
そんな時にここのブログを拝見しまして、
そのような方法が可能であるのかと感動しておりました。

imeの制御ができることはわかったものの、
モジュールの階層が異なってきたときに
どのようにすればよいのか困っております。

以下のようなフォルダ構成の場合を想定しております。
*testA、testB、testCは同階層
testA
  ―main1.mxml (IME.mxmlをインクルード)

testB
  ―main2.mxml (IME.mxmlをインクルード)

testC
  ―IME.mxmlとその他swf、LibLoader。

*当初main1.mxml、main2.mxmlに以下のようにインクルードしておりましたが、
どうもうまくいっておりません。
*<ime:IME xmlns:ime="testC.*" id="ime"/>

その他試行錯誤しておりますが、
成功にいたっておりません。

上記のような場合にimeの制御を行うためにはどのようにすればよいか、
ご教授いただけますでしょうか。


Posted by: webアプリに挑戦さん at 2006年08月04日 20:57

webアプリに挑戦さんへ

testCをtestA以下においた場合はいかがでしょう?

testA--main.mxml(IME.mxmlをインクルード)
|-testC
|-IME.mxmlとその他swf,LibLoader

testB,testAともに参照したい場合は、
testCを${アプリルート}/WEB-INF/flex/user_classes/
いかに置くという手もあります。

またはcompcなどでswcにするという方法もあります。
いかがでしょう?

Posted by: nod at 2006年08月07日 19:10

コメントを投稿する




保存しますか?



この記事のトラックバックURL


この記事に対するトラックバック

この記事に対するトラックバックはまだありません。



Flex.org - The Directory for Flex Get Adobe Flash Player Made with dreamweaverMade with fireworksPowered by Movable Type 3.36Powered by Wandering Wind
Copyright : [Articles] (C) nod::ぶろぐ:RIA::Flex/AIR/Flash All Rights Reserved.
[Comments/Trackbacks] ... Authors of those have rights.