表示位置を変更しないで、ヘッダを書き換No.04412
Iranoan さん 13/03/03 18:19
 
 秀まるおさん今日は、Iranoan です。
 末尾にマクロを用に、ヘッダを買い換えると、必ず先頭から表示されます。
これは仕様でしょうか?
 こちらの環境は、Windows7+IE8.0+秀丸メール Ver. 6.10 Beta 35 です。
//------------------------------------------------------------
loaddll "tkinfo.dll";
#tmp = dllfunc( "DisableDraw" );
gofileend;//本来行いたいのは、ファイル末尾という訳ではないけれど
disabledraw;
#y = dllfunc("hidemaru_screentopy");
if( !dllfunc( "BeginEditMail", 0 ) )message "編集許可失敗";
$nifty = dllfuncstr( "DeleteHeader", "From" );
#tmp = dllfunc( "SaveEditMail", 0, 0 );
#tmp = dllfunc( "EnableDraw", #y );
enabledraw #y;
freedll;

[ ]
RE:04412 表示位置を変更しないで、ヘッダNo.04413
秀まるお さん 13/03/04 09:34
 
 調べてみたら、一応これは仕様といえば仕様ってことになりそうです。

 実はトレースしてみて分かったことではあるのですが、秀丸マクロの
enabledrawで表示位置(screentopy)を指定しても、カーソルが画面の外に出て
しまう場合は指示された通りの位置にならないようでした。

 例えば秀丸エディタの場合で、ある程度大きなファイルを開いてカーソルをど
こかファイルの途中に位置してる状態で、

    #y = screentopy;
    disabledraw;
    gofiletop;
    enabledraw #y;

 ってマクロを実行すると、マクロ終了後に表示される位置はファイルの先頭に
なってしまいます。

 秀丸マクロのSaveEditMailは、実はそれを実行するとカーソル位置がメール本
文の先頭に移動してしまいます。それのせいで、enabledrawしてもうまくカーソ
ル位置が指定された所に行ってくれないようです。

 それとあと、screentopyが指定出来るのはEnableDraw2の方で、EnableDrawの
方ではパラメータ指定しても無視されるってのもありました。

 総合すると、マクロとしては、

    loaddll "tkinfo.dll";
    #tmp = dllfunc( "DisableDraw" );
    gofileend;//本来行いたいのは、ファイル末尾という訳ではないけれど
    #y = dllfunc("hidemaru_screentopy");
    #cursorx = x; #cursory = y;
    if( !dllfunc( "BeginEditMail", 0 ) )message "編集許可失敗";
    $nifty = dllfuncstr( "DeleteHeader", "From" );
    #tmp = dllfunc( "SaveEditMail", 0, 0 );
    moveto #cursorx, #cursory;
    #tmp = dllfunc( "EnableDraw2", #y );
    freedll;

 のように、SaveEditMailの後にカーソル位置を復元するように直すとうまくい
くようです。
 (gofileendをコメントアウトしてもうまく動きます)

 本来でしたらSaveEditMailでカーソルが勝手にメール本文先頭に移動しないよ
うにすべきかと思いますが、とりあえずはマクロを上記のようにすることで回避
お願いしたいです。

 あと、秀丸マクロのdisabledraw/enabledrawとSaveEditMailを組み合わせた場
合もうまくいかないようです。これは簡単に改良できるので、今から改良してみ
ます。

 あと、ヘルプの方に、EnableDraw2でy座標を指定してもカーソル位置が画面外
だと指定された位置にならないこともちゃんと記述するようにします。

[ ]
RE:04413 表示位置を変更しないで、ヘッダNo.04414
Iranoan さん 13/03/04 16:08
 
 秀まるおさん今日は、Iranoan です。
>     moveto #cursorx, #cursory;
>     #tmp = dllfunc( "EnableDraw2", #y );
 説明も含め、有り難うございました。

[ ]