■ 質問はここへ ■

990 にジャンプ
No. 984投稿者: Kyoko日付: 2003/07/20 11:55:36
題名 : 「文書全選択」のマクロ記述

こんにちは。

半角英数や括弧の前後に半角スペースを挿入する Si さんのマクロを教えていただき快適
に使っています。
ひとつ、デフォルトでは選択行 or カーソルのある 1 行に実行される設定なのを、文書
全体に実行される設定にしたいと考えています。
(現在は文書を全選択してからマクロを実行しています)

proc main の最初のほうに Select all のような記述を加えればいいかと思うんですが、
その記述が分かりません…(すみません)。

どのような記述を加えたら良いのでしょうか。よろしくお願いします。

なお、見よう見まねで「選択行 or カーソルの 1 行に実行」らしき記述を試しに削除し
て実行したところ、消してはいけない部分を消してしまったようでカーソルが点滅状態で
QX 操作不能に陥りました^^;。タスクマネージャから QX を終了させてしのぎましたが、こ
ういう時にマクロを中断させることは出来るでしょうか?
Esc キーなどにも反応しない場合、どうしようもないでしょうか。

No. 985 (984へのコメント)投稿者: CINEPHILE日付: 2003/07/20 20:57:41
題名 : Re:「文書全選択」のマクロ記述

>ひとつ、デフォルトでは選択行 or カーソルのある 1 行に実行される設定なのを、文書
>全体に実行される設定にしたいと考えています。
>(現在は文書を全選択してからマクロを実行しています)

 @BlockSelectAll で全選択できますが、常に全選択して実行するようにして
しまうと不都合がありませんか? 巨大なファイルを編集している場合や、引
用部分はいじりたくない場合、等々。通常 Ctrl+A で全選択することができる
ので、現状のまま使用した方がいいのでは?

>なお、見よう見まねで「選択行 or カーソルの 1 行に実行」らしき記述を試しに削除し
>て実行したところ、消してはいけない部分を消してしまったようでカーソルが点滅状態で
>QX 操作不能に陥りました^^;。タスクマネージャから QX を終了させてしのぎましたが、こ
>ういう時にマクロを中断させることは出来るでしょうか?

 マクロの中止に関しては、マクロのヘルプに関連する記述がありますが、ア
プリケーションウィンドウを右クリックします。

No. 986 (985へのコメント)投稿者: Kyoko日付: 2003/07/21 10:02:44
題名 : Re^2:「文書全選択」のマクロ記述

> @BlockSelectAll で全選択できますが、常に全選択して実行するようにして
> しまうと不都合がありませんか? 巨大なファイルを編集している場合や、引
> 用部分はいじりたくない場合、等々。通常 Ctrl+A で全選択することができる
> ので、現状のまま使用した方がいいのでは?

CINEPHILE さん、教えて頂いた 1 行を挿入したところきちんと動作しました!どうもあ
りがとうございました。
アドバイスもありがとうございます ^^。 私のこのマクロの使用場面が主に HP の日記や
掲示板の書込みの下書きがメインなため、全選択が必要な場合がほとんどで最初からこの
動作が入っていたほうが楽かと思いました。
ただ確かに引用部分などに入ってしまうのはまずい…ですね。^^;

うーん、何も選択していないときは全選択、選択範囲がある場合はそこだけ適用という動
作が出来れば一番嬉しいような。

この頂いた Si さんのマクロの記述に
	if @Select = 0 then
		' 選択されていないときは1行だけ
		@MoveBeginningLine
		addspace1
		@MoveNextLineCr
		exit sub
	end if
	@Redraw = 0
	startline = @SelectStartLine
	endline   = @SelectEndLine - 1
	@BlockSelectEnd
という部分があるのですが、
	startline = @SelectStartLine
	endline   = @SelectEndLine - 1
の部分を "if @Select = 〜〜〜 ?" と "end if" で囲めば可能でしょうか。

> マクロの中止に関しては、マクロのヘルプに関連する記述がありますが、ア
> プリケーションウィンドウを右クリックします。
ありがとうございます。試してみたところ確かにこれで止まりました。
マクロのヘルプも今見てみました。(すみません)


別件ですが、、、

引用符挿入の機能をよく使うようになり、すぐ挿入できるよう右クリックの編集メニュー
に「カーソル行または選択行に引用符をつける」を加えました。
その際、引用符 ">" の右に半角スペースを挿入したく引用符の設定のところでスペース
を入れてみたものの、反応しませんでした。

出来たら
1、引用符の右に最初から半角スペースが入っているもの
2、引用符のみでスペースはないもの

の 2 種類を登録してすぐ使用できるようにしたいのですが、何か手段はあるでしょうか。
ご存知の方いらっしゃいましたらアドバイス頂けましたら幸いです。
よろしくお願いいたします。

No. 989 (986へのコメント)投稿者: かぶねこ HP日付: 2003/07/21 19:08:28
題名 : Re^3:「文書全選択」のマクロ記述

Kyoko さん、こんにちは。

このマクロはサンプルマクロの QSPACE.MAC をベースにしたものですが、改造は、
一見したよりはむずかしいのです。というのは、現在の行のみを処理するほうが
メインにあって、選択部分を処理するときは、1 行ずつ処理して移動しているん
です。その 1 行ずつでサブルーチンを呼んでいます。

proc main を次のもので置き換えてみてください。編集中のファイルの先頭から
末尾まで処理するはずになっています。別件はわけます。

proc main

dim startline, endline
dim j
dim oldline

if @Select > 0 then '選択範囲があるとき
@Redraw = 0
startline = @SelectStartLine
endline = @SelectEndLine - 1
@BlockSelectEnd

@UndoBlock = 1
for j = endline to startline step -1
@Line = j
@MoveBeginningLine
oldline = @Line
addspace1
j = oldline
next
@XDisplay = 1
@Redraw = 1
@UndoBlock = 0
exit proc
end if '選択範囲がある場合、ここまで

@UndoBlock = 1 'まとめて UNDO できるようにしておく
@Redraw = 0 '画面出力停止(スピードを稼ぐ)
@MoveFileTop '先頭に移動
do while 1 'exit 条件が合致するまで繰り返し
addspace1
if @ScrLineToCrLine(@Line) = @ScrLineToCrLine(@LastLine) then exit do
@MoveNextLineCr
loop
@Redraw = 1
@UndoBlock = 0
end proc

No. 993 (989へのコメント)投稿者: Kyoko日付: 2003/07/23 13:09:37
題名 : Re^4:「文書全選択」のマクロ記述

かぶねこさん、自動全選択&選択時だけ選択部分半角スペース挿入マクロをどうもありがとうございました。

> このマクロはサンプルマクロの QSPACE.MAC をベースにしたものですが、改造は、
> 一見したよりはむずかしいのです。というのは、現在の行のみを処理するほうが
> メインにあって、選択部分を処理するときは、1 行ずつ処理して移動しているん
> です。その 1 行ずつでサブルーチンを呼んでいます。

そ、そうでしたか…(汗)。素人考えでお願いした形になってしまい本当に申し訳ありませんでした。
proc部分を作って頂いたものに差し替え、全選択&選択部分どちらも出来る理想のマクロになりました!ツールバーに登録してワンクリックで使わせて頂きます。本当にどうもありがとうございました。m(__)m

No. 990 (986へのコメント)投稿者: かぶねこ HP日付: 2003/07/21 20:40:08
題名 : Re: 引用符挿入

>1、引用符の右に最初から半角スペースが入っているもの
>2、引用符のみでスペースはないもの
>
>の 2 種類を登録してすぐ使用できるようにしたいのですが、何か手段はあるでしょうか。

基本機能の「引用符挿入」は、ヘルプに「引用符の設定 で設定した引用符の1
番が使用されます」とありますので、2 種類の使い分けはできないと思います。
半角スペース入りの「> 」が 1 番に設定されていれば半角スペースも入ります。

基本機能でできないので、マクロになります。引用符の種類はこのマクロの例で
は 5 種類まで設定行を増やして対応できます。いらない設定行は削除してくだ
さい。QSPACE.MAC のアレンジです。

'引用符挿入
proc main
dim startline, endline
dim j
dim oldline
dim quote$[5]
dim i, sel, s$

i = 1
quote$[i++] = "&a. > "
quote$[i++] = "&b. >"
quote$[i++] = "&c. >>"
sel = popupmenu(quote$)
s$ = mid$(quote$[sel], 5)

if @Select = 0 then
'選択されていないときは1行だけ
@MoveBeginningLine
@Insert s$
@MoveNextLineCr
exit sub
end if
@Redraw = 0
startline = @SelectStartLine
endline = @SelectEndLine - 1
@BlockSelectEnd

@UndoBlock = 1
for j = endline to startline step -1
@Line = j
@MoveBeginningLine
oldline = @Line
@Insert s$
j = oldline
next
@XDisplay = 1
@Redraw = 1
@UndoBlock = 0
end proc

No. 994 (990へのコメント)投稿者: Kyoko日付: 2003/07/23 13:15:15
題名 : Re^2: 引用符挿入

かぶねこさん、CINEPHILEさん、引用符に関して教えていただきましてありがとうございます。

QXの引用符設定で半角スペースが入らないという件に関し、ご指摘ありがとうございました。

自分で再度確認したところ、確かに入りました。 それにその設定画面がどうも記憶と違う…?? 自分のやったことが分からず悩んでいたところ、ようやくその時自分が設定していたのはその直前にインストールしていたQTClipの引用符だったことが分かりました!自分でも呆れる粗忽振りです…(涙)。これじゃQXで反映されなくて当たり前でした。

お騒がせして本当にすみません。それに私の勘違いの為にまたマクロを作って頂いて身の縮む思いです。本当に本当に、申し訳ありませんでした。

かぶねこさん、可愛いポップアップの出るマクロをありがとうございました!
引用符のスペースつきとスペースなし両方が欲しかった理由というのが二重引用符(?)「>>」を付ける時を想定してでしたので、それも既に入ったこのマクロは理想そのものです。早速右クリックメニューにこのマクロを登録して使わせて頂いています。本当にありがとうございました。m(__)m

CINEPHILEさんも、複雑なマクロを作っていただき申し訳ありません。今後軽々しくお願いする前に、自分で出来る範囲内で利用することを考えたいと思います。今回は二重引用符も使いたかったためかぶねこさんに記述していただいたマクロを使わせて頂こうと思いますが、ご厚意が嬉しかったです。どうもありがとうございました。m(__)m

No. 995 (994へのコメント)投稿者: かぶねこ HP日付: 2003/07/27 19:46:54
題名 : Re^3: 引用符挿入

Kyoko さん、こんにちは。

マクロコードをちょこっと書いたり、というのは、わたしの場合「マクロ遊び」
の領域を出ないもので、しかも気が向いたときしかやらないので、あまり気にせ
ずお使いください。今回の場合、QSPACE.MAC をかすかに変えただけですし。

CINEPHILE さん、いろいろありがとうございました。

No. 991 (986へのコメント)投稿者: CINEPHILE日付: 2003/07/21 20:42:51
題名 : Re^3:「文書全選択」のマクロ記述

>引用符挿入の機能をよく使うようになり、すぐ挿入できるよう右クリックの編集メニュー
>に「カーソル行または選択行に引用符をつける」を加えました。
>その際、引用符 ">" の右に半角スペースを挿入したく引用符の設定のところでスペース
>を入れてみたものの、反応しませんでした。

 @FormatQuotationMarks を割り付けているのであれば、引用符の設定の1が
使用されるはずです。この設定はレジストリから取得することしかできない仕
様になっているようなので、変更を反映するには再起動が必要です。それでも
うまくいかないのであれば、何故でしょう?

>1、引用符の右に最初から半角スペースが入っているもの
>2、引用符のみでスペースはないもの

 マクロを使用すれば可能ですが、このあたりはもうMLの話題かもしれませ
ん。とりあえず次の投稿欄に試作品を貼り付けておきますが、API を使用して
レジストリの値を取得する操作は既存のマクロを参考にしているので、問題が
ある場合にはMLで尋いてください。
 @FormatQuotationMarks とほぼ同じ動作をしますが、シフトキーを押下して
実行すると、引用符の末尾のスペースの有無を変更します。引用符の設定はレ
ジストリから取得しているので、レジストリを使用していない環境では使用で
きません。

No. 992 (986へのコメント)投稿者: CINEPHILE日付: 2003/07/21 20:44:39
題名 : Re^3:「文書全選択」のマクロ記述

dllname "advapi32.dll"
cdeclare long RegOpenKeyEx(long,LPSTR,long,long,long);
cdeclare long RegCloseKey(long);
cdeclare long RegQueryValueEx(int,LPSTR,long,long,LPSTR,long);

const HKEY_CURRENT_USER = &H80000001
const KEY_QUERY_VALUE = &H1
const ERROR_SUCCESS = 0

proc main
	dim k$,kn$,s$,line_beg,line_end
	dim hKey as long
	dim buf_size as long
	dim kbuf$ as string[80]
	if @hwnd = 0 then exit proc
	'レジストリから引用符の設定を取得
	k$ = cformat$("Software\araken\QX\%d\Mode",@@RegistryLoadNum)
	kn$ = "Quote1"
	if RegOpenKeyEx(HKEY_CURRENT_USER,k$,0,KEY_QUERY_VALUE,varptr(hKey)) = \
		ERROR_SUCCESS then
		buf_size = 80
		RegQueryValueEx(hKey,kn$,0,0,kbuf$,varptr(buf_size))
	end if
	RegCloseKey(hKey)
	if kbuf$ = "" then
		call msgbox("引用符の設定を取得できません。",MB_ICONEXCLAMATION)
		exit proc
	end if
	'シフトキーの押下でスペースの有無を変更
	if iskeydown(KEY_SHIFT) then
		if right$(kbuf$,1) = " "then
			kbuf$ = rtrim$(kbuf$)
		else
			kbuf$ = kbuf$+" "
		end if
	end if
	@Redraw = 0:@UndoBlock =1
	if @Select then
		line_beg = @SelectStartLine:line_end = @SelectEndLine
		if @SelectEndBytePosCr > 1 then line_end = line_end+1
		@BlockSelect
		@Line = line_beg
		@MoveBeginningLine
		do while @Line < line_end
			@Insert kbuf$
			@MoveNextLineCr
		loop
	else
		@MoveBeginningLine
		@Insert kbuf$
		@MoveNextLineCr
	end if
	@Redraw = 1:@UndoBlock = 0
end proc


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


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

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