マクロ実行中は画面を書き換えない方法No.10485
Iranoan さん 06/09/13 13:01
 
 秀まるおさん、皆さん今日は、Iranoan です。
 マクロ実行中は画面を書き換えない良い方法は無いでしょうか?
 もちろん DisableDraw() 関数の存在は知っていますが、秀丸エディタと異
なり、disabledraw 文を使ったときも、EnableDraw[2]() 関数や enabledraw
文を使うまで、本文が真っ白になってしまいます。

[ ]
RE:10485 マクロ実行中は画面を書き換えなNo.10491
秀まるお さん 06/09/15 08:29
 
 今さらのお返事ですみませんが、良い方法は別に無いです。

 本文が真っ白になってしまうのは、たしかDisableDrawしてる最中はメール内
容のセット、つまり、メール内容表示用の秀丸エディタ相当部分にメール内容を
渡す処理自体を省略してるせいかと思います。

 DisableDrawしてる最中に、ユーザーさんが挙動不審と勘違いしないようにす
るためには、例えばタイトルバーに「マクロ処理中」とかセットしてやるとかし
たらいいかなぁと思います。

[ ]
RE:10491 マクロ実行中は画面を書き換えなNo.10492
Iranoan さん 06/09/15 15:27
 
 秀まるおさん今日は、Iranoan です。
>  DisableDrawしてる最中に、ユーザーさんが挙動不審と勘違いしないようにす
> るためには、例えばタイトルバーに「マクロ処理中」とかセットしてやるとかし
> たらいいかなぁと思います。
 ユーザさんの勘違いより、「受信が一段落した時」のマクロで DisableDraw
関数を使っていると、メールを読んでいる時に本文が真っ白になってしまうを
気にしています。

> メール内容表示用の秀丸エディタ相当部分にメール内容を
> 渡す処理自体を省略してるせいかと思います。
 出来れば、この省略をなくしていただけないでしょうか?

[ ]
RE:10492 マクロ実行中は画面を書き換えなNo.10506
秀まるお さん 06/09/19 13:32
 
 ソースコードを見直したんですが、秀丸エディタ相当部分に関して、特にこれ
といった難しい処理はしてなくて、単純に、秀丸マクロのdisabledraw相当の処
理をしているだけでした。

 disabledrawした状態で画面の再描画が発生すると、ただ白く(背景色で)塗
りつぶすだけって処理になってるようです。秀丸エディタがですけど。

 例えば、

    disabledraw;
    message "A";
    enabledraw;

 ってマクロを実行して、出てきたメッセージボックスをドラッグしてやると、
その跡は真っ白になります。

 特にメッセージボックスのような物を出さない限りは画面が真っ白になること
は無いはずだと思いますけど???。具体的に、例えば何かtkinfo.dllの特定関
数を呼び出して画面が真っ白になるとかってことであれば、それはそれで直せる
かもしれません。

[ ]
RE:10506 マクロ実行中は画面を書き換えなNo.10507
Iranoan さん 06/09/19 15:35
 
 秀まるおさん今日は、Iranoan です。
>     disabledraw;
>     message "A";
>     enabledraw;
>
>  ってマクロを実行して、出てきたメッセージボックスをドラッグしてやると、
> その跡は真っ白になります。
 こちらについては、致し方ないので気にしていません。

>  特にメッセージボックスのような物を出さない限りは画面が真っ白になること
> は無いはずだと思いますけど???。具体的に、例えば何かtkinfo.dllの特定関
> 数を呼び出して画面が真っ白になるとかってことであれば、それはそれで直せる
> かもしれません。

#n = dllfunc( "EnvChanged" );
#n = dllfunc( "DisableDraw", 0 );
#time = tickcount;
while( ( tickcount - #time ) / 1000 < 10 );
#n = dllfunc( "EnableDraw", 0 );

では画面が真っ白になりませんが、

#n = dllfunc( "DisableDraw", 0 );
#n = dllfunc( "EnvChanged" );
#time = tickcount;
while( ( tickcount - #time ) / 1000 < 10 );
#n = dllfunc( "EnableDraw", 0 );

の順序だと真っ白になります。元々後者のようにしたのは、EnvChanged() 関
数で必ず本文先頭が表示されてしまうからです。

[ ]
RE:10507 マクロ実行中は画面を書き換えなNo.10508
秀まるお さん 06/09/19 16:48
 
 これはこれで、実は秀丸エディタでも同じでして、例えば、

disabledraw;
loadfile "c:\\temp.txt";
#time = tickcount;
while( ( tickcount - #time ) / 1000 < 10 );
enabledraw;

 ってマクロを実行すると、同じように真っ白になりますが…。

 とりあえずこういう場合に真っ白にならないように直します。

 あと、EnvChangedでメール表示位置が先頭になってしまうのは、これはこれで
調べてみたらバグでした。メール表示に関わる設定(フォント名とか)が変化し
た場合はメール内容を再表示しようとする作りになっていましたが、その「変化
したかどうか」の判定が間違っていて、必ず再表示してしまう作りになっました。
これも直します。

[ ]
RE:10508 マクロ実行中は画面を書き換えなNo.10509
Iranoan さん 06/09/19 18:33
 
 秀まるおさん今日は、Iranoan です。
> disabledraw;
> loadfile "c:\\temp.txt";
> #time = tickcount;
> while( ( tickcount - #time ) / 1000 < 10 );
> enabledraw;
>
>  ってマクロを実行すると、同じように真っ白になりますが…。
 これは insertfile 文と違いファイルを新規で読み込むので当然ですよね。
ただ、
>  あと、EnvChangedでメール表示位置が先頭になってしまうのは、これはこれで
> 調べてみたらバグでした。
これが変われば、この時点で真っ白になることが無くなるでしょうから、何の
問題もありません。どうも有り難うございました。

[ ]