トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     setNewTextFormatについて
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
ゲスト
Åê¹ÆNo.14697
投稿日時: 2005-2-2 17:06
setNewTextFormatについて
毎々お世話になっております。

TextFieldのメソッドsetNewTextFormatについて質問があります。

例えば、
TextFormatのcolorプロパティに黒(0x000000)を設定し、
setNewTextFormatを用いてTextFieldにTextFormatを設定します。
TextFieldのタイプは「テキスト入力」です。

そこで、

abcdefghijklmnopqrstu

という文字列がTextFieldに表示されているとした場合に、
dの後ろに文字を入力すると、赤色で入力されてしまいます。
一番最後(uの後)に入力した場合は黒で入力されます。

この例の場合、dの後ろに入力した文字は黒になってほしいのですが、
赤になってしまうのは何か設定が間違っているのでしょうか?
設定があっているとすれば解決方法はございますでしょうか?
よろしくお願いします。

以下、サンプルコードです。
メインタイムラインにテキストフィールド(txtTest)と
ボタン(btnTest)を配置しています。
スクリプトもメインタイムラインに記述しています。
ボタンクリックでTextFormatのcolorプロパティを
黒と赤のトグルで設定しています。

var bFlag:Boolean = true;
var nColor:Number = 0x000000;
 
this.txtTest.border = true;
this.txtTest.type = "input";
this.txtTest.autoSize = "left";
 
this.btnTest.onRelease = function()
{
  bFlag = !bFlag;
	
  var newTF:TextFormat = new TextFormat();
  newTF.color = bFlag ? 0x000000 : 0xFF0000;
  txtTest.setNewTextFormat( newTF );
}
ゲスト
Åê¹ÆNo.14734
投稿日時: 2005-2-3 13:36
Re: setNewTextFormatについて
こんにちは。

引用:
この例の場合、dの後ろに入力した文字は黒になってほしいのですが、
赤になってしまうのは何か設定が間違っているのでしょうか?

そのような仕様のようですね。コードは間違っているわけではないようです。

引用:
設定があっているとすれば解決方法はございますでしょうか?

入力カーソルの一つ前のTextFormatが継承されるようですから、入力時に最初の文字のTextFieldを変えてやればうまくいきました。
以下コードです。

var bFlag:Boolean = true;
var nColor:Number = 0x000000;
 
this.txtTest.border = true;
this.txtTest.type = "input";
this.txtTest.autoSize = "left";
 
this.btnTest.onRelease = function(){
     bFlag = !bFlag;
     txtTest.setNewTextFormat(getFixedFormat());
};

txtTest.onChanged = function() {
     this.setTextFormat(Selection.getCaretIndex() - 1, Selection.getCaretIndex(), getFixedFormat());
};

function getFixedFormat():TextFormat
{
     var newTF:TextFormat = new TextFormat();
     newTF.color = bFlag ? 0x000000 : 0xFF0000;
     return newTF;
}

ペーストした文字に含まれるTextFormatが無視されるという問題は残っております。
ゲスト
Åê¹ÆNo.14741
投稿日時: 2005-2-3 14:40
Re: setNewTextFormatについて
マツダショウタ様、ありがとうございます。

onChangedハンドラで1文字ずつTextFormatを設定すれば
できるのですね。
なるほど!と思いました。

しかし、ちょっと困ったことが起こりました。

abcdefghijka

という文字列が表示されていて、入力色が黒の場合、
fを削除するとeが黒になってしまいます。

マツダショウタ様のコードを参考にもう少し考えてみます。
文字数を見ればなんとかなるかなぁと思っております。

引用:

ペーストした文字に含まれるTextFormatが無視されるという問題は残っております。


ペーストに関しては頭にありませんでした
これもあわせて考えてみます。
ゲスト
Åê¹ÆNo.14742
投稿日時: 2005-2-3 15:24
Re: setNewTextFormatについて
引用:
しかし、ちょっと困ったことが起こりました。

abcdefghijka

という文字列が表示されていて、入力色が黒の場合、
fを削除するとeが黒になってしまいます。

あらら、申し訳ありません、私のテスト不足でした。訂正版を以下に載せておきます。(ガチガチに固めただけですが

var bFlag:Boolean = true;
var nColor:Number = 0x000000;
 
this.txtTest.border = true;
this.txtTest.type = "input";
this.txtTest.autoSize = "left";
this.txtTest.lengthCache = this.txtTest.text.length;
 
this.btnTest.onRelease = function() {
     bFlag = !bFlag;
     txtTest.setNewTextFormat(getFixedFormat());
     trace(bFlag? "Black" : "Red"); 
};

txtTest.onChanged = function() {
     if(Key.getCode() != Key.BACKSPACE && Key.getCode() != Key.DELETEKEY && Math.abs(this.lengthCache - this.text.length) == 1) {
          this.setTextFormat(Selection.getCaretIndex() - 1, Selection. getCaretIndex(), getFixedFormat());
     }
     this.lengthCache = this.text.length;
};

function getFixedFormat():TextFormat
{
     var newTF:TextFormat = new TextFormat();
     newTF.color = bFlag ? 0x000000 : 0xFF0000;
     return newTF;
}

この手の問題は包括的に解決するのが難しいので、試行錯誤を積み重ねなければならないと思います。他の人の参考にもなりますので、また何かあれば書き込みなさって下さい。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops