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


HSPTV!掲示板


未解決 解決 停止 削除要請

2008
0201
treemenu と combox の共存5解決


tree

リンク

2008/2/1(Fri) 20:55:58|NO.13365

HSP-NEXT の hsp3stdlib と Kpan さんの 「HSP3 あれこれ <オ
ブジェクト編 5>コンボボックスの項目選択監視」を組み合わせて、
menu と combox を使おうと思うのですが、うまく行きません。
combox に変化があったかどうか知りたいのです。

oncmd gosub *OnMenuCmd, WM_COMMAND
oncmd gosub *OnComboxCmd, WM_COMMAND
この2つの oncmd のうち前に書いたほうが常に無視されます。

どう処理したらよいのか、ご指導のほどよろしくお願いします。


;;;;;;;;; ;;;;;;;;;;;;;; ;;;;;;;;;;;; #include "../stdlib/sysval.as" #include "../stdlib/gblconst.as" #include "../stdlib/winapi32.as" #include "../stdlib/exwinstyle.as" #include "../stdlib/exmenu.as" #include "../stdlib/exstatus.as" goto *main ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; #deffunc combobox ; WM_COMMAND oncmd gosub *OnComboxCmd, $111 objsize 100 combox a, 60, "胡瓜\n林檎\n人参\n葡萄\n茄子\n南瓜\n玉葱" hCombox = objinfo (stat, 2) return ;;;;;;;;;;;;;;;;;; begin MENU program ;;;;;;;;;;;;;;;;;;;; ;▼メッセージの処理 (WM_COMMAND) *OnMenuCmd if lparam != 0 : return itemID=LOWORD(wparam) *PopSelect ; switch itemID case 1100 goto *owari swbreak case 2100 goto *owari swbreak default swbreak swend return ;▼メッセージの処理 (WM_RBUTTONDOWN) *OnRbtClick SelectMenu 1 TrackPopup_Menu -1,-1 : itemID=stat gosub *PopSelect return ;▼メニューバーの設定処理 *MenuProc ;▼メニューの設定 ;--------------------------------------------- hmenu(1)=Create_Menu(1) Append_Menu "End",1100 hmenu(2)=Create_Menu(2) Append_Menu "閉じる Ctrl+Q",2100 ;▼メニューバー hmenu(0)=Create_Menu(0) Append_Menu "Help",2,MF_POPUP SetMenumode 1 ;//メニュー表示 return ;;;;;;;;;;;;;;;; end MENU program ;;;;;;;;;; *OnComboxCmd ;;;;;;;;;;;;;;;; if lparam = 0 : return ; lparamにはコンボボックスのハンドルが返る if lparam = hCombox { ; wparamの上位ワードには通知コードが返る wNotifyCode = wparam >> 16 & $FFFF ; 通知コード1の場合は選択状態変化 if wNotifyCode = 1 { dialog "ABCD" } } return ;;;;;;;;;;;;;;;; *main onexit goto *owari combobox oncmd gosub *OnMenuCmd, WM_COMMAND oncmd gosub *OnRbtClick,WM_RBUTTONDOWN gosub *MenuProc oncmd gosub *OnComboxCmd, WM_COMMAND stop *owari end



この記事に返信する


Kpan

リンク

2008/2/1(Fri) 21:44:14|NO.13367

「WM_COMMAND メッセージの処理」のとこを参照。
http://yokohama.cool.ne.jp/chokuto/urawaza/menu1.html



tree

リンク

2008/2/2(Sat) 09:53:05|NO.13372

Kpan さん、何時もご指導有難うございます。

まずは私の coding にミスがありまして誠に申し訳ありませんでした。
oncmd gosub *OnComboxCmd, $111
これが2箇所に書いてありました。

>>「WM_COMMAND メッセージの処理」のとこを参照。
>>http://yokohama.cool.ne.jp/chokuto/urawaza/menu1.html

ちょくとさんの文は読んでて知っているのですが、それでもうまく行かず苦労しています。
library に何をを使うかで、coding style が変わりますので混乱します。hsp3stdlib を
主体にしています。

ところで、
*OnMenuCmd
if lparam != 0 : return

*OnComboxCmd
if lparam = 0 : return

このようにメニューとコンボボックスの message を区別しているのですが、なんら効果
を発揮しません。

もっと別な所で大きなものを忘れているのでしょうか?
ご指導のほどよろしくお願いいたします。



Megane

リンク

2008/2/2(Sat) 11:24:41|NO.13373

oncmd命令が2度実行されると、
両方に飛ぶのではなく、飛び先の指定が<<更新>>されるため
「先が無視される」のだろうと思います。


oncmd gosub *OnMessage , WM_COMMAND

と、メッセージによって飛ぶところをひとつにし、そこで


*OnMessage if lparam { gosub *OnComboxCmd }else{ gosub *OnMenuCmd } return

と場合分けすればいいのではないでしょうか。



Kpan

リンク

2008/2/2(Sat) 15:32:48|NO.13374

あれ?
aさんが対処されたサンプルスクリを返信されてたので、補足情報の意味で投稿
したんですが。。。(^^;

Meganeさんが書いているようにoncmd命令を1つに統一させておいてから、
lprarm値をチェックして処理を振り分けてください。
(メニューなら0、コンボならそのウィンドウハンドルが返る。


; WM_COMMANDのジャンプラベル *command if lparam = 0 { ; メニュー用処理あれこれ return } if lparam = hCombox { ; コンボボックスあれこれ return } return



tree

リンク

2008/2/2(Sat) 16:15:02|NO.13376

Megane さん
Kpan さん

どうもありがとうございます。
message は2つの発信場所から場合に応じて飛び、2つの受信に来
ると思い込んでいました。
発信場所は1つなんですね。

もう一度御礼申し上げます。



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