English help on website



disabledraw,enabledraw文(Ver9.20対応版)
目次− disabledraw,enabledraw文
disabledraw文は、画面の書き換えを禁止します。
enabledraw文は、画面書き換えを許可します。

マクロ起動時は許可状態になっています。
長い編集作業を短時間で終わらせたい場合に、まずdisabledrawして作業を開始し、編集が終わったらenabledrawすると効果的です。
ただし、enabledrawを実行するときに画面をすべて書き直すことになるので、短時間で終わる処理をdisabledraw/enabledrawで囲むとかえって処理速度が低下することに注意してください。

disabledrawの状態は、ウィンドウごとに状態を覚えています。disabledrawしてから、setactivehidemaruなどをして他の秀丸エディタに移すとdisabledrawの状態は解除されるので注意が必要です。

単純に描画だけをしないdisabledraw2もあります。
disabledraw;
gofiletop;
beginsel;
gofileend;
cut;
enabledraw;
disabledrawしたのにenabledrawを忘れたままマクロの実行が終了すると、自動的に画面をすべて書き換えます。

enabledrawが実行された時、カーソルが画面のどの位置に表示されるかは秀丸エディタ側が適当に決めてしまいます。
これをマクロ側で制御するには、enabledraw文のパラメータで画面の一番上の行番号(ワープロ的に計算した行番号)を指定してください。
disabledraw2に対するenabledrawでも、y位置の指定が有効です。(V9.19以降)

enabledrawのパラメータで指定されるスクロール位置は、現在のカーソル位置(y)が収まる範囲に自動的に調整されます。
画面は、カーソル上下キーで自動的にスクロールする範囲も除外されます。
例えば、現在のカーソル位置(y)が1000で、画面が50行で、カーソル上下でスクロールする領域が画面上3行、画面下3行の場合、enabledrawで指定できる範囲は、1000-3=997から、1000-50+3=953の範囲になります。
この範囲から外れる場合は自動調整されます。
例:(検索で見つけた文字列をウィンドウの中央に表示する場合)
disabledraw;
searchdown "abc";
enabledraw y - windowheight / 2;
enabledrawの第2パラメータで、横スクロール位置のx座標を指定できます。(V8.89以降)
disabledrawする前の、現在のスクロール位置はscreentopy, screenleftxで取得できます。
例:
#screentopy = screentopy;
#screenleftx = screenleftx;
disabledraw;
//〜何らかの処理
enabledraw #screentopy, #screenleftx;
disabledraw中は、内部的にはウィンドウサイズをゼロとして高速に処理しています。enabledraw後にスクロール位置がずれるのもそのためです。rollup,rolldown等も正しいスクロール量でスクロールしません。

disabledrawをすると、検索後のカーソル状態の情報は失われ、searchdown2などの連続した検索の動作に違いが出てきます。
この問題を解消するには、setcompatiblemodeで0x00800000を指定すると、disabledrawの有無に関わらず、検索後のカーソル状態は維持されます。(V8.66β6以降)

参照:
 影響の及ぶ範囲(execmacro)
 影響の及ぶ範囲(アクティブ切り替え)
 disabledraw2