ダイアログボックス上のオプションの初期No.13559
styth さん 25/06/12 11:20
 
loaddll "tkinfo.dll";
setcompatiblemode 0x00020000; //2行目
#n = dllfunc("AutoRestoreFindPack"); //3行目 //=秀丸エディタでの「setcompatibl
emode 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行目 //=秀丸エテ゛ィタでの「setcom
patiblemode 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によるコマン
ド実行はどっちが先に実行さるかは判断が難しいです。どっちが先に実行されるか、
実際にマクロを作ってテストしてご自身で調べて、順序が常に安定してるようなら、
その順序で実行されるつもりでマクロを作成して大丈夫だと思います。

[ ]