←前へ 次へ→
機能別Ｑ＆Ａ 質問番号順Ｑ＆Ａ 目次

# [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;
      // （ここまで）-----------------------------------------------

←前へ 次へ→
機能別Ｑ＆Ａ 質問番号順Ｑ＆Ａ 目次