■ 質問はここへ ■

前へ 次へ
No. 244 (242へのコメント)投稿者: noris HP日付: 2001/09/20 22:24:43
題名 : Re^6:アンダーライン作成マクロ

この掲示板はお初になります。皆様宜しくお願いいたします。

> >そうですよね,タブが入ると正確な位置を取得できないですものね。
>
> カーソルの 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

行頭のタブに対応してますが、加えて、タブ含みの文字列にもアンダーライ
ン引けるようになってます。……でもどっちにしてもすでにご指摘の通り、
他のところに持っていったらズレちゃうし、意味無いっスね。ごめんなさい、
やってみたくなっちゃっただけなんです(^_^;)

次へ
現在の既読番号は 0  既読を


メールアドレスを表示するにはURLの後ろに &m=bb6a9a3f をつけてください。
ユーザー フォーラム一覧

http://www2k.biglobe.ne.jp/~araken/
http://0ban.com/araken/