readonly,browsemodeの切り替え動作についNo.01147
プックン さん 08/02/08 01:20
 
秀まるお様、こんばんは。
下記のようなマクロを動作させたときに、
    処理1.で、readonly,browsemodeのときに、書き換えができるように
    処理を実施する。
    マクロでの編集作業後、処理2でreadonly,browsemodeを復元する。
    という処理したつもりでした。
しかし、実際にはマクロをエディタウィンドウで実行したあとに
設定(O) - 編集を許可する(W)にチェックが入った状態でした。
マクロの処理結果が、下記の動作になるのかなと思っていましたが、
予想
    開始時
    readonly mode=1
    browsemode mode=1
    処理中
    readonly mode=0
    browsemode mode=0
    終了時
    readonly mode=1
    browsemode mode=1
実際には、下記のようになりました。
    開始時
    readonly mode=1
    browsemode mode=1
    処理中
    readonly mode=0
    browsemode mode=1
    終了時
    readonly mode=1
    browsemode mode=0
"//処理1"の行+下2行を実行したときに、
    readonly mode=0
    browsemode mode=0
とならないのは、マクロ動作として仕様通りなのでしょうか?。

    loaddll "TKInfo.dll";
    //状態取得
    ##readonly  = readonly ;
    ##browsemode    = browsemode ;
    //処理開始時の情報
    $$s = "開始時\n" ;
    $$s = $$s + "readonly mode=" +str(##readonly) + "\n" ;
    $$s = $$s + "browsemode mode=" +str(##browsemode) + "\n" ;
    //処理1
    if(##readonly)  ##n = dllfunc("EnableEdit");    //、「編集を許可」します。
    if(##browsemode)    browsemodeswitch ;  //閲覧モードの切り替え
    //マクロで編集処理
    $$s = $$s + "処理中\n" ;
    $$s = $$s + "readonly mode=" +str(readonly) + "\n" ;
    $$s = $$s + "browsemode mode=" +str(browsemode) + "\n" ;
   
    //処理2
    if(##readonly)      readonlyswitch ;    //ファイルの書換え禁止/許可の切
り替え
    if(##browsemode)    browsemodeswitch ;  //閲覧モードの切り替え

    $$s = $$s + "終了時\n" ;
    $$s = $$s + "readonly mode=" +str(readonly) + "\n" ;
    $$s = $$s + "browsemode mode=" +str(browsemode) + "\n" ;
    message $$s ;

LEND:
    endmacro;
    freedll;


動作確認環境
OS:Windows2000
秀丸メール:Ver5.00 beta20

[ ]
RE:01147 readonly,browsemodeの切り替えNo.01149
秀まるお さん 08/02/08 09:29
 
 EnableEditを呼び出すとreadonlyおよびbrowsemodeの状態が勝手に変わるの
で、EnableEditを呼び出す前の状態を見てswitchさせるってやり方ではうまく
動作しないです。

   ##n = dllfunc("EnableEdit");
   if( browsemode ) browsemodeswitch;
   if( readonly ) readonlyswitch;

 みたいにしたらいいかと思います。

 それと、EnablEditした状態を元の(編集許可じゃない)状態に戻す(メニ
ュー上のチェックマークを外す)のは、readonlyswitchやbrowsemodeswitchで
は出来ないです。それをやるには、

   ##n = sendmessage( hidemaruhandle(0), 0x0111, 40083, 0 );

 ってしてください。

 トータルでは、

   ##browsemode = browsemode;
   ##readonly = readonly;
   ##n = dllfunc("EnableEdit");
   if( browsemode ) browsemodeswitch;
   if( readonly ) readonlyswitch;

   ...
   ... 処理
   ...
   ##n = dllfunc("AlterSave");

   ##n = sendmessage( hidemaruhandle(0), 0x0111, 40083, 0 );
   if( ##browsemode != browsemode ) browsemodeswitch;
   if( ##readonly != readonly ) readonlyswitch;

 ってな風にすればいいかと思います。

[ ]
RE:01149 readonly,browsemodeの切り替えNo.01155
プックン さん 08/02/09 00:59
 
秀まるお様、こんばんは。

教えていただいた方法で、無事希望の動作となりました。
ご指導ありがとうございました。

[ ]