メニューバーの操作について。
ba-sann 2013/6/15(Sat) 06:41:49|NO.54900
メニューバーの操作がうまくいきません。
;以下ソース。
#include "user32.as"
#uselib "user32"
#const global WM_COMMAND 0x111
#enum IDM_NULL =0
#enum IDM_EXIT
#enum IDM_MESSAGE
#enum IDM_GOOGLE
onexit *exit
bgscr 0
Createpopupmenu:hm_menu = stat
AppendMenu hm_menu,0,IDM_EXIT,"終了(&Q)"
AppendMenu hm_menu,0,IDM_MESSAGE,"メッセージ(&M)"
CreateMenu :hm_main = stat
AppendMenu hm_main,0x10,hm_menu,"メニュー(&M)"
AppendMenu hm_main,0,IDM_GOOGLE,"Google(&G)"
AppendMenu hm_main,0,IDM_MINI,"最小化"
AppendMenu hm_main,0,IDM_MES,"メッセージボックス"
SetMenu hwnd,hm_main
DrawMenuBar hwnd
oncmd gosub *oncmd_wm_command,WM_COMMAND
stop
*exit
// 作成したメニューは必ず任意に削除
DestroyMenu hm_main // 親メニューを破棄すれば、関連付けられたすべてのメニューが破棄される為これだけでよい。
end
stop
*oncmd_wm_command
wID = wParam & 0xFFFF;
if(lparam==0){
if(wid==IDM_EXIT){
goto*exit
}else:if(wid==IDM_MESSAGE){
dialog "仮メッセージ"
}else:if(wid==IDM_GOOGLE){
exec "http://www.google.co.jp/",16
}else:if(wid==IDM_MINI){
gosub*mini
}else:if(wid==IDM_MES){
dialog "test"
}
}
return
*mini
; SC_MINIMIZE 最小化
gsel 0:sendmsg hwnd, $112, $F020
gsel 0,0
return
実行してみると、
メニューバーには
メニュー Google 最小化 メッセージボックス
とありますが
メッセージボックスを出力できてないみたいです。
解決策などあれはアドバイスお願いします
ツノン 2013/6/15(Sat) 07:02:29|NO.54901
メニューID の定義がされていません。
AppendMenu hm_main,0,IDM_MINI,"最小化"
AppendMenu hm_main,0,IDM_MES,"メッセージボックス"
の第三引数にそれぞれ 0 が指定されている状態です。
以下のように、
5行目の #enum によるメニューID定義のスクリプトの末尾に メニューID 名を追加してやると上手く動作します。
#include "user32.as"
#uselib "user32"
#const global WM_COMMAND 0x111
#enum IDM_NULL =0
#enum IDM_EXIT
#enum IDM_MESSAGE
#enum IDM_GOOGLE
#enum IDM_MES
#enum IDM_MIN
onexit *exit
bgscr 0
Createpopupmenu:hm_menu = stat
AppendMenu hm_menu,0,IDM_EXIT,"終了(&Q)"
AppendMenu hm_menu,0,IDM_MESSAGE,"メッセージ(&M)"
CreateMenu :hm_main = stat
AppendMenu hm_main,0x10,hm_menu,"メニュー(&M)"
AppendMenu hm_main,0,IDM_GOOGLE,"Google(&G)"
AppendMenu hm_main,0,IDM_MINI,"最小化"
AppendMenu hm_main,0,IDM_MES,"メッセージボックス"
SetMenu hwnd,hm_main
DrawMenuBar hwnd
oncmd gosub *oncmd_wm_command,WM_COMMAND
stop
*exit
// 作成したメニューは必ず任意に削除
DestroyMenu hm_main // 親メニューを破棄すれば、関連付けられたすべてのメニューが破棄される為これだけでよい。
end
stop
*oncmd_wm_command
wID = wParam & 0xFFFF;
if(lparam==0){
if(wid==IDM_EXIT){
goto*exit
}else:if(wid==IDM_MESSAGE){
dialog "仮メッセージ"
}else:if(wid==IDM_GOOGLE){
exec "http://www.google.co.jp/",16
}else:if(wid==IDM_MINI){
gosub*mini
}else:if(wid==IDM_MES){
dialog "test"
}
}
return
*mini
; SC_MINIMIZE 最小化
gsel 0:sendmsg hwnd, $112, $F020
gsel 0,0
return
ツノン 2013/6/15(Sat) 07:08:35|NO.54902
追記
投稿文字列入力用のメッセージボックスの上に記述されているように。
スクリプトは小文字の<pre>〜</pre>で囲むと青く強調されて表示できます。
使ってみると便利ですよ。
ツノン 2013/6/15(Sat) 07:17:04|NO.54903
更に追記
プリプロセッサ命令 について調べた方が良いかも。
プリプロセッサ命令とは、コンパイル時に、生成された文字列にスクリプトの一部を置き換える機能にあてがわれた命令名の事であり。
#enum id_test = 2
#enum id_test2
#enum id_test3
#enum id_test4
#enum id_test5
mes id_test
mes id_test2
mes id_test3
mes id_test4
mes id_test5
上のスクリプトは下の様に記述したのと同じ意味になります。
mes 2
mes 3
mes 4
mes 5
mes 6
ba-sann 2013/6/15(Sat) 17:05:04|NO.54913
ツノンさん
あーーーーーーーーーーーーーーーーーー
ほんとですねww
すっかりそこを見落としてました!><w
ありがとうございます
完全にミスってましたT_T