■ 質問はここへ ■

前へ 次へ
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. 987 (983へのコメント)投稿者: Akira日付: 2003/07/21 13:18:15
題名 : Re^2:Shift + Enterを行うと、行末に<br>を追加して改行の設定方法は?

>http://0ban.com/forum/read.cgi?f=22&no=87&c=1
>
>で簡単に触れていますが、これでいいでしょうか。

早速のご指導、有り難うございます。
しかし、昨日までは上手くいきませんでした。何度かトライし、リセットで再立ち上げ、ファイルのダウンロードのし直し等などもしてみました。でも、従来どおりのただの改行にしかならない状態でした。

   キー操作   定義名 機能説明
   s  enter   改行
   s  enter   "<br>" 
 本日さらに見直したところ、「キー定義設定(K)」画面では上記のように標示されていました。上位行の「 s  enter   改行」を削除してみたら、機能するようになりました。
 有り難うございました。助かりました。

No. 988 (987へのコメント)投稿者: かぶねこ HP日付: 2003/07/21 18:33:26
題名 : Re^3:Shift + Enterを行うと、行末に<br>を追加して改行の設定方法は?

なるほど、設定に重複があると確かに有効になりませんね。

自力解決で何よりです。報告ありがとうございました。

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

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

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

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

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


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

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