[HMM0069A] ●マクロ処理中にダイアログボックスを出す方法 - 秀丸エディタQ&A集

Hidemaru Editor

←前へ 次へ→ 機能別Q&A 質問番号順Q&A


[HMM0069A]

●マクロ処理中にダイアログボックスを出す方法

Q.
マクロ処理中にダイアログボックスを出して、「処理中です」と表示させたいのですが?。

A.

全ての場合についてできるわけではないですが、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; 
// (ここまで)-----------------------------------------------

←前へ 次へ→ 機能別Q&A 質問番号順Q&A