« Flash® 8 INSPIRATION SCENE Summer Jam | Home | モフモフモフモフ »

Jul 112006

空のテキスト入力フィールドにembedFontsをすると・・・

icon_flash8.jpgテキストフィールドにテキストが入力できないんだけど、そんな仕様だったっけ??
なんかフォーカス自体が消失して割り当てられない感じなのだけど、初めて遭遇。
いやー原因がさっぱりわからなくて猛烈にはまった・・・。
入力フィールドにEmbedFonts使うなってことですか?ごふぅ。
とりあえずprototype使って強制的に解決したけど、なんか釈然としないなぁ・・。

原因を整理。
空の入力textFieldにembedFontsを適応し、textFormatを当てると、textFieldが消失。
(embedFontsしなければ問題なし、また何かしらの文字があらかじめ入っていれば問題なし)

****
追記・・・
色々検証してみたのだけど、フォントを定着させるにはフォーカスがあるタイミングでなにかしらの文字が入った状態でテキストフォーマットとを適応する必要があるっぽい。簡単に

TextField.prototype.osaka9 = function() {
this.embedFonts = true;
var my_fmt:TextFormat = new TextFormat();
my_fmt.font = "_Osaka9";
my_fmt.size = 9;
if (!this.text) {
this.text = " ";
}
Selection.setFocus(this);
this.setTextFormat(my_fmt);
Selection.setFocus(null);
if (this.text == " ") {
this.text = "";
}
};

として解決したが、モー少しいい方法があるとは思う。ちなみにonChangeのタイミングで適応させると文字が連続して入力できなくなる。ちと今更prototypeもどうかと思うので、もう少し考えてみることにする。
正直なところonChangeとかonKillFocusでプログラムからのフィールド内要素の変更をキャッチできればいいのだけど、なんかいい方法ないかなああ?
TextField.text自体をカスタムして、スルーさせるとか?
うーん・・どうかなあ
*****
そういえば「TextField クラスや、Math、Key、Mouse などの静的クラスを拡張することはできません。」というのがあるので、TextFieldの拡張はやっぱprototypeを使うしかないかな・・。
AS3からは拡張できそうな予感がしているけど詳しくはわからないな・・。
ただ一個問題があってmacのfirefoxだと一度入力後、他のフィールドで日本語が入力できなくなる。なんかこれfirefoxについているgoogke検索のフィールドを一度触ると再度入力できるようになるらしいのだけど、この辺はflashというよりもfirefoxのバグ、もしくはfirefoxのpluginのバグのような気がしている・・。一度SWFからフォーカスを消失させればいいということなのだろうか?
なぞだなぁ・・。
ちと参考サイト
静的(static)クラスの拡張
AS 2 and extending TextField class
Macromedia Flash非公式テクニカルノート 2. クラスの使用 - シンプルな例

Leave a comment

Search and Archives