# laybtn_settings

layerbuttonオブジェクトの動作を設定する

laybtn_settings p1,p2,p3

p1=0〜(0) : キーボード入力に関する設定
p2=0〜(0) : マウスに関する設定
p3=0〜(0) : 表示処理等に関する設定

(プラグイン / モジュール : mod_layerbutton)

## 解説

    layerbuttonオブジェクトの動作処理を一部変更できます。
    laybtn_settings 命令は layerbutton サブルーチン{}内の先頭に書いてください。

    p1,p2,p3 に割り当てる値はそれぞれ加算して複数設定できます。

p1 | キーボード入力に関する設定の効果
+1 | キー入力による操作を無効にする。
+2 | キー入力で新たなフォーカスを発生させない。 フォーカスの発生をobjselを使ってスクリプト側で制御したい場合等に用います。 ※ 通常、表示されているグループIDが１つだけの場合は移動(上下左右またはWASD)キーでフォーカスが発生するようになっています。(複数グループが同時に表示されている場合は、キー入力でのフォーカス発生はしません。)
+4 | ボタン間のフォーカス移動キーにWASDキーを含めない。
+8 | ボタン間のフォーカス移動キーに上下左右キーを含めない。
+16 | ボタンの決定キーにスペースキーを含めない。
+32 | ボタンの決定キーにエンターキーを含めない。
+64 | ボタン間のフォーカス移動キーや決定キーを押し続けたときのキーリピートを有効にする。 ※ キーリピートの間隔は 60fps を前提とした待機フレーム数で設定されています。30fps など異なるフレームレートで使用する場合は、グローバル変数 LAYERBTN_KEY_REPEAT_FRAME を変更してください。初期値は 16 です。 ※ LAYERBTN_KEY_REPEAT_FRAME は「初期ディレイ」と「リピート間隔」の両方に使用されます。 - 押し続けた最初の待ち時間（初期ディレイ）は LAYERBTN_KEY_REPEAT_FRAME の値になります。 - その後のリピート間隔は (LAYERBTN_KEY_REPEAT_FRAME / 2) になります。 ※ LAYERBTN_KEY_REPEAT_FRAME に (『リピート間隔』<<16 | 『初期ディレイ』) の形式で値を設定することで、両方を個別に指定することもできます。

p2 | マウス/タッチに関する設定の効果
+1 | マウス/タッチによる操作を無効にする。
+2 | マウスクリック/タッチで即ボタン決定をする。 ※ 通常、クリックし続けたままボタン外に移動してクリックを離すと決定せずキャンセルされますが、この設定をするとボタンを押した瞬間に決定します。
+4 | ボタン範囲外でのクリック／タッチ操作後に、範囲内へスライドさせた場合でもボタンが押されたとみなす。
+8 | 「[+4]範囲外→範囲内スライドもボタンを押す。」設定を、同一グループ内の他ボタンが先にクリック／タッチ中の状態でのみ許可されるようにする。 ※ 指をずらして近傍ボタンを同時押しさせたいが、無関係な他オブジェクトのスライド操作による干渉を避けたい場合に用いてください。
+16 | ボタンをクリック／タッチして一度 LAYBTN_PRESS_IN 状態になると、範囲外へスライドしても指を離すまで LAYBTN_PRESS_IN が維持され、必ず決定される。
+32 | マウスをボタン範囲外へ移動、またはボタン範囲外をタップしても、フォーカスを維持する。

p3 | 動作処理等に関する設定の効果
+1 | ボタンを押しても非表示(SHOW_OUT)処理に移行せず消えないようにする。 ボタンを何回も押せるようにしたいときに用います。 ※ この設定をすると、ボタンを押したとき LAYBTN_PRESS_IN だけでなく、決定した瞬間を判別できるよう LAYBTN_PRESS_IN_SELECTED も発生するようになります。 ※ 「決定した瞬間」とは、マウスの場合はクリックして離した瞬間、キーボードの場合は押した瞬間です。
+2 | 「[+1]ボタンを押しても非表示(SHOW_OUT)処理に移行せず消えないようにする。」のとき、ボタン決定後 PRESS_IN,PRESS_OUT のアニメーションが終わるまで他をフォーカスできなくする。 ※ 何回も連打されたり、次々とボタンが押されてしまうのを防ぎます。
+4 | 「[+1]ボタンを押しても非表示(SHOW_OUT)処理に移行せず消えないようにする。」のとき、ボタン決定後 FOCUS_IN で留まらずに待機状態(SHOW_IN)まで戻るようにする。 ※ ボタンを離したときフォーカス状態表示を残したくない場合に設定してください。
+8 | 他のボタンにフォーカスが移ったとき、移動前のボタンの FOCUS_IN,FOCUS_OUT,PRESS_IN,PRESS_OUT を強制的に停止して待機状態(SHOW_IN)に戻す。
+16 | FOCUS_IN の表示が完了する前にフォーカスが外れたとき FOCUS_OUT を即座に開始させる。 通常は、FOCUS_IN → FOCUS_OUT それぞれの指定フレーム数をカウントしてから待機状態(SHOW_IN)に戻ります。 フォーカスを付けてすぐ外したときの FOCUS_IN,FOCUS_OUT 表示時間が長く感じた場合に利用してください。 ※ フォーカスをすぐに外した場合、FOCUS_OUT の表示は FOCUS_IN にかかった時間と同じフレーム数で行われます。(FOCUS_OUT になったときの layerbtn_cnt が 0 からでなくカウント途中[FOCUS_OUT表示フレーム数指定-フォーカスが外れた時のcnt値]から始まるようになるため。) ※ laybtn_ease() の FOCUS_OUT 時のデフォルトのイージングタイプが ease_quartic_in になります。 ※ layerbutton命令での FOCUS_IN と FOCUS_OUT の表示フレーム数は同じに設定してください。異なる場合、アニメーションがシームレスにつながらず、表示に違和感が生じる可能性があります。
+32 | ボタンをオブジェクトとしてフォーカスさせず、表示上のみのフォーカス表示を行えるようにする。 これを設定すると、このボタンにカーソルを合わせたりタップしたりしても他ボタンのオブジェクトフォーカスを奪いません。 ※ 例えば、この設定を付けた十字キーボタンを配置すれば、通常のボタングループのいずれかのボタンにフォーカスが当たっているとき、十字キー操作によってフォーカスを移動して選択させるというようなことも可能になります。

## サンプル

    #include "mod_layerbutton.hsp"

    log  = "設定" +"\n"
    log += "・キー入力で新たなフォーカスを発生させない" +"\n"
    log += "・マウスクリック/タッチで即ボタン決定をする" +"\n"
    log += "・ボタンを押しても非表示(SHOW_OUT)処理に移行せず消えないようにする" +"\n"
    log += "・ボタン決定後 PRESS アニメーションが終わるまで他をフォーカスやクリックできなくする" +"\n\n"
    pos 200,100
    repeat 3
    id = cnt : pos ,ginfo_cy+10
    layerbutton 172,66, id, 5, 30,30,10, 50,30,5 {
    	laybtn_settings 2,2,3  ; ボタン設定
    	color 0,0,0 : objcolor 255,255,255 : font msgothic, 18, 1
    	laybtn_ezbox $FF0000, $FFFF00, $FF8800, "テキスト id="+objlayer_option,4
    	if lparam == objlayer_cmddraw {
    		switch layerbtn_stat
    		case LAYBTN_PRESS_IN_SELECTED
    			log += "select!! wp="+wparam+" opt="+objlayer_option +"\n"
    			swbreak
    		swend
    	}
    	return
    }
    loop
    repeat
    	redraw 0 : color 255,255,255 : boxf : color : pos 0,0 : font msgothic,14
    	mes log
    	redraw 1
    	await 1000/60
    loop

## 関連項目

layerbutton | ちょっとリッチなアニメーション付きボタンを作成 | (mod_layerbutton)
laybtn_mes | layerbuttonサブルーチン内用テキスト表示 | (mod_layerbutton)
laybtn_ease | layerbuttonサブルーチン内用イージング値の取得 | (mod_layerbutton)
laybtn_hide | layerbuttonの指定グループを非表示(SHOW_OUT)処理にして削除する | (mod_layerbutton)
laybtn_length | layerbutton指定グループ内のオブジェクト数を取得 | (mod_layerbutton)
laybtn_enable | layerbuttonの指定グループのオブジェクトに有効・無効の設定をする | (mod_layerbutton)
laybtn_width | layerbuttonオブジェクトのサイズや位置を変更する | (mod_layerbutton)
laybtn_focus | layerbuttonの指定グループ内の指定オブジェクトにフォーカスを移動させる | (mod_layerbutton)
laybtn_stick | layerbuttonサブルーチン内用キー入力情報取得 | (mod_layerbutton)
laybtn_ezcel | layerbuttonのcelputを利用した簡単描画 | (mod_layerbutton)
laybtn_ezbox | layerbuttonの角丸長方形塗りつぶしによる簡単描画 | (mod_layerbutton)
laybtn_ezfrm | layerbuttonの角丸長方形枠線による簡単描画 | (mod_layerbutton)
laybtn_boxfb | laybtn_ezbox,laybtn_ezfrmの角丸長方形をサイズ指定で塗りつぶしまたはボーダー描画 | (mod_layerbutton)
laybtn_hitarea | layerbuttonオブジェクトのタッチ範囲を変更して設定する | (mod_layerbutton)
layerbtn_stat | layerbuttonのボタン状態が代入される | (mod_layerbutton)
layerbtn_cnt | layerbuttonのボタン状態が変更されてからの経過フレーム数 | (mod_layerbutton)

## サンプル逆引き (9)

01 demo.hsp | title "layerbutton demo" log = "" HSP3Dish.js用フォルダ設定 in..
02 demo-stateflow.hsp | title "layerbutton stateflow" log = "" fps2 = 0 HSP3Dis..
06 sample_settings.hsp | #include "mod_layerbutton.hsp" gosub *create_button_hid..
07 sample_vpad-jujikey.hsp | #include "hsp3dish.as" #include "mod_layerbutton.hsp" #..
08 sample_vpad-jujikey-noimg.hsp | #include "hsp3dish.as" #include "mod_layerbutton.hsp" #..
09 sample_vpad-analog.hsp | #include "hsp3dish.as" #include "mod_layerbutton.hsp" #..
10 sample_shooting.hsp | title "バーチャルパッド用サンプル シューティング" randomize HSP3Dish.js用データ..
12 sample_keybdmod.hsp | title "mod_layerbutton-keybd サンプル" HSP3Dish.js用データフォルダ設..
15 sample_RPG.hsp | title "RPGサンプル" -- 必要モジュール読み込み -- #include "mod_layerbu..

## 情報

プラグイン / モジュール | mod_layerbutton
バージョン | 1.3
作成日 | 2026/1/7
著作者 | MIZUSHIKI
URL | https://suwa.pupu.jp/HSP/index.html
備考 | layerobj命令を利用して、ちょっとリッチなアニメーション付きボタンを比較的簡単に作成することができます。
タイプ | 拡張命令
グループ | オブジェクト制御命令
対応環境 | ・Windows 版 HSP