whileループ時の最小化でNo.06881
水銀水 さん 00/11/24 19:52
 

 いつもお世話になっておりますm(_ _)m
拙作マクロの利用者からの報告で気づいた「whileループ」で
発生する障害(?)についてです。

●whileループした秀丸を最小化した際の動作
 例えば、下記のようなマクロを実行させた際、当該秀丸は、
「最大化<->元のサイズに戻す」は問題なく動作しますが、最小化
させた際に、タスクバーから元のサイズに戻せなくなるようです。
(この時、次の秀丸、前の秀丸、最大化も実行不可)

title "while ループ中";
while(1){
##s=keypressed;
if(##s==0x1B)break;//これも不要と言えば不要ですが(^^;
}

●拙作マクロ「kakimacD」で最小化した際の動作
 このマクロ(http://www.biwa.ne.jp/~akioda/kakimac/dl/index.htm)
を実行させて検索する状態になった際に最小化させると、上記の状態に
加えて、「終了」さえ選択できなくなり、強制終了させるしか方法がな
くなるようです。

 以上、2点、秀丸3.05、Windows98SE、Windows2000で確認しました
が、そちらでも再現しますでしょうか?


[ ]
RE:06881 whileループ時の最小化でNo.06883
encodingshiftjis さん 00/11/24 21:37
 
> 以上、2点、秀丸3.05、Windows98SE、Windows2000で確認しました
>が、そちらでも再現しますでしょうか?

keypressedキーが押されたかどうかを表します。disablebreakされた状態でのみ利用
可能です。
キーが押されていた場合はそのキーコード、押されてなかった場合は0です。
keypressedが1回実行されると、メッセージキューからキーコードを取り出します。
なので、

title "while ループ中";
disablebreak;
while(1){
##s=keypressed;
if(##s==0x1B)break;//これも不要と言えば不要ですが(^^;
}

にして実行しましたが、現象は同じになります。 WindowsMe ,秀丸3.06β3



[ ]
RE:06883 whileループ時の最小化でNo.06884
encodingshiftjis さん 00/11/24 22:38
 
   ##s=inputchar("while ループ中");
は 安全でした。代替可能かどうかはわからないが
if( iskeydown(0x1B) )
は iskeydown の判定の前に マクロ中断?のほうが先に
効いてしまう。disablebreak にすると if(iskeydown(0x1B) も
効かなくなる。

[ ]
RE:06883 whileループ時の最小化でNo.06886
水銀水 さん 00/11/25 20:12
 

 あ、disblebreakを忘れてました(^^;
で、怪我の功名とでも言いましょうか、おかげさまで、
「純粋なwhileループではタスクバーから「終了」は選択
できるが、keypressedが有効な場合は、「終了」も選択
できない」という動作にまで限定できたみたいです。

(もしかすると、whileループにif文があったり、ある種
のネストがあると正常に動作しなかった不具合が影響して
いるのかと心配したりしましたが…。whileループに入った
瞬間、CPU使用率が100%に跳ね上がるもの、当然なよう
な、不気味なような…)


[ ]
RE:06881 whileループ時の最小化でNo.06893
秀丸担当 さん 00/11/27 18:41
 
>●whileループした秀丸を最小化した際の動作

再現しました。
これは、まずいです。
修正しておきます。

[ ]