TextSnapshot クラスについて
■TextSnapshot クラスについて
TextSnapshot クラスを使用すると、ムービークリップなどの DisplayObjectContainer オブジェクト内に存在する、すべての静止テキストの文字にアクセスする事ができます。
■静止テキストについて
静止テキストを、動的に生成して配置することはできません。
静止テキストは、Adobe Flash のツールから、静的にステージ上に配置できるオブジェクトの一種です。
Adobe Flash のツールから書き出された後は、配置オブジェクトの状態ではなくなります。
ただし、「選択可能を指定」「デバイスフォントを指定」等の設定をした場合、テキストフィールドとして出力される事があります。
この場合、静止テキストとして文字の取得は可能ですが、その他の機能を利用することはできません。
静止テキストは、テキストフィールドのようにリッチに制御できる機能はありません。
すべての静止テキストの文字には、番号が割り振られている状態となっています。
番号を指定して、文字を取得したり、文字の選択属性を設定することができます。
■TextSnapshot オブジェクトを取得する
TextSnapshot オブジェクトを取得するには、DisplayObjectContainer クラスの textSnapshot プロパティを使用します。
アクセスしたい静止テキストが含まれる、親ムービークリップなどのオブジェクトから呼び出します。
ムービークリップ "mc" から、TextSnapshot オブジェクトを取得する
import flash.text.TextSnapshot;
// ムービークリップ "mc" から、TextSnapshot オブジェクトを取得する
var text_snapshot:TextSnapshot = mc.textSnapshot;
静止テキストの文字を取得する
■静止テキストの総文字数を取得する
静止テキストの総文字数を取得するには、charCount プロパティを使用します。
int 型の数値が得られます。
通常であれば、改行文字は総数に含まれません。
静止テキストが、テキストフィールドとして出力された場合、改行文字が総数に含まれます。
ムービークリップ mc 内の静止テキストの、総文字数を取得する
import flash.text.TextSnapshot;
// ムービークリップ "mc" から、TextSnapshot オブジェクトを取得する
var text_snapshot:TextSnapshot = mc.textSnapshot;
// 静止テキストの総文字数を取得する
var count:int = text_snapshot.charCount;
trace(count);
■範囲を指定して、文字列を取得する
範囲を指定して、文字列を取得するには、getText() メソッドを使用します。
第02引数で指定する終了位置は、取得対象に含まれます。
TextSnapshot.getText( 開始位置 , 終了位置 , [結果に改行文字を含むか?] ) :String
第01引数 | int | 開始位置を指定します。(0 から始まる番号) |
第02引数 | int | 終了位置を指定します。(0 から始まる番号、ここで指定した位置まで) |
第03引数(略可) | Boolean | 戻り値の文字列に改行文字を含みたい場合は true、改行文字を省略する場合は false、デフォルトは false |
戻り値 | String | 開始位置から終了位置までの文字が、文字列として返る |
ムービークリップ mc 内の静止テキストの、 4 文字目から 7 文字目までの文字列を取得する
import flash.text.TextSnapshot;
// ムービークリップ "mc" から、TextSnapshot オブジェクトを取得する
var text_snapshot:TextSnapshot = mc.textSnapshot;
// 静止テキストの 4 文字目から 7 文字目までの文字列を取得する
var str:String = text_snapshot.getText(4,7);
trace(str);
■範囲を指定して、文字の詳細情報を調べる
範囲を指定して、文字の詳細情報を調べるには、getTextRunInfo() メソッドを使用します。
第02引数で指定する終了位置は、取得対象に含まれます。
TextSnapshot.getTextRunInfo( 開始位置 , 終了位置 , [結果に改行文字を含むか?] ) :Array
第01引数 | int | 開始位置を指定します。(0 から始まる番号) |
第02引数 | int | 終了位置を指定します。(0 から始まる番号、ここで指定した位置まで) |
戻り値 | Array | 配列が得られます。(文字の数だけオブジェクトが配列に格納された状態) |
■戻り値
戻り値から配列が得られます。文字の数だけ、オブジェクトが格納されています。
オブジェクトのプロパティは、以下の通りです。
プロパティ名 | 型 | 解説 |
indexInRun | Number | 割り振られている位置(0 から始まる番号) |
selected | Boolean | 選択状態であるか? |
font | String | フォント名 |
color | uint | 文字のカラー情報、ARGB (0xFFFFFFFF) |
height | Number | 文字の高さ |
matrix_a | Number | 文字の行列(Matrix.a プロパティに相当) |
matrix_b | Number | 文字の行列(Matrix.b プロパティに相当) |
matrix_c | Number | 文字の行列(Matrix.c プロパティに相当) |
matrix_d | Number | 文字の行列(Matrix.d プロパティに相当) |
matrix_tx | Number | 文字の行列(Matrix.tx プロパティに相当) |
matrix_ty | Number | 文字の行列(Matrix.ty プロパティに相当) |
corner0x | Number | 文字の境界矩形の左下の x 座標 |
corner0y | Number | 文字の境界矩形の左下の y 座標 |
corner1x | Number | 文字の境界矩形の右下の x 座標 |
corner1y | Number | 文字の境界矩形の右下の y 座標 |
corner2x | Number | 文字の境界矩形の右上の x 座標 |
corner2y | Number | 文字の境界矩形の右上の y 座標 |
corner3x | Number | 文字の境界矩形の左上の x 座標 |
corner3y | Number | 文字の境界矩形の左上の y 座標 |
■文字の境界矩形 (corner 系プロパティ)
corner 系プロパティは、使用フォントが、swf ファイルに埋め込まれている場合にのみ取得可能です。
取得例です。
ムービークリップ mc 内の静止テキストの、すべての文字の詳細情報を取得する
import flash.text.TextSnapshot;
// ムービークリップ "mc" から、TextSnapshot オブジェクトを取得する
var text_snapshot:TextSnapshot = mc.textSnapshot;
// 静止テキストのすべての文字の詳細情報を取得する
var ary:Array = text_snapshot.getTextRunInfo(0,text_snapshot.charCount-1);
// 配列に格納されているオブジェクトのプロパティをすべて出力
var i:int;
var num:int = ary.length;
for(i=0;i < num;i++){
var obj:Object = ary[i];
trace("[" + i + "]");
var key:String;
for(key in obj){
trace(key + ":" + obj[key]);
}
}
■座標を指定して、当たり判定のある文字を取得する
座標を指定して、当たり判定のある文字を取得するには、hitTestTextNearPos() メソッドを使用します。
結果を得るには、使用フォントが、swf ファイルに埋め込まれている必要があります。
TextSnapshot.hitTestTextNearPos( x座標 , y座標 , [円の半径] ) :Number
第01引数 | Number | 当たり判定用の x 座標 |
第02引数 | Number | 当たり判定用の y 座標 |
第03引数(略可) | Number | 円形の当たり判定を追加したい場合指定。円の半径。 (デフォルトは 0) |
戻り値 | Number | 当たり判定のある文字の位置(0 から始まる番号)、当たり判定が無い場合は -1 |
■第01~02引数 当たり判定用座標
第01~02引数で指定した「座標」と、「文字の矩形」とで当たり判定が取られます。(下の図の赤色の矩形)
■第03引数 円の半径
第03引数を指定すると、更に「円形」の当たり判定が追加されます。(下の図の青色の円形)
当たり判定としたい、文字の中心からの距離を指定します。
取得例です。
ムービークリップ mc 内の静止テキストと、マウスカーソルとで当たり判定を取る (Flash 6 以降)
import flash.text.TextSnapshot;
import flash.events.MouseEvent;
// ムービークリップ "mc" から、TextSnapshot オブジェクトを取得する
var text_snapshot:TextSnapshot = mc.textSnapshot;
// マウスカーソルを移動するたびに実行されるイベント
mc.addEventListener(MouseEvent.MOUSE_MOVE , function (e:MouseEvent) :void {
var pos:Number = text_snapshot.hitTestTextNearPos(mc.mouseX,mc.mouseY);
if(pos < 0){
trace("当たり判定なし");
}else{
trace("当たり判定あり:" + pos);
}
});
■文字列を指定して、位置を検索する
文字列を指定して、位置を検索するには、findText() メソッドを使用します。
TextSnapshot.findText( 開始位置 , 検索文字列 , 大文字と小文字の区別するか? ) :int
第01引数 | int | 検索を開始する位置を指定(0 から始まる番号) |
第02引数 | String | 検索したい文字列 |
第03引数 | Boolean | 検索時に大文字と小文字を区別するなら true、区別しないなら false |
戻り値 | int | 見つかった場合文字列の先頭位置(0 から始まる番号)、見つからなかった場合は -1 |
ムービークリップ mc 内の静止テキストから、"abc" という文字列の位置を検索する
import flash.text.TextSnapshot;
// ムービークリップ "mc" から、TextSnapshot オブジェクトを取得する
var text_snapshot:TextSnapshot = mc.textSnapshot;
// 静止テキストから "abc" という文字列の位置を検索する
var pos:int = text_snapshot.findText(0,"abc",true);
if(pos < 0){
trace("見つかりませんでした");
}else{
trace("見つかりました:" + pos);
}
静止テキストの文字の選択属性を設定する
■選択状態の文字の背景色を設定する
選択されている文字の背景を塗りつぶすことができます。
背景色を表示するには、使用フォントが、swf ファイルに埋め込まれている必要があります。
選択状態の文字の背景色を設定するには、setSelectColor() メソッドを使用します。
TextSnapshot.setSelectColor( カラー ) :void
第01引数 | uint | 背景色を指定、RGB (0xFFFFFF) |
戻り値 | void | なし |
ムービークリップ mc 内の静止テキストの、選択状態の文字の背景色を設定する
import flash.text.TextSnapshot;
// ムービークリップ "mc" から、TextSnapshot オブジェクトを取得する
var text_snapshot:TextSnapshot = mc.textSnapshot;
// 選択状態の文字の背景色を設定する
text_snapshot.setSelectColor(0xFF0000);
// すべての文字を選択に変更する
text_snapshot.setSelected(0,text_snapshot.charCount,true);
■範囲を指定して、文字の選択属性を設定する
範囲を指定して、文字の選択属性を設定するには、setSelected() メソッドを使用します。
繰り返してメソッドを呼び出す事で、1文字ごとに選択属性を設定することができます。
第02引数で指定する終了位置は、設定対象に含まれません。
TextSnapshot.setSelected( 開始位置 , 終了位置 , [選択するか?] ) :void
第01引数 | int | 開始位置を指定します。(0 から始まる番号) |
第02引数 | int | 終了位置を指定します。(0 から始まる番号、ここで指定した位置から1つ前まで) |
第03引数 | Boolean | 選択属性を有効に設定するには true、無効に設定するには false |
戻り値 | void | なし |
ムービークリップ mc 内の静止テキストの、選択属性を設定する
import flash.text.TextSnapshot;
// ムービークリップ "mc" から、TextSnapshot オブジェクトを取得する
var text_snapshot:TextSnapshot = mc.textSnapshot;
// 0 文字目から 9 文字目までの選択属性を有効に設定する
text_snapshot.setSelected(0,10,true);
// 3 文字目から 7 文字目までの選択属性を無効に設定する
text_snapshot.setSelected(3,8,false);
// 静止テキストのすべての文字の詳細情報を取得する
var ary:Array = text_snapshot.getTextRunInfo(0,text_snapshot.charCount-1);
// 選択属性を出力テスト
var i:int;
var num:int = ary.length;
for(i=0;i < num;i++){
trace("[" + i + "] selected:" + ary[i].selected);
}
■範囲を指定して、選択状態の文字が存在するか調べる
範囲を指定して、選択状態の文字が存在するか調べるには、getSelected() メソッドを使用します。
第02引数で指定する終了位置は、取得対象に含まれません。
TextSnapshot.getSelected( 開始位置 , 終了位置 ) :Boolean
第01引数 | int | 開始位置を指定します。(0 から始まる番号) |
第02引数 | int | 終了位置を指定します。(0 から始まる番号、ここで指定した位置まで) |
戻り値 | Boolean | 1文字でも選択属性が有効であれば true、すべての文字の選択属性が無効であれば false |
ムービークリップ mc 内の静止テキストの、選択属性を調べる
import flash.text.TextSnapshot;
// ムービークリップ "mc" から、TextSnapshot オブジェクトを取得する
var text_snapshot:TextSnapshot = mc.textSnapshot;
// 0 文字目から 9 文字目までの選択属性を有効に設定する
text_snapshot.setSelected(0,10,true);
// 4 文字目の選択属性を調べる
var selected:Boolean = text_snapshot.getSelected(4,5);
trace(selected);
■選択状態の文字を文字列として取得する
選択状態の文字を文字列として取得するには、getSelectedText() メソッドを使用します。
TextSnapshot.getSelectedText( [結果に改行文字を含むか?] ) :String
第01引数(略可) | Boolean | 戻り値の文字列に改行文字を含みたい場合は true、改行文字を省略する場合は false、デフォルトは false |
戻り値 | String | 選択状態の文字が連結され、文字列として返る |
ムービークリップ mc 内の静止テキストの、選択状態の文字を文字列として取得する
import flash.text.TextSnapshot;
// ムービークリップ "mc" から、TextSnapshot オブジェクトを取得する
var text_snapshot:TextSnapshot = mc.textSnapshot;
// 静止テキストの総文字数を取得する
var num:int = text_snapshot.charCount;
var i:int;
for(i=0;i < num;i+=2){
// 偶数位置の文字の選択属性を有効に設定する
text_snapshot.setSelected(i,i+1,true);
}
// 選択状態の文字を文字列として取得する
var str:String = text_snapshot.getSelectedText();
trace(str);