TEST7
先日、ウインドウスタイルの設定モジュールを作りましたが、これと組み合わせて「ウソザナ」で使えるポップアップメニューモジュールを作ってみました。
適当なフォルダに次のファイルを用意し、HSPでxana_test7.hspを実行してみて下さい。
common.hsp (ここからゲット)
xana_menu.hsp (↓からゲット)
xana_test7.hsp (↓からゲット)
うまく起動するとこんな画面でテストできます。
テスト方法
- メイン画面で[OPEN]ボタンをクリックすると、ポップアップメニューが表示されます。
- 矢印上下で項目を選択できます。
- ENTERキーで項目を決定します。
- 項目を決定後、ダイアログで選択した項目名を表示します。
- 「終了する」項目を選択するか、ESCキーでポップアップメニューを閉じ、メイン画面に戻ります。
- メイン画面の閉じるボタンをクリックすれば終わります。
このスクリプトは、今後も改版していく可能性があります。
xana_menu.hsp
; ; モジュール定義:「ウソザナ」ポップアップメニュー用 ; 作成 :ふじぽん ; ; モジュール名 :m_menu ; ; モジュール変数:画面ID...sid ; ; Copyright :http://d.hatena.ne.jp/fujiponXP ; ; 変更履歴 ; ver.1.0 2009/12/12 新規作成 ; #module m_menu sid ; 定数定義 #define pointstr ">" ; ポインタ記号 #define wtime 5 ; キー入力待ち時間 ; 初期設定 #modinit sid = ginfo(25) ; 空き画面IDを使用する return ; ポップアップメニュー ; p_menu...メニュー配列(配列0はタイトル文字列) ; p_ymax...メニュー配列数 #modcfunc m_menuDisp array p_menu, int p_ymax ; 表示幅をメニュー文字列長から求める xmax = 8 ymax = p_ymax-1 for i,0,p_ymax l = strlen(p_menu(i)) if xmax < l: xmax = l next ; ポップアップ画面を設定する wposx = (ginfo_dispx - xmax*9 ) /2 wposy = (ginfo_dispy - ymax*22+5 ) /2 screen sid, xmax*9, ymax*22+5, screen_hide+screen_fixedsize+screen_tool,wposx,wposy ws_reset WS_SYSMENU title p_menu(0) color boxf font "",12,font_bold ; メニュー内容を描画する y=0 for i,0,ymax color 250,250,150: boxf 4,4+22*i, xmax*9-5, 4+18+22*i m_menuPrint (i=y), i, p_menu next key = 0 gsel sid,1 *main ; キー入力処理 stick key if key&2 { ; ↑キー:項目選択 m_menuPrint 0, y, p_menu y=(ymax+y-1)\ymax m_menuPrint 1, y, p_menu } if key&8 { ; ↓キー:項目選択 m_menuPrint 0, y, p_menu y=(y+1)\ymax m_menuPrint 1, y, p_menu } if key&32 : gsel sid,-1: return y+1 ; RETURNキー:決定 if key&128 : gsel sid,-1: return 0 ; ESCキー:キャンセル wait wtime goto *main ; メニュー項目描画 ; p1...0:未選択 1:選択 ; p2...項目番号 ; p3...項目配列 #deffunc m_menuPrint int p1, int p2, array p3 if p1 { color 0,0,50: boxf 5,5+22*p2, xmax*9-6, 3+18+22*p2 color 250, 30, 30 pos 8,8+22*p2: mes pointstr } else { color: boxf 5,5+22*p2, xmax*9-6, 3+18+22*p2 color 255,255,255 } pos 24,8+22*p2: mes p3(p2+1) return #global
xana_test7.hsp
#include "common.hsp" #include "xana_menu.hsp" about_lisence ; メイン screen 0, 9*32, 9*32 title "メイン" newmod menu, m_menu button gosub "OPEN", *lb_open stop ; メイン操作不可、ダイアログ表示 *lb_open gsel 0: ws_set WS_DISABLED *main sdim a a(0)="システムメニュー" a(1)="はじめから" a(2)="続きから" a(3)="セーブ" a(4)="オプション設定" a(5)="終了する" ret = m_menuDisp(menu,a,length(a)) if ret=5 or ret=0 : goto *lb_close if ret>0 : dialog strf("%s を選びました。",a(ret)) goto *main ; メイン操作不可解除、ダイアログ非表示 *lb_close gsel 0,1: ws_reset WS_DISABLED return