[トップ][一覧][最近の更新]

編集履歴:差分

2011/07/02 09:52:01 JSTと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