|
haru さん今日は、ひろです。
> 改造点は、複数の秀丸の中から、
> 次々に1個ずつ秀丸に対して、残すどうかの問い合わせを行い、更
> 新されていれば更に保存するかどうかのこれまた問い合わせを行う
> というものです。
こういった場合は、解らなければ既存のマクロを改造するのではなく、ま
ずその部分だけのマクロを、別に作ってみるとよいでしょう。そうしないと、
改造の仕方が良くないのか、設計段階で良くないかなどが区別できません。
> この中の59行目のmessageの表示が更新されていないファイルに対
> しても、resultが0になってしまいます。
> 何かおかしいでしょうか?
おかしいです。
マクロヘルプを見ていただくと、
> closehidemaru 番号 (文)
> 番号(ハンドルも可)で指定した秀丸を終了させます。ただし、自分自身を指定す
>ることはできません。
> 指定した秀丸がまだファイルを保存してない場合はclosehidemaruは失敗します。
と記載があります。
openreg "CURRENTUSER","Software\\Hidemaruo\\TuruKame\\Config";
loaddll getregstr("TuruKameDir") + "tkinfo.dll";
closereg;
//鶴亀か?
if( result & dllfunc("IsTuruKame" ) ){
//鶴亀本体か?
##MainWnd = dllfunc("MainWnd");
if( ##MainWnd )setactivehidemaru ##MainWnd;
else ##all = 1; //鶴亀エディタの時
}
else{
##MainWnd = -1;
menu "(&1)この秀丸を残す","(&2)新規秀丸にする",
"(&3)残す秀丸を選ぶ","(&4)全ての秀丸終了";
if ( result == 0 ) endmacro;
if ( result == 2 ) newfile;
if ( result == 4 ) exitall;;
#result = result;
}
freedll;
##main = hidemaruhandle(0);//現在フォーカス中のもの→##main
if (#result != 3){
##i = 1;
##j = 0;
while(##i < hidemarucount){
##wnd = hidemaruhandle(##i);
if( ##wnd != ##MainWnd){
##handle[##j] = hidemaruhandle(##i);
##j = ##j + 1;
}
##i = ##i + 1;
}
##i = 0;
while(##i < ##j){
closehidemaru ##handle[##i];
if( !result ){
setactivehidemaru ##handle[##i];
call Menu;
if( ##return == 2 || ##return == 3){
if( ##return == 2 ) save;
setactivehidemaru ##main;
closehidemaruforced ##handle[##i];
}
}
##i = ##i + 1;
}
}
else{
##j = hidemarucount;
##i = 1;
while(1){
if(##i == ##j)break;
question basename2 + " この秀丸を残しますか?";
if( !result ){
if( updated ){
question basename2 + "は更新されています。\n保存しますか?";
if( result )save;
}
##handle = hidemaruhandle(0);
nexthidemaru;
closehidemaruforced ##handle;
}
else nexthidemaru;
##i = ##i + 1;
}
question basename2 + " この秀丸を残しますか?";
if( !result ){
if( updated ){
question basename2 + "は更新されています。\n保存しますか?";
if( result )exit;
}
quit;
}
}
setactivehidemaru ##main;
if( ##all ){ //鶴亀エディタの時
call Menu;
if( ##return == 2 || ##return == 3){
if( ##return == 2 ) save;
quit;
}
}
endmacro;
Menu:
while(1){
if (basename2 == "") $basename2 = "(無題)";
else $basename2 = basename2;
menu $basename2 + " は更新されています。保存しますか?",
"(&Y)はい",
"(&N)いいえ",
"(&S)スキップ";
//"(&C)キャンセル";//[Esc] も効きます
if( result == 0) endmacro;
if( result != 1)return result;
}
|
|