moveto命令で移動した行を先頭に表示したNo.41294
YMK さん 24/06/27 11:31
 
題名の件、マクロで
moveto2 0,100;
とすれば、100行目にカーソルが移動するのですが、
その行の表示位置が全体の真ん中付近になってしまうのです。
(例:80行目〜120行目が表示される)

これを一番上(100行目〜)に表示させる方法があれば教えて下さい。

[ ]
RE:41294 moveto命令で移動した行を先頭にNo.41295
こみやんま さん 24/06/27 14:34
 
>題名の件、マクロで
> ......
>これを一番上(100行目〜)に表示させる方法があれば教えて下さい。


これって秀丸の
「動作環境」→「表示/操作」→「カーソル操作」→「上下に余裕を持たせる」に
デフォルトで設定されているだろうから、通常のマクロ方法だと「画面端っこ」には
ならないのではないでしょうか。
(マクロ経由させずにwin32でカーソルだけ移動させたらいくだろうけれどもいろいろ
弊害があるかもw)

その設定を「画面の端」にすれば、以下でいけるでしょうけど、
自分では絶対に使いたくない、おぞましい糞コードだ...


#targetLine = 100;
moveto2 0, #targetLine;
#screeTopY = screentopy;
#subjumpLine = #targetLine - #screeTopY;
#lineCount = linecount2;

#previousLineNo = -1;
if (linecount2 <= #targetLine + #subjumpLine) {
    endmacro;
}

moveto2 0, #targetLine + #subjumpLine;

#targetLine = #targetLine - 1;
while(true) {
    if (screentopy < #targetLine-5) {
       down 5;
    } else if (screentopy < #targetLine) {
       down;
    } else if(screentopy > #targetLine+5) {
       up 5;
    } else if(screentopy > #targetLine) {
       up;
    } else if(screentopy == #targetLine) {
       break;
    } else {
       break; // ?? ありえないはずだけど...
    }

    if (#previousLineNo == lineno) {
        break;
    }

    #previousLineNo = lineno;
}

goscreentop;

[ ]
RE:41295 moveto命令で移動した行を先頭にNo.41296
(-L-) さん 24/06/27 15:00
 
>自分では絶対に使いたくない、おぞましい糞コードだ...

横から失礼します。

>その設定を「画面の端」にすれば、以下でいけるでしょうけど

この設定配下なら、

#height = windowheight;

setwindowsize  windowwidth, 1;
moveto2 0,100;
setwindowsize  windowwidth, #height;

くらいのコードでいけそうな気がします。

[ ]
RE:41295 moveto命令で移動した行を先頭にNo.41297
YMK さん 24/06/27 15:22
 
ありがとうございます

[ ]
RE:41296 moveto命令で移動した行を先頭にNo.41298
YMK さん 24/06/27 15:26
 
ありがとうございます。
無事に動作を確認しました。
また、「画面の端」の設定をしなくても97行目〜くらいから表示されたので、
これだと許容範囲ですし、設定無しで使おうと思います。

[ ]
RE:41298 moveto命令で移動した行を先頭にNo.41299
秀丸担当 さん 24/06/27 16:03
 
enabledrawを使ってスクロール位置を指定する方法があります。
disabledrawをして描画禁止をしてから、enabledrawをするとスクロール位置が不定
になるので、パラメータで明示的に指定できるのですが、これを利用すると結果的に
スクロール位置の指定ということになります。
ただどこでも移動できるわけではなくて画面内にカーソルが入るような位置に限定さ
れます。
マクロヘルプで「スクロール」とか入力すると一応出てくるのですが、「scroll」と
か「setscrollのようなもの」といったキーワードも入れておこうと思います。
例:
#a=100;
disabledraw;
moveto2 0,#a;
enabledraw linenotoy(0,#a);
endmacro;

[ ]
RE:41299 moveto命令で移動した行を先頭にNo.41302
YMK さん 24/06/27 18:30
 
こちらの方法だと、よりチラツキが無く動作しますね
ありがとうございました

[ ]