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

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



記事削除

記事NO.パスワード
(質問が解決したスレッドは他の利用者に活用してもらうため、削除しないようお願いします)

NO.99084への返信

マスコット

好きなマスコットを選んでください。

名前

e-mail
HOME
  1. 初めて利用する方は、HSP3掲示板の使い方をお読みください。
  2. 不要部分の多い長いスクリプトの投稿は ご遠慮ください。
  3. 書き込みは自動改行されません。適度に改行を入れてください。
  4. スクリプトは小文字の<pre>〜</pre>で囲むと見やすく表示できます。

削除用パスワード

エラー発生時、再送信すると二重送信になることがあります。
回答が得られたら、お礼書き込み時に[解決]チェックしてください。
SPAM防止のためURLから始まる文章は投稿できません。
SPAM防止のため英文字のみの本文を投稿することはできません。

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