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


HSPTV!掲示板


未解決 解決 停止 削除要請

2007
0207
hirokiボタン等押した時のstatの数値について14解決


hiroki

リンク

2007/2/7(Wed) 14:25:03|NO.5495

 初心者的な質問で申し訳ありませんが、下記のようにボタンを何個か作っても、
数値だけ変えて飛ぶ先は同じ場合、だらだらと書くのはあれですよね。


pos 475,70 button "参照",*chp0 pos 475,100 button "参照",*chp1 pos 475,130 button "参照",*chp2 pos 475,160 button "参照",*chp3 pos 475,190 button "参照",*chp4 stop *chp0 no=0 goto *fileset stop *chp1 no=1 goto *fileset stop *chp2 no=2 goto *fileset stop *chp3 no=3 goto *fileset stop *chp4 no=4 goto *fileset stop *fileset stop

 いろいろ調べた結果、ボタンを押した時そのボタンのオブジェクトIDがstatに
入るみたいなんですけど、僕の調査結果は合ってるのでしょうか。
合ってるなら、statを調べるだけでスッキリ書けます。
いろいろ探したけど解りませんでした。
以上、よろしくお願いします。



この記事に返信する


Irisawa

リンク

2007/2/7(Wed) 14:56:22|NO.5497

これは公式には公開されていない情報なので知らない人も多いようですが(実質ぼくもつい
最近まで知りませんでした)、ボタンを押したときのidがstatに格納されるのは正しい動作
です。



ハテナ

リンク

2007/2/7(Wed) 16:07:12|NO.5502

私も前まで知りませんでした、便利なのに。

pos 475,70 :button "参照",*chp :mes stat pos 475 :button "参照",*chp :mes stat pos 475 :button "参照",*chp :mes stat pos 475 :button "参照",*chp :mes stat pos 475 :button "参照",*chp :mes stat pos 0,0 stop *chp mes stat stop



hiroki

リンク

2007/2/7(Wed) 16:31:34|NO.5504

やっぱりIDなんですね。
情報ありがとうございました。

でも公開されていないとは、もったいない。



hiroki

リンク

2007/2/7(Wed) 17:11:42|NO.5505

あれれ、ボタン10個でかきなおしたら、statがどのボタン押しても
1のままになります。
非公開の由縁かな。


dialog ""+stat,0 n=stat ;dialog ""+n,0 repeat 10 if bid.cnt=n : no=cnt : break loop



KIMU

リンク

2007/2/7(Wed) 17:45:20|NO.5506

ん?

repeat 20 button ""+cnt,*tes objprm stat,"ID( "+stat+" )" loop stop *tes dialog "ID( "+stat+" )",0 title str(stat) stop

> dialog ""+stat,0
> n=stat
dialog のOKを押してるから stat に1が入ってる
dialog を実行する前に n に stat を代入しないと意味が無い
バグの元になるので、ラベル行の次で stat を保存した方がいい
(命令によってはstat値が変更されるので)



hiroki

リンク

2007/2/8(Thu) 11:15:13|NO.5515

 原因が解りました。

 製作したプログラムは、HSP開発wikiで発表されているnaznyarkさん製作の"mod_customizebutton.hsp"を
利用してカスタムボタンに一部変更されていて、ボタンを押すと同時にそのモジュールがstat情報を横取り
し、そのモジュールの中でstat情報が変更されているようです。
従い、そのモジュールは使用せず標準ボタンだけで実行するとうまく動作しました。
仕方なく、前のコードに直しました。とほほ


> 非公開の由縁かな。

 僕の早とちりでご迷惑をおかけしました。
HSP側は決して悪くございません。^^;


> dialog のOKを押してるから stat に1が入ってる

 いろいろ試しているうちにそのような書き方になったようですね。
すぐ気がつき直しました。
デバッグ用でしたしね。



umihara

リンク

2007/2/8(Thu) 17:04:03|NO.5523

HSPプログラミングガイドの配置オブジェクトの項に下記の記述がありますが、
これとは意味が違うのかな?

> オブジェクトIDが必要な時は、オブジェクトの一部を後から消したい時、
> 状態を変更したい時などです。また、押しボタンが押された時には、
> システム変数statに押されたボタンのオブジェクトIDが代入されます。



Irisawa

リンク

2007/2/8(Thu) 21:58:01|NO.5533

>>umiharaさん
すみません。
書いてあったみたいですね。どうも、申し訳ありません。



naznyark

リンク

2007/2/10(Sat) 01:13:33|NO.5552

> 製作したプログラムは、HSP開発wikiで発表されている
> naznyarkさん製作の"mod_customizebutton.hsp"を利用して
> カスタムボタンに一部変更されていて、ボタンを押すと同時に
> そのモジュールがstat情報を横取りし、そのモジュールの
> 中でstat情報が変更されているようです

 なにか勘違いをしているかおかしな命令の使い方をしている
可能性があります。普通のボタンと同じように使用すれば
そのような状態にはならないはずです。

 下のプログラムで確認してください。
ボタンを押したときにボタンの次の行に書かれた数字が
タイトルバーに表示されれば正常な動作です。
(標準のボタンと同じく押されたボタンのオブジェクトIDが
stat に代入されます。)
 正常に動作しないのなら改めて報告してください。

#include "mod_customizebutton.hsp" button goto "test", *push0 : o = stat : mes o custombutton o, -2, 0xFF0000 button gosub "test", *push1 : o = stat : mes o custombutton o, -2, 0x00FF00 button goto "test", *push0 : o = stat : mes o custombutton o, -2, 0x0000FF button gosub "test", *push1 : o = stat : mes o custombutton o, -2, 0xFFFFFF stop *push0 title "" + stat stop *push1 title "" + stat return

 なお旧版の custombutton 命令実行後に stat に代入されるのは
ボタンのオブジェクトIDではありません。
(ボタンのオブジェクトID自体は命令実行後も変更されません。)



hiroki

リンク

2007/2/10(Sat) 09:21:00|NO.5560

>  なにか勘違いをしているかおかしな命令の使い方をしている
> 可能性があります。普通のボタンと同じように使用すれば
> そのような状態にはならないはずです。

 うーん、おかしいですね。
下記のようにして、変な命令は使用していませんが。


objsize 32,32 pos 0,18 : button "",*exe0 : bid.0=stat pos 32,18 : button "",*exe1 : bid.1=stat pos 64,18 : button "",*exe2 : bid.2=stat pos 96,18 : button "",*exe3 : bid.3=stat pos 128,18 : button "",*exe4 : bid.4=stat pos 0,50 : button "",*exe5 : bid.5=stat pos 32,50 : button "",*exe6 : bid.6=stat pos 64,50 : button "",*exe7 : bid.7=stat pos 96,50 : button "",*exe8 : bid.8=stat pos 128,50 : button "",*exe9 : bid.9=stat ................. gosub ................. stop // ここはサブルーチンね repeat 10 if (cnt=0) or (cnt=5) : ix=0 if cnt<5 : iy=0 : else : iy=32 custombutton bid.cnt, 3,ix,iy+(page*64),0x0017,-16 ix+=32 loop

 ところで、 naznyarkさんが示してくれたサンプルですが、一番下の白いボタンのみIDが3になり
それ以外は3つとも、IDが1になりました。titleの方ね。
ボタンの下に表示されているIDは、0〜3と正常に表示されています。



naznyark

リンク

2007/2/11(Sun) 00:43:36|NO.5581

環境依存性のある不具合的な動作のようですね。
hirokiさんのスクリプトには問題なさそうです。どうもすいませんでした。

*drawitem の直後に oldstat=stat として最後の return で return oldstat
とすることで回避できるかもしれません。



hiroki

リンク

2007/2/12(Mon) 08:44:33|NO.5608

返事が遅くなりました。

naznyarkさんのいうとおり、改良してnaznyarkさんのサンプルを試した結果、
うまく動作しました。ありがとうございました。

でも、return rcを消してもいいんですか。



naznyark

リンク

2007/2/14(Wed) 02:38:24|NO.5675

> でも、return rcを消してもいいんですか。

oldstat の値が 0 以外なら全く問題は無いはずです。
また断言はできませんが 0 であっても実質的な問題はないと思います。
(心配なら return 0x7FFFFFFF としておいてボタンのジャンプ先で
if stat == 0x7FFFFFFF : st = oldstat@customizebutton : else : st = stat
という感じにして st の値を stat の代わりに使ってください。)



hiroki

リンク

2007/2/14(Wed) 08:40:43|NO.5678

たびたびありがとうございました。
今のは、ボタンを押すと必ずIDがstatに入るのを前提に作っていますので
直したいと思います。
いろいろありがとうございました。



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