[AS3] TextAreaコンポーネントのテキストを選択できなくする [Edit]

TextAreaコンポーネントには、選択の可否をコントロールするプロパティが見当たりません[*1]。そのため、TextArea.textFieldプロパティで、コンポーネント内のTextFieldインスタンスを操作しなければならなそうです(図001)。

図001■テキストを選択できなくしたTextAreaコンポーネントインスタンス FF0910311_003.gif

いざ試してみると、意外に面倒です(スクリプト001)。コンポーネント内のTextFieldインスタンスは初期化に時間がかかるのか、私の環境(Flash CS4 Professional/Mac OS X.4.11)では2フレーム分ほど待たないとTextField.selectableの設定が確定しませんでした(図002)。

スクリプト001■TextField.selectableプロパティの値が確定するまで設定を繰返す
// フレームアクション
// [ライブラリ]にTextAreaコンポーネントを配置
import fl.controls.TextArea;
var myTextArea:TextArea = new TextArea();
addChild(myTextArea);
myTextArea.text = "sample text";
addEventListener(Event.ENTER_FRAME, setUnselectable);
function setUnselectable(eventObject:Event):void {
  var _txt:TextField = myTextArea.textField;
  trace(_txt.selectable);
  if (_txt.selectable) {
    _txt.selectable = false;
  } else {
    removeEventListener(Event.ENTER_FRAME, setUnselectable);
  }
}

図002■TextField.selectableプロパティの設定値をtrace()関数で確かめる
FF0910311_001.gif

なお、上記スクリプト001は、TextAreaコンポーネントのインスタンスを動的に生成して、タイムラインに配置します。ただし、TextAreaコンポーネントは、予め[ライブラリ]に納めておく必要があります(図003)。

図003■TextAreaコンポーネントは予め[ライブラリ]に納めておく
FF0910311_002.gif


[*1] Flex 3.2のTextAreaコンポーネント(パッケージmx.controls)には、TextArea.selectableプロパティが備わっているようです。

コメント

この記事にコメントを書く

記事に対するテクニカルな質問はご遠慮ください(利用規約)。

その他の記事