■ 質問はここへ ■

237 にジャンプ
No. 237投稿者: Boogie日付: 2001/09/20 07:59:21
題名 : アンダーライン作成マクロ

QXユーザーズ・マクロ・ヘルプにある,まんぼう さんの「簡易アンダーライン作成マクロ」が欲しいのですが見付けられません。

文字列を選択して,マクロを実行するとその文字列の下に「^^^^^^^^^^^」が入力されるだけで結構ですので,どなたかマクロを作っていただけないでしょうか。

宜しくお願いします。

No. 238 (237へのコメント)投稿者: かぶねこ HP日付: 2001/09/20 14:26:34
題名 : Re:アンダーライン作成マクロ

まんぼう さんのサイトからQXマクロのコーナーがなくなったみたいですねえ。
こんなんでいいでしょうか。テスト不足かもしれません。あと1行長さなどは環
境にあわせて変更してください。

'すぐ下に1行追加でアンダーライン 2001/09/20 Kabuneko

proc main
if @hwnd = 0 then exit proc
if @Select = 0 then exit proc
dim m, n
'選択文字列のバイト数を取得
m = lenb(@TextSelect$)
'選択された文字列が長すぎるか1行が長すぎるとき中止
if m > 80 or lenb(@TextCr$(@Line)) > 80 then exit proc
@UndoBlock = 1
'行のなかでの選択開始位置を取得
n = instrb(@TextCr$(@Line),@TextSelect$)
@Select = 0
@MoveEndLine
@CharReturn2
@Insert space$(n-1)
@Insert string$(m,`~`)
@UndoBlock = 0
end proc

No. 239 (238へのコメント)投稿者: かぶねこ HP日付: 2001/09/20 14:29:09
題名 : Re^2:アンダーライン作成マクロ

追加です。アンダーラインに使う文字(半角限定)はこの行を好みに
合わせてください。

> @Insert string$(m,`~`)

`~` を `^` に、などです。

No. 240 (239へのコメント)投稿者: かぶねこ HP日付: 2001/09/20 14:55:03
題名 : Re^3:アンダーライン作成マクロ

選択状態が対応範囲外のときの処理とか、いちおう少し行儀よくして
みました。こっちを使ってください。(最初からちゃんと条件分岐が
考えられれば、何度も書き込まずにすむんですが、なかなか。)

'すぐ下に1行追加でアンダーライン 2001/09/20 Kabuneko

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
'選択文字列のバイト数を取得
m = lenb(@TextSelect$)
@UndoBlock = 1
'行のなかでの選択開始位置を取得
n = instrb(@TextCr$(@Line),@TextSelect$)
@Select = 0
@MoveEndLine
@CharReturn2
@Insert space$(n-1)
@Insert string$(m,`^`)
@UndoBlock = 0
end proc

No. 241 (240へのコメント)投稿者: Boogie日付: 2001/09/20 18:01:55
題名 : Re^4:アンダーライン作成マクロ

かぶねこ さん,マクロありがとうございます。

ちょっと,まごつきました。実は,タブを多用しておりまして。
スペースに変換してから実行すると完璧です。

そうですよね,タブが入ると正確な位置を取得できないですものね。
て,本当はよく解っていない。σ(^_^;)?
でも,私の場合,スペースを連打するのが面倒なのでタブを使っているだけで,
全然,問題ありません。

No. 242 (241へのコメント)投稿者: かぶねこ HP日付: 2001/09/20 18:58:10
題名 : Re^5:アンダーライン作成マクロ

>そうですよね,タブが入ると正確な位置を取得できないですものね。

カーソルの x 位置なら簡単に取得できるんですが、選択文字列の場合、カーソ
ル位置はそのうちの前だったり後ろだったりします。

タブに対応する方法もたぶんありますが、面倒でマクロも長くなりそうです。タ
ブ幅が書式依存なので、アンダーラインをテキストでつけるにはスペースのほう
が安心かと思います。

タブをスペースに変換するには BlockToSpace 機能を選択時の右クリックメニュ
ーに追加すると便利ですよ。QXフォルダの QXWKEY.INI (これがキー定義ファ
イル)の Popup "編集" のところに

	"タブをスペースへ"		BlockToSpace
	"スペースをタブへ"		BlockToTab

を追加してQXを再起動します。Boogie さんはすでにご存知かもしれませんが、
ここを読んでいるかもしれない他のかたへの情報としても書いておきます。

ともかく、マクロが役に立ったようでよかったです。

No. 243 (242へのコメント)投稿者: noris日付: 2001/09/20 21:45:45削除済 返信
題名 : Re^6:アンダーライン作成マクロ
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

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

No. 245 (244へのコメント)投稿者: かぶねこ HP日付: 2001/09/21 00:03:04
題名 : Re^7:アンダーライン作成マクロ

noris さん、こんにちは。

> '行のなかでの選択開始位置を(バイト数で)取得
> nb = @SelectStartBytePosCr
> '行のなかでの選択終了位置を(バイト数で)取得
> mb = @SelectEndBytePosCr

わ、そういうのもあったんですね。それを使うと instrb とか余分なことしなく
てもいいし、ずっとシンプルになります。手もとのも変更しとこっと。(またマ
クロのコマンドをろくに知らないことがバレましたよ、とほほ。でもこんなんで
もマクロ作ったりしてますので、みなさんもぜひ。)

>行頭のタブに対応してますが、加えて、タブ含みの文字列にもアンダーライ
>ン引けるようになってます。

こだわりですね。

No. 248 (245へのコメント)投稿者: noris HP日付: 2001/09/21 07:38:49
題名 : Re^8:アンダーライン作成マクロ

> またマクロのコマンドをろくに知らないことがバレましたよ、とほほ。

私も実は今回「カーソルの x 位置なら簡単に取得できる」という かぶねこ
さんのお言葉を読むまで @XDisplay のことが分かってなかったので……
(正確には、@BytePos との違いが分からず、どう使い分けるのかな、と不
思議に思ってました)

マクロは浅いところも奥深い? ですね〜。

でもおっしゃるとおり私のように分からない者も分からないなりに作れちゃっ
たりするもので。思えば最初の頃はどう作っていいのかさっぱり想像も付か
ず、キーマクロの保存ファイルを参考にして「この全部の頭に @ 付ければ
いいのか? ……あ、動くところは動くな」な〜んて今から考えるとトンデ
モナイ試行錯誤をしてました(^_^;)が、逆に言うと、そんなんでもどうにか
なったんですからQXのマクロの包容力はかなりのものではないかと。皆さ
んにも気軽にお試しいただければ、と思います。

No. 249 (248へのコメント)投稿者: かぶねこ HP日付: 2001/09/21 14:44:14
題名 : Re^9:アンダーライン作成マクロ

お互いに「あ、それ、知らなかったです」なんて言いながらやりとりするのは楽
しいですね。マクロ・メーリングリストのほうがほんとは場所としていいかもし
れませんが、ここは「きっかけがもらえる」のでついここでスレッドができちゃ
います。

またマクロ遊び、ごいっしょしてください。


ヘッダのみ表示
順番に表示(No. 237 から)


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

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