More ... | 編集履歴:過去のバージョン2011/10/09 23:46:13 JST時点でのメニューヘルプテキストの内容メニューアイテムが選択されたときに、そのアイテムの説明をステータスバーに表示します。 [[$$toc]] - →[[HSP3・サンプルスクリプト]]に戻る ---- * スクリプト {{{ ; <<<< HSP 3.0 サンプル >>>> ; ; メニューアイテムのヘルプテキストをステータスバーに表示 ; #uselib "comctl32.dll" #func InitCommonControls "InitCommonControls" #uselib "user32.dll" #func CreateMenu "CreateMenu" #func CreatePopupMenu "CreatePopupMenu" #func AppendMenu "AppendMenuA" int,int,int,sptr #func SetMenu "SetMenu" int,int #func DrawMenuBar "DrawMenuBar" int #define WM_COMMAND 0x0111 #define WM_MENUSELECT 0x011F #define SB_SETPARTS 0x0404 #define SB_SETTEXT 0x0401 #define SB_SIMPLE 0x0409 #define SB_SIMPLEID 255 #define SBT_NOBORDERS 0x0100 #define CMD_OPEN 1001 ;「開く」 #define CMD_SAVE 1002 ;「保存」 #define CMD_QUIT 1003 ;「終了」 #define CMD_MESSAGE 1004 ;「終了」 screen 0, 300, 200 oncmd gosub *OnCommand, WM_COMMAND oncmd gosub *OnMenuSelect, WM_MENUSELECT ; コモンコントロールライブラリの初期化 InitCommonControls ; ==== メニューバー ==== ; 「ファイル」メニュー CreatePopupMenu : hmenuFile = stat AppendMenu hmenuFile, 0, CMD_OPEN, "開く(&O)" AppendMenu hmenuFile, 0, CMD_SAVE, "保存(&S)" AppendMenu hmenuFile, $800, 0, "" ; 区切り線 AppendMenu hmenuFile, 0, CMD_QUIT, "終了(&Q)" ; 「ヘルプ」メニュー CreatePopupMenu : hmenuHelp = stat AppendMenu hmenuHelp, 0, CMD_MESSAGE, "メッセージ表示(&M)" ; メニューバー作成 CreateMenu : hmenu = stat AppendMenu hmenu, $10, hmenuFile, "ファイル(&F)" AppendMenu hmenu, $10, hmenuHelp, "ヘルプ(&H)" SetMenu hwnd, hmenu DrawMenuBar hwnd ; ==== ステータスバー ==== ; ステータスバー作成 winobj "msctls_statusbar32","",0,$50000003 hStatus = objinfo_hwnd(stat) ; ステータスバーを3つのパーツに分ける partpos = 50, 120, -1 sendmsg hStatus, SB_SETPARTS, 3, varptr(partpos) sendmsg hStatus, SB_SETTEXT, 0, "パーツ1" sendmsg hStatus, SB_SETTEXT, 1, "パーツ2" sendmsg hStatus, SB_SETTEXT, 2, "パーツ3" stop *OnCommand ; ==== WM_COMMAND メッセージを受け取ったとき ==== if lParam == 0 : gosub *OnMenuCommand return *OnMenuCommand ; ---- メニューアイテムからのコマンドメッセージ ---- itemId = wParam & $FFFF ; メニューアイテム ID if itemId == CMD_OPEN { dialog "*", 16 if stat { dialog refstr+"を開きました" } } if itemId == CMD_SAVE { dialog "*", 17 if stat { dialog refstr+"に保存しました" } } if itemId == CMD_QUIT { dialog "終了します" end } if itemId == CMD_MESSAGE { dialog "メニュー作成のテストです", 0, "メッセージ表示" } return 0 *OnMenuSelect ; ==== メニューアイテムの選択状態が切り替わったとき ==== if (wParam >> 16 == -1) & (lParam == 0) { ; --- メニューが閉じられたとき --- ; シンプルモード解除 sendmsg hStatus, SB_SIMPLE, 0, 0 } else { ; --- メニューが開かれた or アイテムが選択されたとき --- ; メニューアイテム ID から表示文字列を選択 msgtext = "" itemId = wParam & $FFFF if itemID == CMD_OPEN : msgtext = "ファイルをオープンします。" if itemID == CMD_SAVE : msgtext = "ファイルに保存します。" if itemID == CMD_QUIT : msgtext = "アプリケーションを終了します。" if itemID == CMD_MESSAGE : msgtext = "メッセージダイアログを表示します。" ; シンプルモードに設定 sendmsg hStatus, SB_SIMPLE, 1, 0 ; 文字列を表示 sendmsg hStatus, SB_SETTEXT, SB_SIMPLEID, msgtext } return 0 }}} * 解説 解説は次のリンク先をどうぞ。 ただし、リンク先に書かれているスクリプトはマシン語を使ったものなので、それについては無視してください。 http://chokuto.ifdef.jp/urawaza/mcn/menuhelp.html |