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


HSPTV!掲示板


未解決 解決 停止 削除要請

2009
0108
××ポップアップメニューについて10解決


××

リンク

2009/1/8(Thu) 21:10:10|NO.22499

今作っているスクリプトの中に、右クリックでポップアップメニューを表示する箇所があります
で、ポップアップメニューの表示についてはhttp://lhsp.s206.xrea.com/hsp_menu.htmlさんを
参考にさせてもらったのですが、、、

疑問が浮かんだので質問します

メニューの表示、およびクリック判定のスクリプトを簡略化すると


#include "user32.as" onclick gosub *onjump onexit *exit //メインのメニュー CreatePopupMenu hMenu_0 = stat AppendMenu hMenu_0, 0,1, "メニュー項目 1" AppendMenu hMenu_0, $800, 0, "" AppendMenu hMenu_0, 0,2, "メニュー項目 2" stop *onjump if wparam = 2 { TrackPopupMenu hMenu_0, $100, ginfo(0), ginfo(1), 0, hwnd, 0 if stat = 0 : return dialog "メニュー項目 "+stat+" を選択!" return } return *exit //メニューの破棄 DestroyMenu hMenu_1

となります。これで普通に何番のメニューを押したかが取得はできているのですが、
疑問は、

 *onjumpルーチンの中のdialog命令はif命令の中にあるので
 wparam=2 ,つまりメニューを右クリックした時しか反応しないはずでは?

 なのになぜ、メニューを左クリックしてもダイアログが出てくるのか?

ということです。
説明分かりにくくてすいません。分かる方ご説明お願いします

(追記)
理屈が理解できてないのにスクリプトが組めたのは
Let's HSPさんのサンプルを使っているからです



この記事に返信する


check

リンク

2009/1/8(Thu) 21:19:55|NO.22502

とりあえず、このプログラム終了できない。
onexitのあとにendを。

*onjumpのif wparam=2 はonclickで飛んできたときに
右クリックか左クリックを調べているのであって、
メニューを右クリックした時しか反応しないとかではない。



××

リンク

2009/1/8(Thu) 21:34:52|NO.22506

すいません end書き忘れました スクリプトの末尾に足しといてくださいorz

で質問なのですが
>if wparam=2 はonclickで飛んできたときに
>右クリックか左クリックを調べているのであって、
>メニューを右クリックした時しか反応しないとかではない。
とすると

if wparam=2 { 〜
の 〜 の部分はwparamの値にかかわらず実行されるということですか?



check

リンク

2009/1/8(Thu) 21:38:15|NO.22508

onclickはマウスボタンの何かがクリックされたら
指定されたラベルに飛ぶよな?
だから、ラベルに飛んだときに何のボタンが押されたかを知るときは
wparamの値を見るわけだ。
wparamが1なら左クリックwparamが2なら右クリック



××

リンク

2009/1/8(Thu) 21:43:57|NO.22509

はい そこまでは理解しています(・∀・)

しかし疑問に思うことがあるのです

ポップアップメニューを左クリックすると
onclick命令で*onjumpに飛ぶ

∈献リックなのでwparam=1

if wparam=2 は 偽なので以下のスクリプトは実行されずにreturnで戻る

と、なると思うのですが
それが何故ダイアログが表示されるのでしょうか?



New Monkey

リンク

2009/1/8(Thu) 21:44:00|NO.22510


stop


repeat c++ title ""+c await loop
としてみるとわかると思います



××

リンク

2009/1/8(Thu) 21:48:38|NO.22512

New Monkeyさんありがとうございます!!
なんかちょっと理解できたようなのですが

<結果>
メニューを表示してる間、カウントが止まった

<考察>
TrackPopupMenu命令は
button命令などのようにオブジェクトを配置して次の行に移る命令ではなく、
メニューを表示して、ユーザー側の反応があるまでその行で待機する命令

ということでよろしいでしょうか?



New Monkey

リンク

2009/1/8(Thu) 21:50:47|NO.22513

そのとおり!
dialogとかと同じですね



check

リンク

2009/1/8(Thu) 21:51:39|NO.22514

ああ、何で理解していないのかがやっと分かった。
ホップアップメニューを出す手順は

クリックを受け取る
左クリックだったらホップアップメニューを出す
メニューがクリックされるのをを待つ
クリックされたら特定の値を返す。

となっているよな?
*onjumに飛ぶのは最初のクリックを受ける時だ。
そこでwparamを調べ、左クリックだったらメニューを出す。
という処理を*onjumpで行っているんだ。



××

リンク

2009/1/8(Thu) 21:51:49|NO.22515

おお〜!!解決できました!!

checkさん NewMonkeyさん ありがとうございました(^ ^ )



××

リンク

2009/1/8(Thu) 21:53:10|NO.22516

checkさんもありがとうございます
そのとおりで ポップアップメニューを出す命令が内部でどのように処理されているのかを
理解できていませんでした(^ ^;)

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



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