HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2023
0207
とあるプログラマウィンドウIDが初期化済みかどうかを返す関数3解決


とあるプログラマ

リンク

2023/2/7(Tue) 17:45:24|NO.99084

前々から思っていることですが、指定したウィンドウIDが初期化済みかどうかを調べる関数はなぜないのでしょうか。

HSPではscreen、bgscr、bufferで指定したIDのウィンドウを初期化しないと使えませんし、未初期化のウィンドウIDを指定してしまうとエラーでプログラムが中断してしまいます。
しかし指定したIDのウィンドウが使われているかどうかを調べる方法が存在しないので、未然にエラーを防ぐのも困難です。(gselすらエラーになるのでどうしようもない)

一応 ginfo_newid で未初期化ウィンドウのIDを調べて、指定したウィンドウIDと一致していれば〜 ということもできますが、この場合はウィンドウIDが連番で作られている場合に限ります。

なので

screen 0 screen 5 mes ginfo_newid
こういう場合は対応不可です。


いままでこの関数が実装されてこなかったということは、ウィンドウIDを連番で作って最初に一括初期化するなどが暗黙のルールなのでしょうか?
私の場合は oncmd で割り込みをガッツリやるので、割り込みのタイミングによっては指定したウィンドウIDがまだ未初期化でエラーといことが多々あります。


なので標準関数として、指定したウィンドウIDが初期化済みかどうかを調べる関数を実装して頂きたい次第です。
検索が下手なので、もしすでに解決策があれば申し訳ないです。



この記事に返信する


TOMATO

リンク

2023/2/7(Tue) 18:51:15|NO.99085

簡単に作れるからないのかも…?


#module #defcfunc IsUsedWindow int id mref bmscr, 96 + id return varptr(bmscr) != 0 #global screen 0 mes IsUsedWindow(0) // ウィンドウID mes IsUsedWindow(1) mes IsUsedWindow(2)



とあるプログラマ

リンク

2023/2/7(Tue) 22:27:37|NO.99086

TOMATOさん、ありがとうございます。
指定したウィンドウIDのBMSCR取るにはgselで指定しないといけないと勝手に勘違いしておりました…
BMSCRで分かるなら確かに不要かもしれませんね。

当方ほとんどWin32API関連のプログラムしか作らないので、初心者や割り込みしないプログラムの製作者だとこの関数の需要があるのかわかりませんが、実装が簡単とあれば標準関数に追加していただいてもよいのかも…?



窓月らら

リンク

2023/2/8(Wed) 15:35:03|NO.99087

公式マクロで対応で良さそうですね。



ONION software Copyright 1997-2023(c) All rights reserved.