置換ダイアログのINSELECTオプションにつNo.01034
Gavo さん 00/02/20 05:01
 
 GAVOです。

 どなたか、replaceのinselectオプションの使い方について
教えて下さい。

 画面で範囲選択した後、
   $str="";
   replece $str,$str,ask,inselect;
というマクロを実行すると、置換ダイアログが開きますが、
置換ダイアログの「選択した範囲内のみ」というボックスは
薄くなっていて選択出来ません。また、このままで検索の欄と
置換の欄に文字を入れて実行すると、文書全体で置換を実行
できてしまいます。
 どうすれば、置換メニューの置換のように選択した範囲だけで
置換を行えるようになるのでしょうか。

 ついでに、上のマクロで $str=""; としているのに、置換
ダイアログの検索の欄にカーソル位置の文字が読み込まれるので
しょうか。

 よろしくお願いします。
  

[ ]
RE:01034 置換ダイアログのINSELECTオプシNo.01035
きいろいまふらあ さん 00/02/20 12:00
 
きいろいまふらあです。

>  どなたか、replaceのinselectオプションの使い方について


>  画面で範囲選択した後、
>    $str="";
>    replece $str,$str,ask,inselect;

replaceですね。
手元で動かしたらエラーでこけてしまいました。
あ、秀丸がVer.3.00だ。バージョンアップせねば。(^^;

helpでreplaceを見つけられないのですが、
どうやらreplaceって、「置換ダイアログを表示する」マクロみたいですね。
事前にオプションを指定しておくには一般にsetsearchを使うのではないかなあ?
あれ?置換文字列は指定できるんだっけ?<あやふや

ちなみに手元では複数行の範囲を選択してreplace;とするとかってに
「選択した範囲内のみ」にチェックが入った状態でダイアログが表示されます。

ダイアログを使う必要がない場合は、
replaceall,
replaceallfast,
replaceup,
replacedown,
あたりを使えばいいでしょう。
こちらは各種パラメータを引数で指定できます。

>  ついでに、上のマクロで $str=""; としているのに、置換
> ダイアログの検索の欄にカーソル位置の文字が読み込まれるので
> しょうか。

想像ですが、replaceは引数をとらないので、単純に無視されているのでは?

憶測だらけですがヒントになるかもと思って書き込みます。

[ ]
RE:01035 置換ダイアログのINSELECTオプシNo.01036
Gavo さん 00/02/20 14:45
 
GAVOです。
きいろいまふらあさん、早速ご回答いただきまして
ありがとうございました。

>replaceですね。
>手元で動かしたらエラーでこけてしまいました。

 replaceでなく、replacedownでした。
申し訳ありませんでした。  m(_ _)m

 マニアルには、replacedownのオプションとして、
inselectが書かれていますが、

  画面で範囲選択した後、
    $str="";
    replecedown $str,$str,ask,inselect;

を実行すると、置換ダイアログの「選択した範囲内のみ」
というところが薄くなっていて選択出来ません。どうして
でしょうか。

よろしくお願いします。


[ ]
RE:01036 置換ダイアログのオプションにつNo.01037
かかし さん 00/02/20 15:25
 
かかしです、こんにちは。

#横からすいません。

>GAVOです。

こんちは。

> replaceでなく、replacedownでした。
>申し訳ありませんでした。  m(_ _)m
>
> マニアルには、replacedownのオプションとして、
>inselectが書かれていますが、
>
>  画面で範囲選択した後、
>    $str="";
>    replecedown $str,$str,ask,inselect;
            ↑
          ここがミスタイプです、といいたかったんだと思います。

>を実行すると、置換ダイアログの「選択した範囲内のみ」
>というところが薄くなっていて選択出来ません。どうして
>でしょうか。

試しに実行してみたら、やっぱり選択範囲が解除されていました。
しょうがないので、むりやりこんな感じでマクロを組んでみました。

$search = input( "検索文字列","");
$replace = input("置換文字列","");
//question "正規表現?";などと入れても可。
selectall;
message "選択範囲の確認";
replacedown $search,$replace,ask,inselect;

とりあえず、選択範囲は解除されないようです。

#まったく根本的解決にはなっていないのですが・・・。

---かかし

[ ]
RE:01037 置換ダイアログのオプションにつNo.01038
Gavo さん 00/02/20 17:35
 
かかしさん、ありがとうございました。

>$search = input( "検索文字列","");
>$replace = input("置換文字列","");
>//question "正規表現?";などと入れても可。
>selectall;
>message "選択範囲の確認";
>replacedown $search,$replace,ask,inselect;
>
>とりあえず、選択範囲は解除されないようです。


   $search = input( "検索文字列","");
   $replace = input("置換文字列",$search);
   replacedown $search,$replace,ask,inselect;
を実行しました。置換ダイアログは出ませんでしたが、選択範囲だけが置換されまし
た。

 次に、このマクロを下記のマクロに組み込んで実行したら、やはり全文が置換の対
象になりました(検索文字の後ろに数字や文字を付加するためのマクロです)。いろ
いろと、いじくってみましたが、よく分かりません。


if (selecting) {
#x1 = seltopx;#y1 = seltopy;
#x2 = selendx;#y2 = selendy;
$str = gettext(#x1, #y1, #x2, #y2); //選択範囲
moveto #x1, #y1;
if(strlen($str)>=40){ //全角20字以上なら選択範囲で置換
$search = input( "検索文字列","");
$replace = input("置換文字列",$search);
replacedown $search,$replace,ask,inselect;
} else { //全角20字より短ければ、ダイアログに選択範囲を読込む
$replace = input("置換文字列",$str);
replacedown $str,$replace,ask;
}
} else {
replacedown "","",ask;
}

question "見つかりません。" + "\n" + "始めの位置に戻りますか?";if (result) {
gosearchstarted;
endmacro;
} else { endmacro; }
endmacro;


[ ]
RE:01037 置換ダイアログのオプションにつNo.01039
きいろいまふらあ さん 00/02/20 18:04
 
まふです。

>           ここがミスタイプです、といいたかったんだと思います。

です。

で、上の発言をしたときは勘違いしてましたが、
replaceup/downて、置換文字列が""のときにはダイアログを表示するんですね。
#そもそもこれって公開仕様?

確かに範囲選択して実行しても当該チェックボックスが無効(灰色)になってますね。

かかしさんも気づいておられるようですが、これって範囲を選択していない状態で
置換ダイアログを出したときの状況と同じですね。
ダイアログを出す直前に、範囲選択状態が解除されてしまって、
秀丸が「範囲選択されてない」と判断してチェックボックスを無効にしてしまうので
しょう。

ためしに検索文字列が""でない状態で実行したら、inselectの有無はしっかり反映さ
れます。
#もちろんダイアログは出ません。

色々試行錯誤した結果、

setsearch "",8;
replace;

とすると「確認する」のチェックのついた置換ダイアログ(検索文字列、置換文字列
は空)を
表示することができました。
範囲選択して実行すると「選択範囲内」のチェックも有効になります。
ただ、setsearchの結果がすべて反映されるわけではないようです。

replaceってのは公開仕様???

なんか昔、似たような話をした記憶があります。
検索してません。すみません。

----
高木 郷
e-mail:xxxx@pluto.dti.ne.jp

[ ]
RE:01038 置換ダイアログのオプションにつNo.01040
きいろいまふらあ さん 00/02/21 01:04
 
まふです。

> moveto #x1, #y1;

ひょっとしてこの時点で選択が解除されちゃってるんじゃないでしょうか?

> if(strlen($str)>=40){ //全角20字以上なら選択範囲で置換

> $search = input( "検索文字列","");

この間に
beginsel;
moveto #x2, #y2;
とでも入れたらどうなるでしょうか?

あるいは、movetoの場所を

} else { //全角20字より短ければ、ダイアログに選択範囲を読込む
moveto #x1, #y1;
$replace = input("置換文字列",$str);

こっちに移動するとか。(こっちのがスマートか?)

----
高木 郷
e-mail:xxxx@pluto.dti.ne.jp

[ ]
RE:01040 置換ダイアログのオプションにつNo.01076
Gavo さん 00/02/26 14:25
 
きいろいまふらあ さん ありがとうございました。

 範囲選択後、
   $str = gettext(#x1, #y1, #x2, #y2);
を実行した時点で、範囲選択が解除されているようでした。

 そこで、おっしゃられるように
moveto #x1, #y1;
の位置を動かしてみて、下のように
replacedown $search,$replace,ask,inselect;
の前に
moveto #x1, #y1;
beginsel; moveto #x2, #y2;
を入れ、
$replace = input("置換文字列",$str);
の前に
moveto #x1, #y1;
を入れると、inselectオプションが働きました。

***********************************
if (selecting) {
#x1 = seltopx;#y1 = seltopy;
#x2 = selendx;#y2 = selendy;
$str = gettext(#x1, #y1, #x2, #y2); //選択範囲
if(strlen($str)>=40){ //全角20字以上なら選択範囲で置換
$search = input( "検索文字列","");
$replace = input("置換文字列",$search);
moveto #x1, #y1;
beginsel; moveto #x2, #y2;
replacedown $search,$replace,ask,inselect;
} else { //全角20字より短ければ、ダイアログに選択範囲を読込む
moveto #x1, #y1;
$replace = input("置換文字列",$str);
replacedown $str,$replace,ask;
}
} else {
replacedown "","",ask;
}

question "見つかりません。" + "\n" + "始めの位置に戻りますか?";
if (result) {
gosearchstarted;
endmacro;
} else { endmacro; }

//end of macro;
***********************************


 ところが、8〜9行目の
moveto #x1, #y1;
beginsel; moveto #x2, #y2;
で再度範囲選択を行っているところを確認すると、元の選択範囲と同じ
であるのに、
replacedown $search,$replace,ask,inselect;
で置換すると、選択範囲の最後の行の行末まで置換されてしまいます。

 これはどうしてでしょうか。よろしくお願いします。



[ ]
RE:01076 置換ダイアログのオプションにつNo.01077
きいろいまふらあ さん 00/02/26 15:54
 
まふです。

> で置換すると、選択範囲の最後の行の行末まで置換されてしまいます。

マクロを使わずに同じことを手でやってみるとわかります。
検索や置換で「選択範囲内のみ」の場合の対象範囲は選択範囲最終行の論理行末まで、
というのが仕様のようです。

[ ]
RE:01077 置換ダイアログのオプションにつNo.01121
Gavo さん 00/03/03 01:12
 
きいろいまふらあ さん ありがとうございました。
仕様なら、しようがないですね。
これからも、よろしくお願いします。

[ ]