[HMM0069A]
●マクロ処理中にダイアログボックスを出す方法
- マクロ処理中にダイアログボックスを出して、「処理中です」と表示させたいのですが?
全ての場合についてできるわけではないですが、whileループかなんかで処理をするような場合については 「秀まるおのマクロサーバ」や「田楽DLL」を使って以下の様な感じで何とかなるんじゃないでしょうか?
以下の例では、"0"〜"9"の文字を繰り返し1000個まで表示させます。 「中止」ボタンをクリックすると処理を中断します。
「秀まるおのマクロサーバ」を使った場合
// マクロサーバで常にダイアログを表示させるサンプル run "macserv.exe"; ddeinitiate "HideMacroServer", "AllService"; ddepoke "newdialog", "20,秀丸マクロ"; ddepoke "newcontrol", "text,,処理中です"; ddepoke "newcontrol", "defbutton,,中止"; ddepoke "notify", "10"; $item = ""; ddestartadvice "dlgresult", $item; ddeexecute "dialog lastactiveparent"; while( 1 ){ ddewaitadvice $item, 10; // 「中止」ボタンが押されたら終了する if( $item != "" ) break; // 元々のコード例:ここから // 終わったら break でループを抜ける #n = #n + 1; #m = #m + 1; if (#n > 9) #n = 0; insert str(#n); if (#m > 1000) break; // 元々のコード例:ここまで } ddeexecute "enddialog"; ddestopadvice "dlgresult"; ddeexecute "exit"; endmacro; // (ここまで)-----------------------------------------------
「田楽DLL」を使った場合
// 田楽DLLで常にダイアログを表示させるサンプル loaddll "dengakudll.dll"; if(!result){ message "DLLのロードに失敗しました。"; endmacro; } if(dllfunc("NEWDIALOG", "秀丸マクロ", 20) == 0 || dllfunc("NEWCONTROL","text", "", "処理中です") == 0 || dllfunc("NEWCONTROL","defbutton", "btn1", "中止") == 0 || dllfunc("SETCTRLNOTIFY","btn1", "10") == 0){ message "ダイアログ作成エラー!";freedll;endmacro; } if (!dllfunc("SHOWDIALOG",hidemaruhandle(0),1)){ freedll; message "ダイアログの表示に失敗しました。"; endmacro; } $item = ""; // 「中止」ボタンが押されたら終了する while (strlen($item) == 0){ $item = dllfuncstr("WAITCTRLNOTIFY",10); if( $item != "" ) break; // 元々のコード例:ここから // 終わったら break でループを抜ける #n = #n + 1; #m = #m + 1; if (#n > 9) #n = 0; insert str(#n); if (#m > 1000) break; // 元々のコード例:ここまで } #ret = dllfunc("ENDDIALOG"); freedll; endmacro; // (ここまで)-----------------------------------------------