この掲示板はお初になります。皆様宜しくお願いいたします。
> >そうですよね,タブが入ると正確な位置を取得できないですものね。 > > カーソルの x 位置なら簡単に取得できるんですが、選択文字列の場合、 > カーソル位置はそのうちの前だったり後ろだったりします。
タブ桁を変換する自作の関数でも使おうか……と最初思ったんですが、考え てみると、開始と終了の2箇所くらいならカーソル自体動かしちゃうのが手っ 取り早いかもしれませんね。
試しに、(私なんぞがするのはたいへん恐縮ですが)、 かぶねこ さんの作 品をちょっと改変させていただきます。
proc main if @hwnd = 0 then exit proc '1行が長すぎるとき中止 if lenb(@TextCr$(@Line)) > 80 then print "ERROR: 1行が長すぎます" exit proc end if '未選択または改行をまたいでいるときは中止 if @TextSelect$ = "" then print "ERROR: 1行以内で選択してから実行してください" exit proc end if dim m, n, mb, nb @UndoBlock = 1 '行のなかでの選択開始位置を(バイト数で)取得 nb = @SelectStartBytePosCr '行のなかでの選択終了位置を(バイト数で)取得 mb = @SelectEndBytePosCr @Select = 0 '位置を桁数に変換 @BytePosCr = nb : n = @XDisplay @BytePosCr = mb : m = @XDisplay @MoveEndLine @CharReturn2 @Insert space$(n-1) @Insert string$(m-n,`^`) @UndoBlock = 0 end proc
行頭のタブに対応してますが、加えて、タブ含みの文字列にもアンダーライ ン引けるようになってます。……でもどっちにしてもすでにご指摘の通り、 他のところに持っていったらズレちゃうし、意味無いっスね。ごめんなさい、 やってみたくなっちゃっただけなんです(^_^;) |