秀丸を1個だけ残したいNo.02446
haru さん 01/10/04 11:35
 
初めまして、この会議室で発言するのは初めてです。秀丸初心者です。
次のようなことをやるには、どうすれば良いんでしょうか?

1.残す1個が現在編集中のもの。
  複数の秀丸を開いている状態で、今編集中のもの以外を全て閉
  じます。
  この時変更があるものは、問い合わせをしてもらう。

2.秀丸を全く新規に開いた状態にする。
  複数の秀丸を開いている状態で、今編集中のものも含めて全て
  閉じます。この時変更があるものは、問い合わせをしてもらい
  ます。その後、新規の秀丸を開く。

単に全終了ですと、改めて秀丸を開かなくてはなりません。

どなたか、お知恵を拝借したいたいのですが。
よろしくお願いします。

[ ]
RE:02446 秀丸を1個だけ残したいNo.02447
ひろ さん 01/10/04 12:22
 
 haruさん今日は、ひろです。
> 1.残す1個が現在編集中のもの。
>   複数の秀丸を開いている状態で、今編集中のもの以外を全て閉
>   じます。
>   この時変更があるものは、問い合わせをしてもらう。
 下記のマクロで可能です。
//-------------------------------------------------------------
#main = hidemaruhandle(0);
while(1){
  closehidemaru 1;
  if( !result ){
    setactivehidemaru 1;
    question "保存しますか?";
    if(result)save;
    #sub = hidemaruhandle(0);
    setactivehidemaru #main;
    closehidemaruforced #sub;
  }
  if( hidemarucount == 1)break;
}
//--------------------------------------------------------------

> 2.秀丸を全く新規に開いた状態にする。
 上記のマクロの先頭に、
newfile;
を付け加えてください。

[ ]
RE:02446 秀丸を1個だけ残したいNo.02448
TAKA さん 01/10/04 12:27
 
haruさん、こんちには。TAKA と申します。

>1.残す1個が現在編集中のもの。
>  複数の秀丸を開いている状態で、今編集中のもの以外を全て閉
>  じます。
>  この時変更があるものは、問い合わせをしてもらう。
>
>2.秀丸を全く新規に開いた状態にする。
>  複数の秀丸を開いている状態で、今編集中のものも含めて全て
>  閉じます。この時変更があるものは、問い合わせをしてもらい
>  ます。その後、新規の秀丸を開く。

「残す1個」の意味が分かりませんでしたが、未編集の秀丸を閉じ
るなら以下のマクロで可能です。
http://www.infomadonna.ne.jp/~takata/hm/#macro
の「秀丸マクロ集 REDライク」に「QNOTOUCH.MAC」というマクロが
ありますが、アイコン化秀丸やウィンドウ分割されていた場合の対
応を行ったものです。Ver2.01で公開予定です。

// QNOTOUCH.MAC(ここから)
    #ChgFlag = false;   // 更新済ファイル存在フラグ

//  #Icon = getininum( hidemarudir + "\\red\\hidered.ini", "QuitNoTouch", "I
con" );
    #Icon = 1;  //アイコン化秀丸対象フラグ(0=対象外,1=対象)

    // 現在のウィンドウハンドル取得
    #FH = hidemaruhandle( 0 );
    //----------------------------------------------------------------------
----//
    //      更新されていないウィンドウハンドル取得(現在のものは対象外)    
    //
    //----------------------------------------------------------------------
----//
    #Count = 0;
    #NormalCount = 0;
    while( 1 )
    {
        nexthidemaru;
        if( splitstate == 2 )
        {
            nexthidemaru;
        }
        #NextFH = hidemaruhandle( 0 );
        if( #FH == #NextFH )
        { // 全てチェック
            break;
        }
        #NormalTbl[#NormalCount] = #NextFH;
        #NormalCount = #NormalCount + 1;
        if( updated )
        { // 更新あり
            if( #ChgFlag == false )
            {
                #ChgFH = #NextFH;
                #ChgFlag = true;
            }
        }
        else
        { // 更新なし
            #Tbl[#Count] = #NextFH;
            #Count = #Count + 1;
        }
    }

    //------------------------------------------//
    //      アイコン化秀丸ウィンドウ取得        //
    //------------------------------------------//
    if( #Icon != 0 )
    { // アイコン化秀丸も対象
        #CountAll = hidemarucount;
        #I = 1; // 次の秀丸からチェック
        #Count2 = 0;
        while( #I < #CountAll )
        {
            #WkFH = hidemaruhandle( #I );
            #J = 0;
            while( #J < #NormalCount )
            {
                if( #WkFH == #NormalTbl[#J] )   break;
                #J = #J + 1;
            }
            if( #J < #NormalCount )
            { // 通常の秀丸
            }
            else
            { // アイコン化秀丸
                #Tbl2[#Count2] = #WkFH;
                #Count2 = #Count2 + 1;
            }
            #I = #I + 1;
        }
    }

    //----------------------------------------------//
    //      更新されていないウィンドウを閉じる      //
    //----------------------------------------------//
    #I = 0;
    while( #I < #Count )
    {
        closehidemaru #Tbl[#I];
        #I = #I + 1;
    }

    //--------------------------------------------------//
    //      更新されていないアイコン化秀丸を閉じる      //
    //--------------------------------------------------//
    if( #Icon != 0 )
    { // アイコン化秀丸も対象
        #I = 0;
        while( #I < #Count2 )
        {
            setactivehidemaru #Tbl2[#I];
            if( updated )
            { // 更新あり
                showwindow 2;
            }
            else
            { // 更新なし
                setactivehidemaru #FH;
                closehidemaru #Tbl2[#I];
            }
            #I = #I + 1;
        }
    }

    //--------------------------//
    //      自分自身の処理      //
    //--------------------------//
    setactivehidemaru #FH;
    if( !updated )
    { // 更新なし
        if( #ChgFlag == true )
        { // 更新されたファイルがある
            setactivehidemaru #ChgFH;
            closehidemaru #FH;
        }
        else
        { // 更新されたファイルがない
            exit;
        }
    }

    endmacro;
// QNOTOUCH.MAC(ここまで)


問い合わせは行いませんが、少し?改造すれば出来ると思います。


2番の新規の秀丸を開くは、少し改造すれば出来ます。

[ ]
RE:02447 秀丸を1個だけ残したいNo.02449
TAKA さん 01/10/04 13:00
 
TAKA です。
私の勘違いならすみません。

>    question "保存しますか?";
>    if(result)save;
>    #sub = hidemaruhandle(0);
>    setactivehidemaru #main;
>    closehidemaruforced #sub;

Noなら、破棄するのはまずいのでは?
破棄したいのかな?


>  if( hidemarucount == 1)break;

閉じない場合は、「1」にはなりませんよね?

[ ]
RE:02448 秀丸を1個だけ残したいNo.02451
haru さん 01/10/04 14:40
 
TAKAさん、こんちには。
早速のお返事ありがとうございます。

>「残す1個」の意味が分かりませんでしたが、未編集の秀丸を閉じ
>るなら以下のマクロで可能です。
確かに未編集の秀丸は残りますが、私が残したいのは現在編集中の
ものです。
つまりマクロを実行した秀丸です。これが「残す1個」です。

[ ]
RE:02449 秀丸を1個だけ残したいNo.02452
haru さん 01/10/04 15:33
 
TAKAさん、こんにちは。

>>    question "保存しますか?";
>Noなら、破棄するのはまずいのでは?
>破棄したいのかな?
私は、破棄でかまいませんが。

[ ]
RE:02447 秀丸を1個だけ残したいNo.02453
haru さん 01/10/04 15:40
 
ひろさん、今日は。

> 下記のマクロで可能です。
ありがとうございます。やってみたら、うまくいきました。

[ ]
RE:02449 秀丸を1個だけ残したいNo.02454
ひろ さん 01/10/04 17:51
 
 TAKA さん今日は、ひろです。
> >  if( hidemarucount == 1)break;
>
> 閉じない場合は、「1」にはなりませんよね?
 while 文の中で、
>   closehidemaru 1;
>     closehidemaruforced #sub;
としているので、「閉じない場合」は存在せず、いつかは 1 になるはずです。
 ##何か違っているかなあ〜。確かに setactivehidemaru のように、
closehidemaru(forced) が失敗する場合を考慮していませんが(^^;。

[ ]
RE:02454 秀丸を1個だけ残したいNo.02455
TAKA さん 01/10/04 21:37
 
TAKA です。

>> >  if( hidemarucount == 1)break;
>>
>> 閉じない場合は、「1」にはなりませんよね?
> while 文の中で、
>>   closehidemaru 1;
>>     closehidemaruforced #sub;
>としているので、「閉じない場合」は存在せず、いつかは 1 になるはずです。

「閉じない場合」というのは、保存の確認でNoだった場合に、閉じ
ずにそのままにする必要があれば、「1」になりませんね。という
ことだったのですが、破棄したいとのことですので、ひろさんのマ
クロでOKだと思います。

私は、さすがに破棄はまずいよなーと思っていましたが、私の勘違
いだったようです。
すみません。

破棄すれば、タイトル通り1個だけが残りますね。

[ ]
RE:02447 秀丸を1個だけ残したいNo.02457
haru さん 01/10/05 09:14
 
ひろさん、今日は。

早速使っております。ありがとうございます。
一つ質問なんですが、

>//-------------------------------------------------------------
>#main = hidemaruhandle(0);
>while(1){
>  closehidemaru 1;
>  if( !result ){
>    setactivehidemaru 1;
>    question "保存しますか?";

この時、どのファイルを保存するか、よくわかるように「aaa.txtを保存しますか?」
というようにすることは、できますでしょうか?

よろしくお願いします。

[ ]
RE:02457 秀丸を1個だけ残したいNo.02458
ひろ さん 01/10/05 12:51
 
 haru さん今日は、ひろです。
> この時、どのファイルを保存するか、よくわかるように「aaa.txtを保存しますか?」
 前回のマクロの
>     question "保存しますか?";
の部分を、
      if( basename == "")question "(無題) は更新されています。保存しますか?";
      else question basename2 + " は更新されています。保存しますか?";
に変更してください。

[ ]
RE:02458 秀丸を1個だけ残したいNo.02459
haru さん 01/10/05 13:59
 
ひろさん、今日は。

>の部分を、
>      if( basename == "")question "(無題) は更新されています。保存しますか?";
>      else question basename2 + " は更新されています。保存しますか?";
>に変更してください。

ありがとうございます。うまくいきました。

[ ]
RE:02447 改造できませんか?No.02490
haru さん 01/10/12 12:25
 
ひろさん、こんにちは。

いつも、御世話様です。
以前、作って頂いたマクロ愛用させて頂いています。

たびたび、すみません。

最終的に1個残すのではなく、マクロを実行したときに、次々に秀
丸を閉じていくのですが、更新されたものについてだけ、残すかど
うか問い合わせをするように改造はできないでしょうか?この時
「いいえ」なら破棄で構いません。

[ ]
RE:02490 改造できませんか?No.02491
ひろ さん 01/10/12 12:52
 
 haru さん今日は、ひろです。
> 最終的に1個残すのではなく、マクロを実行したときに、次々に秀
> 丸を閉じていくのですが、更新されたものについてだけ、残すかど
> うか問い合わせをするように改造はできないでしょうか?
 可能です。
//-------------------------------------------------------------------
##i = 0;
##hidemarucount = hidemarucount;
while(##i < hidemarucount){
  ##handle[##i] = hidemaruhandle(##i);
  ##i = ##i + 1;
}
##i = 1;
while(##i < ##hidemarucount){
  closehidemaru ##handle[##i];
  if( !result ){
    setactivehidemaru ##handle[##i];
    question "更新されています。\n残しますか?";
    if(!result){
      setactivehidemaru ##handle[0];
      closehidemaruforced ##handle[##i];
    }
  }
  ##i = ##i + 1;
}
setactivehidemaru ##handle[0];

[ ]
RE:02491 改造できませんか?No.02493
haru さん 01/10/12 13:35
 
ひろさん、今日は。
> 可能です。
ありがとうございます。早速使わせて頂きます。

[ ]
RE:02446 鶴亀本体のみ残したいNo.02533
haru さん 01/10/22 10:04
 
 秀丸でも同じ様なマクロを作成していただきましたが、それを鶴
亀用に兼用で、改造できないでしょうか?
 できれば秀丸と同じキーに割り当てたいのですが。
 メニュー・ファイルに鶴亀メール本体の終了、全終了は有るので
すが、その全く逆の鶴亀メール本体以外終了というのが有りません。
 更新(修正)されているメールは保存するか破棄するかそのまま
残すか問い合わせしてもらえると、申し分有りません。
 問い合わせの仕方は、保存しますか?の問いに対して「はい」な
ら保存(新規は草稿へ、以外は元のフォルダへ)、「いいえ」なら
破棄、ESCキーならそのまま残す、と以降、次々と同様に全メール
について実行します。(escキーは無理?)
 (この辺は前回も指摘を頂いたので最初に申し上げました。)

 以上、勝手なことばかり申し上げてすみません。
 よろしくお願いします。

[ ]
RE:02533 鶴亀本体のみ残したいNo.02534
ひろ さん 01/10/22 12:47
 
 haru さん今日は、ひろです。
> ら保存(新規は草稿へ、以外は元のフォルダへ)、「いいえ」なら
> 破棄、ESCキーならそのまま残す
 [Esc] は、DLL など使わないと無理です。
 さてどういった仕様がよいでしょう?

 P.S 今回はこのまま話の流れで、こちらの会議室でよいと思いますが、鶴
亀のマクロは、基本的に hidesoft.8 の方がよいと思います。

[ ]
RE:02534 鶴亀本体のみ残したいNo.02535
haru さん 01/10/22 14:07
 
ひろさん、今日は。

> [Esc] は、DLL など使わないと無理です。
> さてどういった仕様がよいでしょう?

tabキーもだめですか?あるいはshiftキーとかアルファベットのs
キーではどうですか?(skipの頭文字を取って)

> P.S 今回はこのまま話の流れで、こちらの会議室でよいと思いますが、鶴
>亀のマクロは、基本的に hidesoft.8 の方がよいと思います。

すみません。以後そうします。

[ ]
RE:02535 鶴亀本体のみ残したいNo.02536
ひろ さん 01/10/22 14:35
 
 haru さん今日は、ひろです。
> > [Esc] は、DLL など使わないと無理です。
> > さてどういった仕様がよいでしょう?
>
> tabキーもだめですか?あるいはshiftキーとかアルファベットのs
> キーではどうですか?(skipの頭文字を取って)
 どのキーでも駄目です。
 なぜならメッセージボックスを表示するのは、message と question 文し
かなく、後者を使っても [はい] [いいえ] の 2 つにしかないからです。

[ ]
RE:02536 鶴亀本体のみ残したいNo.02538
haru さん 01/10/22 18:13
 
ひろさん、今日は。

> どのキーでも駄目です。
> なぜならメッセージボックスを表示するのは、message と question 文し
>かなく、後者を使っても [はい] [いいえ] の 2 つにしかないからです。

iskeydownは使えないんでしょうか?
あるいはmenu文を使って、
 1行目、メール名+保存しますか?
 2行目、はい(yキー)
 3行目、いいえ(nキー)
 4行目、スキップ(sキー)
という感じでは、どうでしょうか?
私には作れそうもないんですが。

お願いする身でありながら、いろいろ申し上げてすみません。

[ ]
RE:02538 鶴亀本体のみ残したいNo.02539
ひろ さん 01/10/22 18:20
 
 haru さん今日は、ひろです。
> iskeydownは使えないんでしょうか?
 この場合は使えません。

> あるいはmenu文を使って、
 必ずしもダイアログでなくメニューでよいなら、仰るとおり出来ます。
//-------------------------------------------------------------------
openreg "CURRENTUSER","Software\\Hidemaruo\\TuruKame\\Config";
loaddll getregstr("TuruKameDir") + "tkinfo.dll";
closereg;
if( result & dllfunc("IsTuruKame" ) )##MainWnd = dllfunc("MainWnd");
else ##MainWnd = -1;
freedll;

##i = 1;
##j = 0;
##main = hidemaruhandle(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];
    Menu:
    menu basename2 + " は更新されています。保存しますか?",
      "(&Y)はい",
      "(&N)いいえ",
      "(&C)キャンセル";//[Esc] も効きます
    if( result == 1)goto Menu;
    else if( result == 2 || result == 3){
      if( result == 2 )save;
      setactivehidemaru ##main;
      closehidemaruforced ##handle[##i];
    }
  }
  ##i = ##i + 1;
}
setactivehidemaru ##main;

[ ]
RE:02539 鶴亀本体のみ残したいNo.02540
haru さん 01/10/23 11:42
 
ひろさん、今日は。

> 必ずしもダイアログでなくメニューでよいなら、仰るとおり出来ます。

ありがとうございます。
ところで、実行してみましたが、何も起こりません。
何か##jがいつも0みたいなのですが。
よろしくお願いします。

それと、このマクロは秀丸と兼用できるのでしょうか?

[ ]
RE:02540 鶴亀本体のみ残したいNo.02541
ひろ さん 01/10/23 12:20
 
 haru さん今日は、ひろです。
> ところで、実行してみましたが、何も起こりません。
 手元では問題ないようですが??

> それと、このマクロは秀丸と兼用できるのでしょうか?
 出来ます。

[ ]
RE:02541 鶴亀本体のみ残したいNo.02542
haru さん 01/10/23 13:21
 
ひろさん、今日は。

> 手元では問題ないようですが??
私の勘違いでした。

 それと、このマクロの仕様なんですが、題名にもあるんですが、
鶴亀エディタで実行したときは、鶴亀メール本体のみ残すようにし
てして頂けませんか?勿論、秀丸はこの時対象外です。
 舌足らずで、すみません。
 よろしくお願いします。

[ ]
RE:02542 鶴亀本体のみ残したいNo.02543
ひろ さん 01/10/23 17:53
 
 haru さん今日は、ひろです。
>  それと、このマクロの仕様なんですが、題名にもあるんですが、
> 鶴亀エディタで実行したときは、鶴亀メール本体のみ残す
 起動したエディタウィンドも閉じても構わないんですね。
//-------------------------------------------------------------------
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;
freedll;

##i = 1;
##j = 0;
##main = hidemaruhandle(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;
}
setactivehidemaru ##main;
if( ##all ){
  call Menu;
  if( ##return == 2 || ##return == 3){
    if( ##return == 2 )save;
    quit;
  }
}
endmacro;

Menu:
  while(1){
    menu basename2 + " は更新されています。保存しますか?",
      "(&Y)はい",
      "(&N)いいえ",
      "(&C)キャンセル";//[Esc] も効きます
    if( result != 1)return result;
  }

[ ]
RE:02543 鶴亀本体のみ残したいNo.02546
haru さん 01/10/24 10:24
 
ひろさん、今日は。

早速改造していただき、ありがとうございます。
前回もそうしていたんですが、

$menu[0] = "新規秀丸にする";
$menu[1] = "この秀丸を残す";
menuarray $menu, 2;
if ( result == 0 ) endmacro;
if ( result == 1 ) newfile;
をマクロの先頭に付けて、使っています。

 今回もこれを付けて、秀丸の時だけ表示したいのですがどこに付
けて良いのかわかりません。教えていただけませんか?
 よろしくお願いします。


[ ]
RE:02546 鶴亀本体のみ残したいNo.02547
ひろ さん 01/10/24 12:24
 
 haru さん今日は、ひろです。
> 前回もそうしていたんですが、
<中略>
> をマクロの先頭に付けて、使っています。

else ##MainWnd = -1;
の部分を
else{
  ##MainWnd = -1;
  $menu[0] = "新規秀丸にする";
  $menu[1] = "この秀丸を残す";
  menuarray $menu, 2;
  if ( result == 0 ) endmacro;
  if ( result == 1 ) newfile;
}
としてください。

[ ]
RE:02547 鶴亀本体のみ残したいNo.02548
haru さん 01/10/24 13:22
 
ひろさん、今日は。

>else ##MainWnd = -1;
>の部分を
>else{
>  ##MainWnd = -1;
>  $menu[0] = "新規秀丸にする";
>  $menu[1] = "この秀丸を残す";
>  menuarray $menu, 2;
>  if ( result == 0 ) endmacro;
>  if ( result == 1 ) newfile;
>}
>としてください。

ありがとうございます。やってみます。

[ ]
RE:02548 Subject: 更新されていないのにNo.02555
haru さん 01/10/29 11:16
 
ひろさん、こんにちは。

 いつも改造ばかりお願いして、申し訳ないので、自分でしようと
思い、最近作っていただいたマクロを改造してみました。
 が、1点だけうまくいきません。改造点は、複数の秀丸の中から、
次々に1個ずつ秀丸に対して、残すどうかの問い合わせを行い、更
新されていれば更に保存するかどうかのこれまた問い合わせを行う
というものです。
 メニューの3"残す秀丸を選ぶ"がそれです。

以下にマクロ全文を掲載します。コメントその他、若干手を加えま
した。すみません。

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;
else{
  ##MainWnd = -1;
  $menu[0] = "(&1)この秀丸を残す";
  $menu[1] = "(&2)新規秀丸にする";
  $menu[2] = "(&3)残す秀丸を選ぶ";
  $menu[3] = "(&4)全ての秀丸終了";
  menuarray $menu, 4;
  if ( result == 0 ) endmacro;
  if ( result == 2 ) newfile;
  if ( result == 4 ) exitall;;
  #rslt = result;
}
freedll;

##i = 1;
##j = 0;
##main = hidemaruhandle(0);//現在フォーカス中のもの→##main
while(##i < hidemarucount){
  ##wnd = hidemaruhandle(##i);
  if( ##wnd != ##MainWnd){
    ##handle[##j] = hidemaruhandle(##i);
    ##j = ##j + 1;
  }
  ##i = ##i + 1;
}
##i = 0;
if (#rslt != 3){
  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{
  while(##i < ##j){
    setactivehidemaru ##handle[##i];
    question basename2 + " この秀丸を残しますか?";
    if(!result){
      closehidemaru ##handle[##i];
      message str(result);          //このメッセージ?
      if( !result ){
        setactivehidemaru ##handle[##i];
        call Menu;
        if( ##return == 2 || ##return == 3){
          if( ##return == 2 ) save;
          setactivehidemaru ##main;
          closehidemaruforced ##handle[##i];
        }
      }
    }
    ##i = ##i + 1;
  }
}

setactivehidemaru ##main;
if( ##all ){    //鶴亀エディタの時
  call Menu;
  if( ##return == 2 || ##return == 3){
    if( ##return == 2 ) save;
    quit;
  }
}
if (#rslt == 3){
  question basename2 + " この秀丸を残しますか?";
  if(!result) exit;
}

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;
  }


 この中の59行目のmessageの表示が更新されていないファイルに対
しても、resultが0になってしまいます。
 何かおかしいでしょうか?

[ ]
RE:02555 更新されていないのにresultが0No.02557
ひろ さん 01/10/29 18:05
 
 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;
  }

[ ]
RE:02557 更新されていないのにresultが0No.02558
haru さん 01/10/29 22:14
 
ひろさん、こんばんは。
毎回毎回、ありがとうございます。

> こういった場合は、解らなければ既存のマクロを改造するのではなく、ま
>ずその部分だけのマクロを、別に作ってみるとよいでしょう。そうしないと、
>改造の仕方が良くないのか、設計段階で良くないかなどが区別できません。
すみません。これからは、そうしたいと思います。

> マクロヘルプを見ていただくと、
>> closehidemaru 番号     (文)
>> 番号(ハンドルも可)で指定した秀丸を終了させます。ただし、自分自身を指定
>することはできません。
>> 指定した秀丸がまだファイルを保存してない場合はclosehidemaruは失敗します。
>と記載があります。
これは、更新していなくても保存していなければ失敗する、という意味ですか?

[ ]
RE:02558 更新されていないのにresultが0No.02561
ひろ さん 01/10/30 12:14
 
 haru さん今日は、ひろです。
> >> 番号(ハンドルも可)で指定した秀丸を終了させます。ただし、自分自身を指定
> >することはできません。
<中略>
> これは、更新していなくても保存していなければ失敗する、という意味ですか?
 この前半部分がポイントなので、そういうことになります。

[ ]
RE:02561 更新されていないのにresultが0No.02563
haru さん 01/10/30 17:18
 
ひろさん、今日は。

> この前半部分がポイントなので、そういうことになります。

わかりました。ありがとうございます。

[ ]
RE:02533 鶴亀本体がなければ実行しないNo.02594
haru さん 01/11/06 11:13
 
ひろさん、こんにちは。いつも、御世話様です。
いろいろ、改造していただき本当にありがとうございます。

お忙しい中、恐縮ですが、

鶴亀本体を終了させてしまい、鶴亀メールのエディタ上でこのマク
ロを実行させた時、動いてしまいます。「鶴亀本体が稼働していま
せん」等のメッセージを表示して、マクロを終了させたいのですが。

よろしくお願いします。
お時間のある時にやっていただければ幸いです。

[ ]
RE:02594 鶴亀本体がなければ実行しないNo.02595
ひろ さん 01/11/06 12:04
 
 haru さん今日は、ひろです。
> 鶴亀本体を終了させてしまい、鶴亀メールのエディタ上でこのマク
> ロを実行させた時、動いてしまいます。「鶴亀本体が稼働していま
> せん」等のメッセージを表示して、マクロを終了させたいのですが。
 その心算でしたので、当然そうでしょうね。
 動作確認していませんが、

openreg "CURRENTUSER","Software\\Hidemaruo\\TuruKame\\Config";
loaddll getregstr("TuruKameDir") + "tkinfo.dll";
closereg;
//鶴亀か?
if( result & dllfunc("IsTuruKame" ) ){
  //鶴亀本体か?
  ##MainWnd = dllfunc("MainWnd");
  if( ##MainWnd )setactivehidemaru ##MainWnd;
  else{
    message "鶴亀本体が稼働していません。\nマクロを終了します。";
    freedll;
    endmacro;
  }
}
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;
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;
  }

[ ]
RE:02595 鶴亀本体がなければ実行しないNo.02596
haru さん 01/11/06 12:23
 
ひろさん、今日は。

> その心算でしたので、当然そうでしょうね。
> 動作確認していませんが、

早速のお返事ありがとうございます。
恐縮至極にございます。

[ ]