[ 新規に投稿する ]

ダイアログボックス上のオプションの初期値の指定についてNo.13559
styth さん 25/06/12 11:20 [ コメントを投稿する ]
  loaddll "tkinfo.dll";
setcompatiblemode 0x00020000; //2行目
#n = dllfunc("AutoRestoreFindPack"); //3行目 //=秀丸エディタでの「setcompatiblemode 0x00020000;」に相当(ヘルプより)
#n = dllfunc("SetFindPack", "(\"\",target=smallheaderbody), hilight=1");
#n = dllfunc("Bypass_PostMessage", hidemaruhandle(0), 0x111, 40066);
endmacro;
//●ダイアログボックス上のオプションの初期値の指定 (秀丸メールヘルプ-検索して一覧作成ダイアログボックス、より。2と3行目は追加)

(ケース1)
見にくいので、「検索して一覧作成ダイアログボックス」のチェックマークを全部、消します。
手動で、検索して一覧作成ダイアログボックスを出して、□検索文字列を強調、のチェックが無い事を確認します。
キャンセルを押してダイアログボックスを閉じます。
2と3行目をコメントにして上記マクロを実行します。(「現在の検索パック」をマクロが終了したタイミングで自動的に復元させない)
□検索文字列を強調、にチェックが入ります。

(ケース2)
見にくいので、「検索して一覧作成ダイアログボックス」のチェックマークを全部、消します。
手動で、検索して一覧作成ダイアログボックスを出して、□検索文字列を強調、のチェックが無い事を確認します。
キャンセルを押してダイアログボックスを閉じます。
2行目をコメントにして、上記マクロを実行します。(AutoRestoreFindPackで「現在の検索パック」をマクロ終了時に自動的に復元させる)
□検索文字列を強調、にチェックが入りません。

(ケース3)
見にくいので、「検索して一覧作成ダイアログボックス」のチェックマークを全部、消します。
手動で、検索して一覧作成ダイアログボックスを出して、□検索文字列を強調、のチェックが無い事を確認します。
キャンセルを押してダイアログボックスを閉じます。
3行目をコメントにして、上記マクロを実行します。(setcompatiblemodeで「現在の検索パック」をマクロ終了時に自動的に復元させる)
□検索文字列を強調、にチェックが入りません。

 ケース1〜3、いずれの場合もチェックが入るようにしたいのですが、可能でしょうか?
(hilight=1以外の、他のオプションについても、同様になると思われます)

(4)
loaddll "tkinfo.dll";
#n = dllfunc("AutoRestoreFindPack");
#n = dllfunc("SetFindPack", "(\"あああ\",target=smallheaderbody), hilight=1");
#n = dllfunc("Bypass_PostMessage", hidemaruhandle(0), 0x111, 40066);
 検索して一覧作成ダイアログボックスが出た時に、検索文字列の初期値として、「あああ」を表示させたいのですが、可能でしょうか?
(4)のマクロでは上手く行きませんでした。

 よろしくお願い致します。
[ ]
RE:13559 ダイアログボックス上のオプションの初期値の指定にNo.13561
秀まるお2 さん 25/06/12 17:30 [ コメントを投稿する ]
  まず先に仕組みを説明させていただきますと・・・・・

AutoRestoreFindPackを呼び出すと、マクロ終了してすぐのタイミングで検索パック文字列が元に戻ってしまいます。そして、Bypass_PostMessageでPostされたコマンドは、マクロが終了した後に実行されます。

マクロが終了して検索パック文字列が自動で戻るタイミングとPostMessageされた命令が実行されるタイミングはどっちが先になるかは保証困難なんですが、テストした限りは検索パック文字列が戻る方が先みたいです。なので今回の「1〜3」の現象が起きるんだと思います。

>  ケース1〜3、いずれの場合もチェックが入るようにしたいのですが、可能でしょうか?
> (hilight=1以外の、他のオプションについても、同様になると思われます)

検索パック文字列が自動で戻る前に40066番のコマンド実行をすればいいので、単純にBypass_PostMessageをsendmessageにすればいいと思います。

loaddll "tkinfo.dll";
setcompatiblemode 0x00020000; //2行目
#n = dllfunc("AutoRestoreFindPack"); //3行目 //=秀丸エテ゛ィタでの「setcompatiblemode 0x00020000;」に相当(ヘルプより)
#n = dllfunc("SetFindPack", "(\"\",target=smallheaderbody), hilight=1");
//#n = dllfunc("Bypass_PostMessage", hidemaruhandle(0), 0x111, 40066);
#n = sendmessage( hidemaruhandle(0), 0x111, 40066, 0 );
endmacro;

みたいにしたらうまく「検索文字列を強調」がONでダイアログボックスが出てきつつ、検索が終わった後にもう一度手作業で検索ダイアログを出せば、「検索文字列を強調」はOFFで出てきました。

> (4)
> ...
>  検索して一覧作成ダイアログボックスが出た時に、検索文字列の初期値として、「あああ」を表示させたいのですが、可能でしょうか?

いくつか作戦を試して限りはうまくいきませんでした。そもそもそういうことがマクロで出来る設計になってないので、無理があります。

無理矢理やるとしたら、メール本文に"あああ"を無理矢理書き込んで範囲選択し、「検索して一覧作成」コマンドをPostMessageで実行させるといいようでした。ただ、それだとAutoRestoreFindPackが出来ないとか、メール本文に"あああ"が残ってしまうなどの問題が出ます。

例:
loaddll "tkinfo.dll";
#n = dllfunc("SelectPane", 2);  //メール内容枠をアクティブにする
readonlyswitch;
#browsemode = browsemode;
if( #browsemode ) browsemodeswitch;
gofiletop;
insertfix "あああ\n";
beginsel;
golineend2;
if( #browsemode ) browsemodeswitch;
#n = dllfunc("Bypass_PostMessage", hidemaruhandle(0), 0x111, 40066, 0);

秀丸エディタのsearchdialog文/grepdialog文みたいなのを秀丸メールにも用意するとか、何か関数追加でないと無理な気がします。
[ ]
RE:13561 ダイアログボックス上のオプションの初期値の指定にNo.13568
styth さん 25/06/13 15:50 [ コメントを投稿する ]
  >検索パック文字列が自動で戻る前に40066番のコマンド実行をすればいいので、単純にBypass_PostMessageをsendmessageにすればいいと思います。
 Bypass_PostMessageでうまくいかない時は、sendmessageでやってみたいと思います。
 ヘルプに、Bypass_PostMessageをsendmessageにすればいい場合もある的なことを書いておいて頂ければ幸いです。

>いくつか作戦を試して限りはうまくいきませんでした。そもそもそういうことがマクロで出来る設計になってないので、無理があります。
>秀丸エディタのsearchdialog文/grepdialog文みたいなのを秀丸メールにも用意するとか、何か関数追加でないと無理な気がします。
 了解しました。
[ ]
RE:13568 ダイアログボックス上のオプションの初期値の指定にNo.13569
styth さん 25/06/13 16:07 [ コメントを投稿する ]
  すみません。ヘルプに記述がありました。
[ ]
RE:13568 ダイアログボックス上のオプションの初期値の指定にNo.13570
秀まるお2 さん 25/06/13 16:09 [ コメントを投稿する ]
  Bypass_PostMessageのヘルプに以下の文面だけ追加してみます。

-----------------------------------------------------------------------------------
AutoRestoreFindPack関数呼び出ししてる場合など、マクロ終了と同時に何かアクションを起こす系の指示をしている場合、その指示とBypass_PostMessageによるコマンド実行はどっちが先に実行さるかは判断が難しいです。どっちが先に実行されるか、実際にマクロを作ってテストしてご自身で調べて、順序が常に安定してるようなら、その順序で実行されるつもりでマクロを作成して大丈夫だと思います。
[ ]

[ 新規に投稿する ]