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


HSPTV!掲示板


未解決 解決 停止 削除要請

2011
0416
souラジオボックス5解決


sou

リンク

2011/4/16(Sat) 10:52:04|NO.38429

連投すいません。
至急なもんで・・・
本題なんですが下記のスクリプトは前のコンボボックスを応用して作ったものです。

// ラジオボタン表示サンプルスクリプト (by Kpan) #include "user32.as" ; 1番目のグループ chkbox "あ", x1 SetWindowLong objinfo(stat, 2), -16, $50000009 | $20000 chkbox "い", x2 sendmsg objinfo(stat, 2), $F4, $9 chkbox "う", x3 sendmsg objinfo(stat, 2), $F4, $9 pos , 80 button "チェック!", *check stop ; チェックのあるラジオボタンを取得 (もっとスマートな確認手段は・・・) ; 1つ1つのオブジェクトのチェックの有無を確認。 ; statに1が返ると「チェックあり」ということで、そのオブジェクトIDを表示。 *check ; グループ1用 repeat 3, 0 ; BM_SETCHECK sendmsg objinfo(cnt, 2), $F0 sendmsg hCombox, $147 index=stat if index = 0 : exec "notepad.exe"//indexが0("メモ帳"を選んでいた)ならメモ帳(notepad.exe)起動 if index = 1 : exec "calc.exe"//〃が1("電卓"を〃)なら起動。 loop

でもこのスプリクトはなぜか「あ」「い」「う」のどれを選択してチェックしても
メモ帳が3個起動するだけです・・・
どうすれば「あ」を選択するとメモ帳が1個起動して、「い」を選択すると電卓が1個起動する
ようにできますか?
よろしくお願いします。



この記事に返信する


Cookies

リンク

2011/4/16(Sat) 12:22:15|NO.38433

sendmsg hCombox, $147
は前の名残ですね。消してください。
sendmsg objinfo(cnt, 2), $F0
で、そのラジオボックスにチェックが入っているか否かを1か0で返します。(0か1がstatに代入される。)
cntには、repeat〜loopの繰り返した回数が入ってますから、
初めは0、次は1、最後に2となります。
順々に、「"あ"ラジオボックスにチェックが入っているか」「"い"に入ってるか」「"う"か」を調べてるわけです。
で、チェックが入っているかどうかがstatに帰ってきます。
ですから今度は、indexにstatを代入したとしても0か1しか返ってこず、2なんかにはなりえません。

statに1が返ってくるということは、その繰り返し回数番目の(0から始まるけど)チェックが入ってます。

statに1が返ってくれば、cnt番目のチェックが入ってます。
ということで、statが1を返した時のcntがindexなわけです。

indexにstatが1を返した時のcntをいれといて、ループが終わってから
そのindexに対応したプログラムを起動してはどうでしょう。

伝わったかな?



Cookies

リンク

2011/4/16(Sat) 12:38:17|NO.38435

ちょっと説明が足りなかったですね。

sendmsg [ラジオボックスのウィンドウハンドル], $F0
で、そのラジオボックスのチェックを調べます。
チェックされていれば1、されていなければ0をstatに返します。

それで、objinfo([オブジェクトID], 2)でそのオブジェクトのウィンドウハンドルが返されます。
ですから、ID0の「"あ"ラジオボックス」、ID1の「"い"ラジオボックス」、ID2の「"う"ラジオボックス」を
cntを利用してループ内で順番にチェックを調べています。

ちょっとはわかりやすくなったろう。



sou

リンク

2011/4/16(Sat) 13:09:17|NO.38437

Cookiesさん
むむむむw
難しいですね・・・
sendmsg hCombox, $147を消してもメモ帳が3個起動しますw
index=cnt
にすればいいんですか?
これでいいのでしょうか?

// ラジオボタン表示サンプルスクリプト (by Kpan) #include "user32.as" ; 1番目のグループ chkbox "あ", x1 SetWindowLong objinfo(stat, 2), -16, $50000009 | $20000 chkbox "い", x2 sendmsg objinfo(stat, 2), $F4, $9 chkbox "う", x3 sendmsg objinfo(stat, 2), $F4, $9 pos , 80 button "チェック!", *check stop ; チェックのあるラジオボタンを取得 (もっとスマートな確認手段は・・・) ; 1つ1つのオブジェクトのチェックの有無を確認。 ; statに1が返ると「チェックあり」ということで、そのオブジェクトIDを表示。 *check ; グループ1用 repeat 3, 0 ; BM_SETCHECK sendmsg objinfo(cnt, 2), $F0 index=cnt loop if index = 0 : exec "notepad.exe"//indexが0("メモ帳"を選んでいた)ならメモ帳(notepad.exe)起動 if index = 1 : exec "calc.exe"//〃が1("電卓"を〃)なら起動。
どこか間違っていますか?



Cookies

リンク

2011/4/16(Sat) 13:28:14|NO.38439

>statが1を返した時のcntがindexなわけです。
ですから、statを確認し、1であるときだけindex=cntをしてください。

index=cntの行に、「statが1であれば」とつけ足せばきっと大丈夫です。



sou

リンク

2011/4/16(Sat) 14:29:15|NO.38444

Cookiesさん
できました!
2度も解決してもらって本当にありがとうございます!



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