ウィンドウ3枠時のエディタ表示復元についNo.00900
プックン さん 08/03/18 00:43
 
ウィンドウ3枠区切りのときに、フォルダ移動後に
本に表示していたメールの位置を復元したい。
マクロ実行後のカーソル位置移動が、どのようにすればうまくいくのか
どなたかよい方法をご存知ないでしょうか?
カーソル位置を記憶しておいて、フォルダ移動処理終了後に
メール表示領域を復元したい。

(1)フォルダ移動前のカーソル位置を記憶
(2)別フォルダ選択処理を実施
(3)元フィルダ選択処理
(4)表示していたメールの表示領域を復元

どのようにすれば、上記動作ができるかどなたかご存知の方が
いましたらアドバイスしていただけませんでしょうか?。
よろしくお願いいたします。

loaddll "TKInfo.dll";
//カーソル位置を記憶
##x = x ;
##y = y ;
//マクロ開始時の画面の先頭の行のy座標を取得する。
##sc_ty = screentopy ;
//マクロ開始時の画面の先頭の行のy座標を取得する。
//画面の最後に移動し、座標を取得
goscreenend ;
##sc_ex = x ;
##sc_ey = y ;
message "カーソル  x=" + str(##x) + ",y=" + str(##y) + "\n" +
        "screen topy=" + str(##sc_ty) + "\n" +
        "screen endx=" + str(##sc_ex) + ",y=" + str(##sc_ey) ;
//現在のフォルダを記憶
$$folder = dllfuncstr( "CurrentFolder" );
//別フォルダに移動。例として"受信"フォルダに移動
##n = dllfunc( "SelectFolder", "", "受信" );
//元のフォルダに移動
##n = dllfunc( "SelectFolder", "", $$folder );
//ここで、表示されているメールのカーソル移動を実施して
//元に表示していた領域を復元したい。
//移動処理:どのようにすれば元に表示していた領域を復元できるのか
//アドバイスよろしくお願いします。

freedll;
endmacro;


[ ]
RE:00900 ウィンドウ3枠時のエディタ表示No.00901
Iranoan さん 08/03/18 01:50
 
 プックンさん今日は、Iranoan です。
> マクロ実行後のカーソル位置移動が、どのようにすればうまくいくのか
> どなたかよい方法をご存知ないでしょうか?
 DisableDraw2() 関数を使えばよいのでは?

[ ]
RE:00901 ウィンドウ3枠時のエディタ表示No.00902
秀まるお さん 08/03/18 09:53
 
 EnableDraw2関数のパラメータにscreentopyの値を指定してやればいいみた
いです。

 それか、秀丸マクロのenabledrawでもいいみたいです。

    moveto ##x, ##y;
    disabledraw;
    enabledraw ##sc_ty;

 で一応移動すると思います。

[ ]
RE:00902 ウィンドウ3枠時のエディタ表示No.00904
プックン さん 08/03/18 23:30
 
Iranoan さん、秀まるお様回答ありがとうございます。
"EnableDraw2","enabledraw"でカーソルが画面のどの位置に表示されるか
を制御できるとは知りませんでした。目からうろこです。
早速試してみたところ、無事希望どおりの動作になりました。
ありがとうございました。

loaddll "TKInfo.dll";
//秀丸メール本体ウィンドウの描画を禁止
//フォルダ枠も含めて描画禁止
//DisableDraw関数(TkInfo.dll)
##n = dllfunc("ExecAtMain", "DisableDraw",1);

//カーソル位置を記憶
##x = x ;
##y = y ;
//マクロ開始時の画面の先頭の行のy座標を取得する。
##sc_ty = screentopy ;
//マクロ開始時の画面の先頭の行のy座標を取得する。
//画面の最後に移動し、座標を取得
goscreenend ;
##sc_ex = x ;
##sc_ey = y ;
message "カーソル  x=" + str(##x) + ",y=" + str(##y) + "\n" +
        "screen topy=" + str(##sc_ty) + "\n" +
        "screen endx=" + str(##sc_ex) + ",y=" + str(##sc_ey) ;
//現在のフォルダを記憶
$$folder = dllfuncstr( "CurrentFolder" );
//別フォルダに移動。例として"受信"フォルダに移動
##n = dllfunc( "SelectFolder", "", "受信" );
//元のフォルダに移動
##n = dllfunc( "SelectFolder", "", $$folder );
//表示されているメールのカーソル移動を実施して
//元に表示していた領域を復元。
//マクロ開始時のカーソル位置に移動。
moveto ##x, ##y;
//ウィンドウの描画を実施。表示する先頭を指定して実行。
##n = dllfunc("EnableDraw2", ##sc_ty);

freedll;
endmacro;


[ ]