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


HSPTV!掲示板


未解決 解決 停止 削除要請

2008
1130
わっしいginfo_wy1 の値が -32768 になった?7解決


わっしい

リンク

2008/11/30(Sun) 13:54:36|NO.21149

HSPで作成したソフトを終了させるとき
(メニューバーのクローズボックスなどで閉じるなど)、
ginfo_wx1 / wy1 を得て、これをなんらかのファイル(以下Aと置きます)に保存しておいて、
次回このソフトを起動したときに、Aを読みこんで、
おなじ位置にウインドウを開くようにしてました。

あるとき起動すると、ウインドウが出てきません。
Aを調べてみたら、ginfo_wy1 の該当部分が -32768 になっていました。
この値だと、「ウインドウは画面上の外に開いていたから画面内に見えなかった」
ということがわかりました。

その後、いろいろ試したのですが、
ginfo_wy1 (wx1 でなく、wy1 のほうです)の値が -32768 になる
ということを再現することができませんでした。
(なのでもしかしたら、私のスクリプト内の「ファイルAを書きこむ部分」にバグがあり、
ginfo_wy1 が -32768 を返したのではないのかもしれません。)

ウインドウを最小化にすると ginfo_wy1 の値は -32000 になることはわかったのですが、
-32768 になることは、ネットを調べたりしてもわかりませんでした。

「ginfo_wy1 の値が -32768 になる」ことはあるのでしょうか?
ご存知のかた、ご教授おねがいいたします。



この記事に返信する


f(浮気中)

リンク

2008/11/30(Sun) 16:43:12|NO.21151

普通に0x8000のsignedの値じゃね?
HSPの整数は32bit signedだから、内部的には0xffff8000になってるかもしれんが。



わっしい

リンク

2008/11/30(Sun) 19:52:35|NO.21153

0x8000 = 32768 ですが、
メニューバーをマウスカーソルでドラッグしてウインドウを普通にうごかしている
だけですので、
ginfo_wy1(画面全体の座標系での、ウインドウ左上の y座標)の値が
32768 にはならないと思うんです。


べつの原因として、
「ginfo_wx1 や ginfo_wy1 などを、wait などで間をおくことなく連続して取得したら、
たまに -32768 などのエラー値を返すのかも」
と思いまして、
「ginfo_winx/y と ginfo_wx/y1 の4つを取得してその値をチェック」というのを
10万回やってみましたが、
-32768 になることはありませんでした。

なので、ginfo_wy1 が -32768 を返したというのは何かのまちがいで、
私のスクリプト内の他の部分に問題があったのかもしれません。



f(浮気中)

リンク

2008/11/30(Sun) 20:46:14|NO.21154

ああ、何かの意味をもった返り値なのか?という意味か。
そう意味では、自分は分からん。スマン。



A.C

リンク

2008/12/1(Mon) 11:54:45|NO.21162

どうもこんにちはー、A.Cと申します。

ウインドウを最小化した状態でタスクバーを右クリック→終了すると
マイナス値が書き込まれることがあるそうですがこれじゃないですかね?



わっしい

リンク

2008/12/1(Mon) 14:33:32|NO.21164

こんにちは、はじめまして A.Cさん

試してみましたが、そのときは確かにマイナス値が得られるんですが、
-32000 でした。
最小化中の ginfo_wy1 の値はこうなるみたいです。

ですが一度だけ -32768 という値が得られ、
その後、なにをやってもそれを再現できず、
いまでは自分でも「本当に起こったのか?」とうたがっている状態です。

どなたか、私と同じように ginfo_wy1 の値が -32768 になったご経験のあるかた、
いませんでしょうか?



A.C

リンク

2008/12/1(Mon) 22:02:33|NO.21177

どうも、A.Cです。

なるほど、最小化時では-32000でしたか。
ちょっと調べてみたところ
そもそもウインドウy座標は-32768〜32767の間になるようです。
以下のスクリプトで、y座標-50000の位置にウインドウを出していますが、
強制的に-32768になります。

;※タスクバーを右クリックで終了させてください #uselib "user32" #func MoveWindow "MoveWindow" int,int,int,int,int screen 0,640,480 MoveWindow hwnd,ginfo_wx1,-50000,640,480 title ""+ginfo_wy1 gsel 0,1
ちなみにHSPのwidthではy座標にマイナス値を入れると0になるようですので
ウインドウをwidth以外の方法で移動させていて、
何らかの理由でマイナス方向に大きく移動してしまったのではないかと思うのですが
どうでしょうか。



わっしい

リンク

2008/12/2(Tue) 05:25:37|NO.21192

>ちょっと調べてみたところ
>そもそもウインドウy座標は-32768〜32767の間になるようです。
>以下のスクリプトで、y座標-50000の位置にウインドウを出していますが、
>強制的に-32768になります。

わざわざお調べいただき、ありがとうございました!
なるほど、そういう仕様でしたか。
てっきり -32768 はなんらかの意味を持つエラーコードかと思いこんでました。


>ウインドウをwidth以外の方法で移動させていて、
>何らかの理由でマイナス方向に大きく移動してしまったのではないかと

その可能性ありそうです(^^;
ソースの思い当たるところを見てみたいのですが、
当時のソースを残してませんでした。

今あるのは、あれから2ヶ月くらい更新しつづけたソースでして、
当時から変わってない部分に(ソースの最初のほうですが)、
screen WINID, sizeX, sizeY, mode, wx1, wy1
という部分があるんです。

この wx1, wy1 は、ウインドウの配置を決めるものですが、
ためしに wy1 = -40000 としたあと、この screen 命令を実行し、
ginfo_wy1 を参照してみたら、-32768 に丸められていました。

よって、当時のソースにて、「wy1 に大きなマイナス値が入ってしまっていた」
ということが考えられます。


当時のソースがないため、これ以上 追求しようがなく、
A.Cさんのおかげで「ウインドウy座標は-32768〜32767の間になる」
ということを知ることができたので、
この疑問はこれで終わりにさせていただきます。

ありがとうございました!



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