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

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     テキストの長さによってフォントサイズを変更したいです。
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
silverdrop
Åê¹ÆNo.8128
投稿日時: 2004-6-8 16:57
新米
居住地:
投稿: 5
使用環境:
Win2000
Flash MX
IE6.0
テキストの長さによってフォントサイズを変更したいです。
はじめまして。silverdropと申します。
よろしくお願いします。

外部テキストデータを読み込んで表示させようとしています。
そのテキストは、文字数が多い場合と少ない場合があるのですが、
テキストフィールドの幅は決まっていて、それでもできるだけ大きく表示したいため、
テキストが長い場合にはフォントサイズを小さくして全部表示できるようにしたいのです。

また、こちらの都合で恐縮なのですが、
他の人がデザイン変更のためテキストフィールドの位置や幅、
フォントの種類やサイズを変更することがあります。
その際にはなるべくActionScriptは変更しなくても良いようにしたいのです。


そこで、あらかじめフォントの種類やサイズ、テキストフィールド幅が決まってる
ダイナミックテキストフィールドをステージ上に設置しておいて、
その中で表示されるフォントサイズが変わるようにしたいと考えました。

TextField.getTextFormat() で
ステージ上に設置されているテキストフィールドのフォーマットを取得し、
TextFormat.getTextExtent (text) で
そのフォーマットを適用した場合の該当テキストの文字列のサイズを
取得して必要なフォントサイズを出す方向で考えてみました。

しかし、うまくいかなかったので調べたところ、FlashPlayer ver.6では
getTextFormat()が正しい値を返さない という情報を発見しました。

もし、文字数に応じてフォントサイズを変更するとなると、
フォントの種類によって表示長さが変わってしまうので
使用フォントが制限される、ことになりますよね。
できれば制限しなくてもできる方法を探したいのです。

FlashPlayer ver.6での表示を想定していますが、
どうしてもうまくいかなければver.7も考えています。

良い方法がありましたら、どうか教えてください。
どうぞよろしくお願いします。
makinux
Åê¹ÆNo.8154
投稿日時: 2004-6-9 12:19
半人前
居住地:
投稿: 50
使用環境:
WinXP;Flash MX2004 Pro;apache1.3;MySQL 4.0.13-nt;PHP Version 4.3.2
Re: テキストの長さによってフォントサイズを変更したいです。
はじめまして。マキと申します。

世の中には同じようなことを必要とする人がいますね

そっくり同じ機能を作ってました。
ver.7しかないので、FlashPlayer ver.6で動くかどうかはわかりませんが参考までに。

引用:

//テキストフィールドの幅に合わせてフォントサイズ変更
//txt:適用txtのパスストリング num:末端位置微調整用
function xAutoFontSize(txt,num){
var txt_fmt=eval(txt).getTextFormat();
var tmp=txt_fmt.getTextExtent(eval(txt).text);
while((eval(txt)._width-num)<tmp.width){
txt_fmt.size--;
eval(txt).setTextFormat(txt_fmt);
txt_fmt=eval(txt).getTextFormat();
tmp=txt_fmt.getTextExtent(eval(txt).text);
}
}


ついでによくある要望で、改行を許したくないが、複数行で表示したい場合の対処方法も載せときます。こちらも参考までに
引用:

hogehoge_txt.onChanged=function(){
this.text=this.text.split("\r").join("");
}

silverdrop
Åê¹ÆNo.8165
投稿日時: 2004-6-9 16:30
新米
居住地:
投稿: 5
使用環境:
Win2000
Flash MX
IE6.0
Re: テキストの長さによってフォントサイズを変更したいです。
マキさん、ありがとうございます。

「テキストフィールドの幅に合わせてフォントサイズ変更」を試してみました。

引用:

//テキストフィールドの幅に合わせてフォントサイズ変更
//txt:適用txtのパスストリング num:末端位置微調整用
function xAutoFontSize(txt,num){
var txt_fmt=eval(txt).getTextFormat();
var tmp=txt_fmt.getTextExtent(eval(txt).text);
while((eval(txt)._width-num)<tmp.width){
txt_fmt.size--;
eval(txt).setTextFormat(txt_fmt);
txt_fmt=eval(txt).getTextFormat();
tmp=txt_fmt.getTextExtent(eval(txt).text);
}
}


デバイスフォントでは正常に動作したのですが、
デバイスフォント以外のフォントでは、はみ出してしまっていました。

デバイスフォント以外のフォントではうまくいかないのでしょうか?
それともうちの環境がおかしいのでしょうか・・・?
makinux
Åê¹ÆNo.8167
投稿日時: 2004-6-9 16:53
半人前
居住地:
投稿: 50
使用環境:
WinXP;Flash MX2004 Pro;apache1.3;MySQL 4.0.13-nt;PHP Version 4.3.2
Re: テキストの長さによってフォントサイズを変更したいです。
末端位置微調整用のnumをおおきくすれば、はみ出しは解消されるはずです。
埋め込みであってこの関数は使えるので、おそらくこの対処で大丈夫かとは思います。

例としては
test.text="近鉄近鉄近鉄近鉄近鉄近鉄近鉄近近鉄近鉄近鉄近鉄近近鉄近鉄近";
xAutoFontSize("test",70);
こんな感じで使います。
この70というところを調整してみてください
silverdrop
Åê¹ÆNo.8169
投稿日時: 2004-6-9 17:53
新米
居住地:
投稿: 5
使用環境:
Win2000
Flash MX
IE6.0
Re: テキストの長さによってフォントサイズを変更したいです。
なるほど、numを大きくするのも方法の1つですね。
でも、等幅フォントと等幅でないフォントでは差が結構大きいですね。うーん。

引用:
埋め込みであってこの関数は使えるので、おそらくこの対処で大丈夫かとは思います。

すみません、「埋め込み」というのは、どういうことですか?
makinux
Åê¹ÆNo.8170
投稿日時: 2004-6-9 19:49
半人前
居住地:
投稿: 50
使用環境:
WinXP;Flash MX2004 Pro;apache1.3;MySQL 4.0.13-nt;PHP Version 4.3.2
Re: テキストの長さによってフォントサイズを変更したいです。
引用:
すみません、「埋め込み」というのは、どういうことですか?

テキストフィールドにフォントを埋め込むことです。
フォントを埋め込むと意図したフォントをテキストフィールドにアンチエイリアスがかかった状態で表示できます。
説明不足でしたね。
silverdrop
Åê¹ÆNo.8185
投稿日時: 2004-6-10 15:59
新米
居住地:
投稿: 5
使用環境:
Win2000
Flash MX
IE6.0
Re: テキストの長さによってフォントサイズを変更したいです。
フォントを埋め込んで試してみたのですが、埋め込んでいない状態と同じ値が返ってきてしまいました。
ちなみに「MS Pゴシック」などでも試してみたのですが・・・
すみません、どのフォントで可能でしたか、教えてください。お願いします。
makinux
Åê¹ÆNo.8189
投稿日時: 2004-6-10 18:09
半人前
居住地:
投稿: 50
使用環境:
WinXP;Flash MX2004 Pro;apache1.3;MySQL 4.0.13-nt;PHP Version 4.3.2
Re: テキストの長さによってフォントサイズを変更したいです。
基本的にはどのフォントでも可能でした。
どのようなフォントであれ、numを調整すれば使えるはずです。
フォントによっては結構ずれるので同じ値ではうまくいかないと思いますので、適宜調整してみてください。
引用:

silverdropさんは書きました:
フォントを埋め込んで試してみたのですが、埋め込んでいない状態と同じ値が返ってきてしまいました。
ちなみに「MS Pゴシック」などでも試してみたのですが・・・
すみません、どのフォントで可能でしたか、教えてください。お願いします。
youich
Åê¹ÆNo.8190
投稿日時: 2004-6-10 19:48
職人
居住地: kobe
投稿: 349
使用環境:
Tiger
Re: テキストの長さによってフォントサイズを変更したいです。
引用:

TextField.getTextFormat() で
ステージ上に設置されているテキストフィールドのフォーマットを取得し、
TextFormat.getTextExtent (text) で
そのフォーマットを適用した場合の該当テキストの文字列のサイズを
取得して必要なフォントサイズを出す方向で考えてみました。

しかし、うまくいかなかったので調べたところ、FlashPlayer ver.6では
getTextFormat()が正しい値を返さない という情報を発見しました。

getTextExtentがまともな値を返さないようですね、、、
でもその代わりにTextField.textwidth,TextField.textHeightを使って計算すればいいんじゃないかと思います。
MARGIN = 2;
function regulateFormat(field) {
	if (field.text == "") {
		return;
	}
	var w = field._width-MARGIN;
	var h = field._height-MARGIN;
	var tf = field.getTextFormat();
	var i = tf.size;
	while (i>0) {
		tf.size = i;
		field.setTextFormat(tf);
		if (w>te.textWidth && h>te.textHeight) {
			break;
		}
		i--;
	}
}

で、、silverdropさんの境遇とはすこし変わりますが、いろいろ試してみてたら、MXで作ったものは1pxのfontでも
オーサリング、ブラウザー上共正しく計算できるけどMX2004で
ver6セッティングで製作すると、1pxのfontを計算するとブラウザー上ではおかしな結果になります。
1pxという値を考える場面などないと思いますけど、なんか無気味(^^;

http://as-coders.nct.jp/yo/ff/addformat.html
http://as-coders.nct.jp/yo/ff/addformat.fla.zip


----------------
- yo

youich
Åê¹ÆNo.8262
投稿日時: 2004-6-13 3:12
職人
居住地: kobe
投稿: 349
使用環境:
Tiger
Re: テキストの長さによってフォントサイズを変更したいです。
引用:

getTextExtentがまともな値を返さないようですね、、、
でもその代わりにTextField.textwidth,TextField.textHeightを使って計算すればいいんじゃないかと思います。
MARGIN = 2;
function regulateFormat(field) {
	if (field.text == "") {
		return;
	}
	var w = field._width-MARGIN;
	var h = field._height-MARGIN;
	var tf = field.getTextFormat();
	var i = tf.size;
	while (i>0) {
		tf.size = i;
		field.setTextFormat(tf);
		if (w>te.textWidth && h>te.textHeight) {
			break;
		}
		i--;
	}
}


まともな値を返さないっていうのは、ver6でのことを指して書いてたのですが、
ふとUIObjectExtensions.asを見ると,getTextExtent2なんていうのがあって
おなじくTextField.textWidth,Heightで値をとってますね、
MX2004でもまともじゃないのかな(^^l
// add a better text measuring method to TextFormat.
// the current one is broken in Flash
	TextFormat.prototype.getTextExtent2 = function(s)
	{
		var o = _root._getTextExtent;
	
		if (o == undefined)
		{
			_root.createTextField("_getTextExtent", -2, 0, 0, 1000, 100);
			o = _root._getTextExtent;
			o._visible = false;
		}
		_root._getTextExtent.text = s;
		var z = this.align;
		this.align = "left";
		_root._getTextExtent.setTextFormat(this);
		this.align = z;
		return {width: o.textWidth, height: o.textHeight};
	}



----------------
- yo

(1) 2 »
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

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