repeat-loopでの変数監視は避けたく、oncmdを使いWM_COMMANDを捉えて処理をしています。
ウィンドウの切り替えに伴ってフォントサイズや大きさを変える必要があり、WM_COMMANDを発生させたcombox自体をclrobjで消去し、作成し直していますが、実際にcomboxで切り替えをすると、数回に一回stop命令の場所でシステムエラー1が発生し、プログラムが異常終了していまいます。
HSPの管轄外(oncmd内のサブルーチン)でオブジェクトを操作しているためエラーが発生してしまう事自体は理解できるのですが、これを回避する方法が思いつきません。
Win32APIのTimerでの監視もレスポンスと負荷の関係から避けたいと思っています。
現象の再現するほぼ最低限のソースです。
このソースでコンボボックスを何回か切り替えるとシステムエラーが発生します
//#include "hsp3utf.as #const WM_COMMAND 0x0111 screen 0 oncmd gosub *WM_COMMAND_Proc, WM_COMMAND objmode 2 selectorIndex = 0 gosub *DrawWindow stop //ここでシステムエラー *WM_COMMAND_Proc //oncmd 0 //意味ない if ( (lparam == hComBox) && (((wparam>>16) & 0x0000FFFF) == 1) ){ sendmsg hComBox, 0x0147 selectorIndex = stat gosub *DrawWindow } //oncmd 1 //意味ない return *DrawWindow gsel 0 clrobj //オブジェクトの初期化 font "メイリオ", 13 pos 0, 0 objsize 200,30 combox selectorIndex, , "切り替えると時々落ちます1\n切り替えると時々落ちます2" hComBox = objinfo( stat, 2) return
comboxをwinobjで作成もしてみましたが、時々エラーからほぼエラーになってしまい逆効果でした。
別の方法やエラーを発生させない方法をご存じでしたらお願いします。