EditTextのtextselectionを自分なりに使ってみる

PlaceOptionalTextの新機能盛り付けに着手する余裕が若干ながら出てきたので、

 現状の不具合なんかには目もくれずごてごてと肉付け中であります。

で、サンプル窓に表示されたテキストのうち一部だけを使用したい場合、
 これまではそこからドキュメント上にコピペしておったのですが、そこはもうちょっとどうにかしたい。
そんでEditTextのtextselectionとゆうのを長期にわたりいじくってたのですが、
 いちおうの区切りとして。

【当初の思い込み的見解】
●EditText内”ABCDEF” という文字列に対し、選択された範囲の文字列を読み込む事ができる
●EditText内”ABCDEF” という文字列に対し、任意の部分を選択された状態にする事ができる

【現状判明している実際できる事】

●EditText内の選択された範囲の文字列、及び挿入点を任意の文字列に置換する事ができる

【できたいのにまだできてない、或いは元々できないのかしらな事】

●EditText内”ABCDEF” という文字列に対し、選択された範囲の文字列を読み込む事ができる

というわけで、『EditText内の選択された範囲の文字列、及び挿入点を任意の文字列に置換』して、
置換前と置換後の文字列を比較する事で選択範囲にいた文字列を割り出すテスト。



dlg=
“palette{orientation:’row’ ,text:’test’,\
edit1:EditText{characters:30},\
btn1:Button{text:’カチッと’},\
}”;
win=new Window(dlg);
win.edit1.text=“0123456”; //元のテキスト
dammyObj=”絶対かぶらない文字列”; //選択範囲に置換する文字列
win.btn1.onClick = function(){
textObj=win.edit1.text; //置換前テキスト
win.edit1.textselection=dammyObj; //選択範囲の置換
repObj=win.edit1.text.split(dammyObj); //置換文字列を挟む前後を分割
win.edit1.text=textObj; //表示テキストを元に戻しておく
regObj=new RegExp(repObj[0]+“(.+)”+repObj[1]); //選択されていた部分を抜き出す正規表現
selObj=textObj.replace(regObj,“$1”); //抜き出し
alert(“選択された文字列は\n『 “+selObj+” 』\nであるべきなのです”); //結果
}
win.show();


ボタンをカチッと押すとテキストの選択範囲の文字列をアラートで表示します。

 選択が文字列ではなく挿入点だった場合、元テキスト全体が返ります。

  なんかreplace()じゃなくてmatch()だけでかっちょよく済ませたかったのですが。まだよくわかっていない。
1行だけのEditTextであればこれでいちおう問題ないかと。
 しかし複数行になり改行コード(\n)が混ざると挙動がおかしくなる。


regObj.multiline = true;


 としてみても改善なし。まだよくわかっていない。
なので、本番ではreplaceを諦めて(早い)


selObj=orgObj.slice(repObj[0].length,);
if(repObj[1].length !=0){
selObj=selObj.slice(0,-(repObj[1].length));
}


としてみた。非常にかっこよくないが、なんとか動いたモヨウ。
 もうちょっとエレガントになりませんかこれ。


10.4.24

最後のsliceの行の書き間違いを修正。しつれいおば

コメントを残す

メールアドレスが公開されることはありません。

*