ActionScript3.0覚書 文字列とバイト数

通常のTextFieldだと、複数行指定してやれば勝手に改行してくれる。
だが、ラジオボタンコントロールのラベルは改行してくれない・・・

で、ラジオボタンのTextFieldのwordWrapプロパティとかをいじればよいということ。

FLASH-JP.COM RadioButton コンポーネントの文字を自動改行させたい

だけど、そもそも指定バイト数で折り返したいときってどうすんの?と思って検索したところ、ありがたい記事発見。

yoshiweb.NET-blog ActionScriptで文字判定

この記事を元にチャレンジ。

checkCodeは参照先そのまま。
checkHalfは、バイト数を返すように変更。
getStrBytesTotalは、checkHalfの変更に伴い変更。
setReturnCodeは、オリジナル。

// 指定バイト数(default=60)で折り返し
function setReturnCode(str:String, max:int=60):String {
	var cnt:int = 0;
	var len:int = str.length;
	var s:int = 0
	var e:int = 0
	var buf:String = '';
	for (e = 0 ; e < len ; e++ ) {
		cnt += checkHalf(str.substr(e, 1));
		if (cnt >= max) {
			if (buf.length > 0) {
				buf += '\r';
			}
			buf += str.substr(s, e-s+1);
			s = e+1;
			cnt = 0;
		}
	}
	if (buf.length > 0) {
		buf += '\r';
	}
	buf += str.substr(s, e-s+1);
	return buf;
}

// 文字列のバイト数を求める
function getStrBytesTotal(str:String):int {
	var cnt:int = 0;
	var len:int = str.length;
	while (len--) {
		cnt += checkHalf(str.substr(len, 1));
	}
	return cnt;
}

// 指定文字のバイト数を求める→全角なら2、半角なら1を返す
function checkHalf(str:String):int{
	return (checkCode(str, 0x00, 0x7f) || checkCode(str, 0xFF61,0xFF9F)) ? 1 : 2; 
}

// 全半角判定→全角ならfalse、半角ならtrueを返す
function checkCode(str:String, min:uint, max:uint) {
	var len:uint = str.length;
	while (len--) {
		var num:uint = str.substr(len, 1).charCodeAt(0);
		if (num < min || num > max) {
			return false;
			break;
		}
	}
	return true;
}

とりあえず、いい塩梅にはなりました。
あんばいって塩梅って書くんだねぇ・・・よい塩加減なのね)

Add a Comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください