複数の秀丸で表示位置を合わせたいNo.08590
dszhm さん 17/11/25 18:25
 
複数の秀丸で、日本語のファイルからマクロを起動し、
英語用を左に、日本語用を右に、画面一杯に表示し、同時スクロールになるようにし
ていますが、マクロ起動のカーソル位置がファイル先頭で無い場合に、開いた英語側
の位置をマクロで調整する方法をご存知でしたら、ご教示ください。
作ったマクロの該当部分は、

setwindowpos #azx,0,cxworkarea/2,cyworkarea;
moveto #ox , #oy;

setactivehidemaru #cur;
moveto #ox , #oy;
scrolllink #az;

setactivehidemaru #az;
scrolllink #cur;

です。ようは、画面トップ行とカーソル位置を左右で合わせたい、ということです。
よろしくお願いします。

[ ]
RE:08590 複数の秀丸で表示位置を合わせたNo.08591
h-tom さん 17/11/26 15:43
 

h-tom です。

>です。ようは、画面トップ行とカーソル位置を左右で合わせたい、ということです。
>よろしくお願いします。
screentopy キーワードで、表示している先頭のy座標がわかるので、一致する
ように、スクロールやカーソル移動で調整すればいいでしょう。
(disabledraw/enabledraw 使う方法もありますが。)

[ ]
RE:08590 複数の秀丸で表示位置を合わせたNo.08592
秀丸担当 さん 17/11/27 08:10
 

h-tomさんも書かれていますが、disabledrawをした後、enabledrawのパラメータ
でスクロール位置を明示的に指定する方法があります。
例えば以下のようにするといいと思います。

disabledraw;
enabledraw #oy;

[ ]
RE:08592 複数の秀丸で表示位置を合わせたNo.08593
dszhm さん 17/11/27 10:18
 
>disabledrawをした後、enabledrawのパラメータ
>でスクロール位置を明示的に指定する方法があります。
>例えば以下のようにするといいと思います。

投稿後に試してみたのですが、

>disabledraw;
>enabledraw #oy;

では、思った通りに動いてくれなかった、と思います。

一応、自分なりに解決策を見つけたので、
同じ悩みを持つユーザさんが現れる場合に備えて

#cur = hidemaruhandle( 0 );
#ox = x;
#oy = y;

(途中省略)

openfile directory2 + "\\" + $othr;
#az = hidemaruhandle( 0 );
setwindowpos #azx,0,cxworkarea/2,cyworkarea;
gofiletop;

setactivehidemaru #cur;
gofiletop;
scrolllink #az;

setactivehidemaru #az;
scrolllink #cur;
moveto #ox , #oy;

setactivehidemaru #cur;
moveto #ox , #oy;

ようは、「マクロ起動のカーソル位置がファイル先頭で無い場合」にだめなのだから
「マクロ起動のカーソル位置がファイル先頭」にして「同時スクロール」にしてから
移動する、という手法を取りました。

まとめレスで申し訳ありませんが、
h-tomさん、秀丸担当さん、ありがとうございました。

[ ]
RE:08593 複数の秀丸で表示位置を合わせたNo.08594
秀丸担当 さん 17/11/27 14:41
 

enabledrawではうまくいかなかったということで失礼しました。

別の方法でできているとのことで必要ないかもしれませんが、参考情報として書
いておきます。

enabledrawを使ったとしても、現在のカーソル位置は必ず画面に収まるようにな
るので、画面に収まらない場合は自動調整する場合がありました。
画面は、カーソル上下キーで自動的にスクロールする範囲も除外されます。

例えば、現在のカーソル位置(y)が1000で、画面の高さが50行で、カーソル上下
キーでスクロールする領域が画面上3行、画面下3行の場合、enabledrawで指定で
きる範囲は、1000-3=997から、1000-50+3=953の範囲になります。
この範囲から外れる場合は自動調整されます。
ちょっとややこしいですが、このあたりのこともヘルプに追記させていただきま
す。

yが1000の位置で画面上5行を余らせてスクロールするとしたら先にmovetoしてか
ら以下のような感じになります。
#oy=1000;
moveto 0,#oy;
disabledraw;
enabledraw #oy-5;

あと、同時スクロールになっていると、もう片方もスクロールしてしまうので、
スクロールの調整はあらかじめ同時スクロールがOFFになっている必要もあると
思いまっす。

[ ]