スクロールする様子が見えない様にスクロNo.42057
虎鉄 さん 12/01/15 16:46
 
別のフォルダに移動し、色々と処理をした後に、現在のフォルダに戻るマクロを
「受信が一段落した時」に登録しています。
この時、現在表示中のメールのスクロール位置を復元したく、以下の様なマクロ
としていますが、これだとスクロールされる様子が見えてしまい困っています。

見えない様にしようと「DisableDraw」を使おうと思いましたが、正しくスクロール
しませんでした。秀丸エディタのマクロヘルプに
 disabledraw中は、〜略〜 正しいスクロール量でスクロールしません。
と書いてありました。
また、「EnableDraw2」にパラメータを与えてみましたが、これもうまく動きません
でした。
(どのような数字を設定しても、メールの先頭から表示される。)

    // 現在のスクロール位置
    #lineno = screentopy;
    #n = dllfunc("DisableDraw",  1);
   
    〜略〜
   
    #n = dllfunc("EnableDraw2", #lineno);
    //
    //// 元のスクロール位置に戻す
    //#i = 0;
    //while (#i < #lineno) {
    //    rollup;
    //    #i = #i + 1;
    //}

そこで質問ですが、スクロールする様子を見えない様にスクロール位置を復元するには
どのようにしたら良いでしょうか?

---------------------------------
Windwos XP Home Edition
秀丸メール Ver.5.72beta26
ヘッダ部分をスクロールしない:ON

=======================================================================
loaddll "TKInfo.dll";

$TARGET_ACCOUNT = "TEST";
$TARGET_FOLDER  = "草稿";

// 現在のスクロール位置
#lineno = screentopy;

// 現在の状態を保存
$current_account = dllfuncstr("CurrentAccount");
$current_folder  = dllfuncstr("CurrentFolder");
#is_thread_view  = dllfunc("IsThreadView");
if (#is_thread_view) #n = dllfunc("SetThreadView", 0);
#mail_index      = dllfunc("MailIndex");

// 対象フォルダをアクティブにする
#n = dllfunc("SelectFolder", $TARGET_ACCOUNT, $TARGET_FOLDER);

// 保存した状態に戻す
#n = dllfunc("SelectFolder", $current_account, $current_folder);
#n = dllfunc("SetMailIndex", #mail_index);
if (#is_thread_view) #n = dllfunc("SetThreadView", #is_thread_view);

// 元のスクロール位置に戻す
#i = 0;
while (#i < #lineno) {
    rollup;
    #i = #i + 1;
}

freedll;
endmacro;
=======================================================================



[ ]
RE:42057 スクロールする様子が見えない様No.42058
h-tom さん 12/01/15 20:33
 

h-tom です。

>また、「EnableDraw2」にパラメータを与えてみましたが、これもうまく動きません
>でした。
>(どのような数字を設定しても、メールの先頭から表示される。)
EnableDraw2 を使うなら、その直前に、
  moveto 0, #lineno;
を、追加してみてはどうでしょう。

[ ]
RE:42058 スクロールする様子が見えない様No.42059
虎鉄 さん 12/01/15 21:06
 

h-tom さん。
アドバイスありがとうございます。

>EnableDraw2 を使うなら、その直前に、
>  moveto 0, #lineno;
>を、追加してみてはどうでしょう。

アドバイス通り実行してみたところ、「ワープロ的」に2行ずつずれてしまうので、
    movetolineno 0, #lineno;
を試したら、希望の動作となりました。

改めて、ありがとうございました。




[ ]