# 06 sample_settings.hsp

sample\ 06 sample_settings.hsp

    #include "mod_layerbutton.hsp"

    gosub *create_button_hidari
    gosub *create_button_migi
    gosub *create_button_shita

    log = ""
    // 表示ループ
    repeat
    	redraw 0 : color 255,255,255 : boxf : color 220,220,220 : pos 0,0 : font msgothic,15
    	mes log
    	color
    	pos  40, 25 : mes "マウスによる操作無効\n(フォーカス→キーボード操作可能)"
    	pos 325, 25 : mes "キーボードによる移動決定に\nWASD,エンターキーを使えなくする"
    	pos 180,330 : mes "ボタンを押しても非表示にしない"
    	font msgothic,15,1
    	pos 180,  0 : mes "laybtn_settings の設定例"
    	font msgothic,12
    	color 128,, :pos  60,415 : mes "他のボタンにフォーカスが移ったとき、\n移動前のボタンを強制的に通常状態に戻す。"
    	color ,,128 : pos 340,415 : mes "FOCUS_INの表示が完了する前に\nフォーカスが外れたときFOCUS_OUTを即座に開始。  "
    	redraw 1
    	await 1000/60
    loop
    stop

    // ボタン作成 : 左
    *create_button_hidari
    	if laybtn_length(0) > 0 : return  ; グループID 0 がすでに存在する場合はreturn
    	pos 60,60
    	repeat 4
    		pos ,ginfo_cy+5
    		// ボタン作成 : グループID 0
    		layerbutton 180,50, cnt, 0, 30,10,5, 15,5,2 {
    			laybtn_settings 0,1,0  ; 設定 : マウス操作無効
    			if lparam == objlayer_cmddraw {
    				color 255,255,255 : font msgothic, 18, 1  ; laybtn_ezboxのテキスト設定
    				laybtn_ezbox $BBFF9999, $BBFF0000, $BBAA0000, "ボックス0"+(objlayer_option+1)
    				// ボタンのクリック判定
    				if layerbtn_stat == LAYBTN_COMPLETE_SELECTED {
    					log += "hidari - COMPLETE! opt="+objlayer_option+" wp="+wparam +"\n"
    				}
    			}
    			return
    		}
    		if cnt == 0 : hidari_fobj = stat  ; 最初のボタンのオブジェクトIDを保存
    	loop
    	return

    // ボタン作成 : 右
    *create_button_migi
    	if laybtn_length(1) >= 3 : return  ; グループID 1 がすでに存在する場合はreturn
    	repeat 4
    		switch cnt
    		case 0 : pos 320, 70 : swbreak
    		case 1 : pos 450, 70 : swbreak
    		case 2 : pos 320, 180 : swbreak
    		case 3 : pos 450, 180 : swbreak
    		swend
    		// ボタン - グループID 1
    		layerbutton 120,100, cnt, 1, 30,10,5, 15,5,2 {
    			laybtn_settings 4+32,0,0  ; 設定 : WASD移動/エンター決定 制限
    			if lparam == objlayer_cmddraw {
    				color 255,255,255 : objcolor 0,0,0 : font msgothic, 18, 1  ; laybtn_ezboxのテキスト設定
    				laybtn_ezbox $BB9999FF, $BB0000FF, $BB0000AA, "ボックス0"+(objlayer_option+1)
    				// ボタンのクリック判定
    				if layerbtn_stat == LAYBTN_COMPLETE_SELECTED {
    					log += "migi - COMPLETE! opt="+objlayer_option+" wp="+wparam +"\n"
    				}
    			}
    			return
    		}
    		if cnt == 0 : migi_fobj = stat  ; 最初のボタンのオブジェクトIDを保存
    	loop
    	return

    // ボタン作成 : 下
    *create_button_shita
    	repeat 3
    		pos 60+80*cnt, 360
    		// ボタン - グループID 2
    		layerbutton 70,40, cnt, 2, 0,20,5, 0,20,2 {
    			laybtn_settings 0,0,1+8  ; 設定 : ボタンを押しても消さない + フォーカスアニメーションについて
    			if lparam == objlayer_cmddraw {
    				color 255,, : boxf objlayer_axis_x-1, objlayer_axis_y-1, objlayer_axis_x2, objlayer_axis_y2  ; 1px大きくボタン下地描画
    				color 255,255,255 : objcolor 100,100,100 : font msgothic, 12  ; laybtn_ezboxのテキスト設定
    				switch objlayer_option
    				case 0 : btxt = "Show/Hide" : swbreak
    				case 1 : btxt = "Focus" : swbreak
    				case 2 : laybtn_enable 0,-1 : btxt = "Enable "+stat : swbreak
    				swend
    				laybtn_ezbox $999999, $BBBBBB, $666666, btxt,4 ,,,,,0  ; 角丸なし長方形
    				// ボタンのクリック判定
    				if layerbtn_stat == LAYBTN_PRESS_IN_SELECTED {
    					log += "shita_L - SELECTED! opt="+objlayer_option+" wp="+wparam +"\n"
    					switch objlayer_option
    					case 0 : if laybtn_length(0) != 0 : laybtn_hide 0 : else : gosub *create_button_hidari : swbreak
    					case 1 : objsel hidari_fobj : swbreak
    					case 2 : laybtn_enable 0,-1 : laybtn_enable 0,1-stat : swbreak
    					swend
    				}
    			}
    			return
    		}
    	loop
    	repeat 3
    		pos 340+80*cnt, 360
    		// ボタン - グループID 2
    		layerbutton 70,40, cnt, 2, 0,20,5, 0,20,2 {
    			laybtn_settings 0,0,1+16  ; 設定 : ボタンを押しても消さない + フォーカスアニメーションについて
    			if lparam == objlayer_cmddraw {
    				// ボタンの描画
    				color ,,255 : boxf objlayer_axis_x-1, objlayer_axis_y-1, objlayer_axis_x2, objlayer_axis_y2  ; 1px大きくボタン下地描画
    				color 255,255,255 : objcolor 100,100,100 : font msgothic, 12  ; laybtn_ezboxのテキスト設定
    				switch objlayer_option
    				case 0 : btxt = "Show/Hide" : swbreak
    				case 1 : btxt = "Focus" : swbreak
    				case 2 : laybtn_enable 1,-1 : btxt = "Enable "+stat : swbreak
    				swend
    				laybtn_ezbox $999999, $BBBBBB, $666666, btxt,4 ,,,,,0  ; 角丸なし長方形
    				// ボタンのクリック判定
    				if layerbtn_stat == LAYBTN_PRESS_IN_SELECTED {
    					log += "shita_R - SELECTED! opt="+objlayer_option+" wp="+wparam +"\n"
    					switch objlayer_option
    					case 0 : if laybtn_length(1) != 0 : laybtn_hide 1 : else : gosub *create_button_migi : swbreak
    					case 1 : objsel migi_fobj : swbreak
    					case 2 : laybtn_enable 1,-1 : laybtn_enable 1,1-stat : swbreak
    					swend
    				}
    			}
    			return
    		}
    	loop
    	return