3


1

私はいくつかの古いDOSやメインフレーム端末をFlexでエミュレートする必要があります。 例えば下の画像のようなものです。

画像:https://i.stack.imgur.com/qFtvP.png [代替テキスト]

異なる色のテキストは十分に簡単ですが、黄色の背景などの異なる背景色を設定する機能は、標準のFlashテキストの機能を超えています。

私はまた、特定の場所にテキストを入力して「端末」までテキストをスクロールできるようにする必要があるかもしれません。 どのように私はこれを攻撃するのですか? それとももっと良いことに、この種のことのための既存のコード/コンポーネントはありますか?

2 Answer


2


背景が必要な領域の最初と最後の文字の矩形を取得するには、http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/text/TextField.html [TextField.getCharBoundaries]を使用してください。 これらの長方形から、エリア全体に広がる長方形を作成できます。 これを使用して、テキストフィールドの後ろ、またはテキストフィールドの親に配置された `Shape`に背景を描画します。

あなたが例を頼んだ_Update_、これは文字の範囲から長方形を得る方法です:

var firstCharBounds : Rectangle = textField.getCharBoundaries(firstCharIndex);
var lastCharBounds  : Rectangle = textField.getCharBoundaries(lastCharIndex);

var rangeBounds : Rectangle = new Rectangle();

rangeBounds.topLeft = firstCharBounds.topLeft;
rangeBounds.bottomRight = lastCharBounds.bottomRight;

あなたが全線のための長方形を見つけたいなら、あなたは代わりにこれをすることができます:

var charBounds : Rectangle = textField.getCharBoundaries(textField.getLineOffset(lineNumber));

var lineBounds : Rectangle = new Rectangle(0, charBounds.y, textField.width, firstCharBounds.height);

背景を描画したいテキスト範囲の境界があるとき、テキストフィールドの親の `updateDisplayList`メソッドでこれを行うことができます(テキストフィールドが[0、0]に位置し、白であると仮定します) text、そして `textRangesWithYellowBackground`は黄色い背景を持つべきテキスト範囲を表す長方形の配列です:

graphics.clear();

// this draws the black background
graphics.beginFill(0x000000);
graphics.drawRect(0, 0, textField.width, textField.height);
graphics.endFill();

// this draws yellow text backgrounds
for each ( var r : Rectangle in textRangesWithYellowBackground )
    graphics.beginFill(0xFFFF00);
    graphics.drawRect(r.x, r.y, r.width, r.height);
    graphics.endFill();
}


1


フォントは幅と高さが固定されているので、背景のビットマップを動的に作成するのは難しくありません。おそらく最速で最も簡単な方法です。 実際、正しくサイズ変更した場合は、1文字につき1ピクセルの伸縮しかありません。

文字の背景に合わせてピクセルに色を付けます。

-アダム