common\
mod_layerbutton-keybd.hsp
/* /////////////////////////////////////////////////////////////////////////////
mod_layerbutton-keybd モジュール
--------------------------------------------------------------------------------
%dll ; モジュール名
mod_layerbutton-keybd
%ver ; バージョン
1.0
%date ; 更新日
2025/9/24
%author ; 著作者
MIZUSHIKI
%note
layerbutton命令を利用してスクリーンキーボードを作成
%type
拡張命令
%url
https://suwa.pupu.jp/HSP/index.html
%port ; 対応環境
Win
*/ /////////////////////////////////////////////////////////////////////////////
#if 0
%index ;========================================================================
ScKeyboard
スクリーンキーボードコントローラを作成
%group ;------------------------------------------------------------------------
オブジェクト制御命令
%prm ;------------------------------------------------------------------------
p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12
p1,p2 : スクリーンキーボードのXYサイズ(ドット単位)
p3=変数 : スクリーンキーボードの入力値が格納される変数を登録
p4=1〜(256) : 最大入力文字数(256文字まで)
p5=0〜(0) : グループID
p6=0〜(0) : SHOW_IN フレーム数
p7=0〜(0) : FOCUS_IN フレーム数
p8=0〜(0) : PRESS_IN フレーム数
p9=0〜(0) : SHOW_OUT フレーム数
p10=0〜(0) : FOCUS_OUT フレーム数
p11=0〜(0) : PRESS_OUT フレーム数
p12=0〜(0) : ボタンの角の丸みサイズR (-1で自動計算)
%inst ;------------------------------------------------------------------------
p1, p2 で指定した XY サイズに応じてスクリーンキーボードが表示されます。
X が大きい場合は横長モード、Y が大きい場合は縦長モードになります。
p3 で登録した変数には、スクリーンキーボードで入力中の文字列が代入されます。
p4 は最大入力文字数を指定します。(byte単位ではありません)
p5〜p11 の引数は layerbutton命令と同じ仕様です。
p12 を指定すると、ボタンの角にR(アール)を付けられます。
-1 を指定するとR(アール)サイズが自動計算されます。
※ ボタン数が多いため、R(アール)を付けると処理が重くなる可能性があります。
また、スクリーンキーボードは、各種命令によって外観を変更したり、描画処理に割り込んだりすることができます。
「OK」ボタンが押されてスクリーンキーボードが非表示になったことを検出するには、ScKeybd_onEvent で layerbtn_stat == LAYBTN_GROUP_DELETED を見ることで可能です。
なお、スクリーンキーボードは同時に複数設置することはできません。
%href ;-----------------------------------------------------------------------
ScKeybd_color
ScKeybd_font
ScKeybd_onEvent
Sckeybd_cursor
ScKeybd_HiraganaSymbol
ScKeybd_KatakanaSymbol
ScKeybd_AlphabetSymbol
%index ;========================================================================
ScKeybd_color
スクリーンキーボードコントローラの色設定を変更
%group ;------------------------------------------------------------------------
オブジェクト制御命令
%prm ;------------------------------------------------------------------------
col1,col2,col3,col4,col5,col6
col1=$000000〜$FFffffff : 有効キー・通常表示(ARGB形式)
col2=$000000〜$FFffffff : 有効キー・フォーカス時(ARGB形式)
col3=$000000〜$FFffffff : 有効キー・押し込み時(ARGB形式)
col4=$000000〜$FFffffff : 無効キー・通常表示(ARGB形式)
col5=$000000〜$FFffffff : 無効キー・フォーカス時(ARGB形式)
col6=$000000〜$FFffffff : 無効キー・押し込み時(ARGB形式)
%inst ;------------------------------------------------------------------------
各引数を省略した場合、前回の設定値が引き継がれます。
ScKeyboard 命令の前後いずれに記述しても動作します。
%href ;------------------------------------------------------------------------
ScKeyboard
ScKeybd_font
ScKeybd_onEvent
Sckeybd_cursor
ScKeybd_HiraganaSymbol
ScKeybd_KatakanaSymbol
ScKeybd_AlphabetSymbol
%index ;========================================================================
ScKeybd_font
スクリーンキーボードコントローラのフォント設定を変更
%group ;------------------------------------------------------------------------
オブジェクト制御命令
%prm ;------------------------------------------------------------------------
"fontname",p1,p2,p3,p4,p5,p6
"fontname" : フォント名
p1=1〜 : フォントの大きさ
p2=0〜 : フォントのスタイル
p3=1〜 : フォント修飾の幅
p4=$000000〜$ffffff : フォントカラー(RGB形式/colorに相当)
p5=$000000〜$ffffff : 影付き/縁取りカラー(RGB形式/objcolorに相当)
p6=0〜(0) : mesオプション[mes命令と同様]
%inst ;------------------------------------------------------------------------
"fontname", p1〜p3 は font 命令と同じ指定方法です。
p4 は color、p5 は objcolor に該当します。
p6 は mes 命令の sw オプション引数と同じです。
各引数を省略した場合、前回の設定値が引き継がれます。
ScKeyboard 命令の前後いずれに記述しても動作します。
%href ;------------------------------------------------------------------------
ScKeyboard
ScKeybd_color
ScKeybd_onEvent
Sckeybd_cursor
ScKeybd_HiraganaSymbol
ScKeybd_KatakanaSymbol
ScKeybd_AlphabetSymbol
%index ;========================================================================
ScKeybd_onEvent
スクリーンキーボードコントローラの文字の描画に割り込みを設定
%group ;------------------------------------------------------------------------
オブジェクト制御命令
%prm ;------------------------------------------------------------------------
*label
*label : ラベル名
%inst ;------------------------------------------------------------------------
スクリーンキーボードが「文字」を描画する際に処理を割り込ませることができます。
描画対象の文字は refstr で取得して判別してください。(一応、statでも判別できます。)
return の引数に -1 を指定すると、元の文字描画をキャンセルできます。
これにより、デフォルトのキー表示を画像などに差し替えることが可能です。
割り込み処理内では、laybtn_ezcel や laybtn_mes など layerbutton モジュールの各種命令を利用できます。
また、layerbtn_stat や layerbtn_cnt の値を参照することで、フォーカス移動やキー入力も検出できます。
さらに、スクリーンキーボードが「OK」ボタンで閉じられた場合は lparam = objlayer_cmdterm となり、
最後のキーが削除されたときは layerbtn_stat == LAYBTN_GROUP_DELETED となるため、これらで状態を判定できます。
ScKeyboard 命令の前後いずれに記述しても動作します。
%href ;------------------------------------------------------------------------
ScKeyboard
ScKeybd_color
ScKeybd_font
Sckeybd_cursor
ScKeybd_HiraganaSymbol
ScKeybd_KatakanaSymbol
ScKeybd_AlphabetSymbol
%index ;========================================================================
Sckeybd_cursor
スクリーンキーボードコントローラにカーソル移動キーを追加
%group ;------------------------------------------------------------------------
オブジェクト制御命令
%prm ;------------------------------------------------------------------------
p1
p1=0〜(-3) : カーソルの移動先指定やオプション値
%inst ;------------------------------------------------------------------------
引数 p1 を省略(または-3指定)すると、スクリーンキーボードにカーソル移動キーが追加されます。
p1 に 0 以上の数値を指定した場合は、その位置へカーソルが移動し、-1 を指定すると右端へ移動します。
p1に -2 を指定した場合は、現在のカーソル位置が stat に代入されます。
なお、一度追加したカーソル移動キーは、p1 に -4 を指定することで削除できます。
%href ;------------------------------------------------------------------------
ScKeyboard
ScKeybd_color
ScKeybd_font
ScKeybd_onEvent
ScKeybd_HiraganaSymbol
ScKeybd_KatakanaSymbol
ScKeybd_AlphabetSymbol
%index ;========================================================================
ScKeybd_HiraganaSymbol
スクリーンキーボードコントローラの記号キーを上書き(「ひらがな」ページ)
%group ;------------------------------------------------------------------------
オブジェクト制御命令
%prm ;------------------------------------------------------------------------
p1,p2,...,pN
pN=文字 : 追加する文字
%inst ;------------------------------------------------------------------------
この命令は、スクリーンキーボードの「ひらがな」ページで使用する記号キーを指定します。
引数には、追加したい文字を順に指定してください。
文字の配置は以下のようになります。
・「あ」〜「ん」を表示し終わった次の行の先頭から順に、空いているキーへ追加されます。
・キーボードの最後まで埋まると再び先頭から数え直し、「ひらがな」以外の空いているキーに追加文字が割り当てられます。
初期状態ではいくつかの記号が登録されていますが、この命令を実行すると指定内容で上書きされます。
%href ;------------------------------------------------------------------------
ScKeyboard
ScKeybd_color
ScKeybd_font
ScKeybd_onEvent
Sckeybd_cursor
ScKeybd_KatakanaSymbol
ScKeybd_AlphabetSymbol
%index ;========================================================================
ScKeybd_KatakanaSymbol
スクリーンキーボードコントローラの記号キーを上書き(「カタカナ」ページ)
%group ;------------------------------------------------------------------------
オブジェクト制御命令
%prm ;------------------------------------------------------------------------
p1,p2,...,pN
pN=文字 : 追加する文字
%inst ;------------------------------------------------------------------------
この命令は、スクリーンキーボードの「カタカナ」ページで使用する記号キーを指定します。
引数には、追加したい文字を順に指定してください。
文字の配置は以下のようになります。
・「ア」〜「ン」を表示し終わった次の行の先頭から順に、空いているキーへ追加されます。
・キーボードの最後まで埋まると再び先頭から数え直し、「カタカナ」以外の空いているキーに追加文字が割り当てられます。
初期状態ではいくつかの記号が登録されていますが、この命令を実行すると指定内容で上書きされます。
%href ;------------------------------------------------------------------------
ScKeyboard
ScKeybd_color
ScKeybd_font
ScKeybd_onEvent
Sckeybd_cursor
ScKeybd_HiraganaSymbol
ScKeybd_AlphabetSymbol
%index ;========================================================================
ScKeybd_AlphabetSymbol
スクリーンキーボードコントローラの記号キーを上書き(「アルファベット」ページ)
%group ;------------------------------------------------------------------------
オブジェクト制御命令
%prm ;------------------------------------------------------------------------
p1,p2,...,pN
pN=文字 : 追加する文字
%inst ;------------------------------------------------------------------------
この命令は、スクリーンキーボードの「アルファベット」ページで使用する記号キーを指定します。
引数には、追加したい文字を順に指定してください。
文字の配置は以下のようになります。
・「アルファベットと数字」を表示し終わった次の行の先頭から順に、空いているキーへ追加されます。
・キーボードの最後まで埋まると再び先頭から数え直し、「アルファベットと数字」以外の空いているキーに追加文字が割り当てられます。
初期状態ではいくつかの記号が登録されていますが、この命令を実行すると指定内容で上書きされます。
%href ;------------------------------------------------------------------------
ScKeyboard
ScKeybd_color
ScKeybd_font
ScKeybd_onEvent
Sckeybd_cursor
ScKeybd_HiraganaSymbol
ScKeybd_KatakanaSymbol
% ;=============================================================================
#endif
#include "mod_layerbutton.hsp"
#ifndef ScKeyboard
#module modlaybtn_keybd
*init
if inited : return
inited = 1 ; 初期化済みフラグ
// ひらがな
sdim hiragana,32,55,3
hiragana(0,0) = "あ","い","う","え","お","か","き","く","け","こ","さ","し","す","せ","そ","た","ち","つ","て","と","な","に","ぬ","ね","の","は","ひ","ふ","へ","ほ","ま","み","む","め","も","や", "","ゆ", "","よ","ら","り","る","れ","ろ","わ","を","ん"
hiragana(0,1) = "ぁ","ぃ","ぅ","ぇ","ぉ","が","ぎ","ぐ","げ","ご","ざ","じ","ず","ぜ","ぞ","だ","ぢ","っ","で","ど", "", "", "", "", "","ば","び","ぶ","べ","ぼ", "", "", "", "", "","ゃ", "","ゅ", "","ょ", "", "", "", "", "", "", "", ""
hiragana(0,2) = "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "","づ", "", "", "", "", "", "", "","ぱ","ぴ","ぷ","ぺ","ぽ", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""
repeat 55, 50
if hiragana(cnt\55) == "" : hiragana_kuranIndexs(hiragana_kuranIndexs_num) = (cnt\55) : hiragana_kuranIndexs_num++
loop
sdim hiragana_add,32,hiragana_kuranIndexs_num
hiragana_add = "!","?","","","","","","","ー"
// カタカナ
sdim katakana,32,55,3
katakana(0,0) = "ア","イ","ウ","エ","オ","カ","キ","ク","ケ","コ","サ","シ","ス","セ","ソ","タ","チ","ツ","テ","ト","ナ","ニ","ヌ","ネ","ノ","ハ","ヒ","フ","ヘ","ホ","マ","ミ","ム","メ","モ","ヤ", "","ユ", "","ヨ","ラ","リ","ル","レ","ロ","ワ","ヲ","ン"
katakana(0,1) = "ァ","ィ","ゥ","ェ","ォ","ガ","ギ","グ","ゲ","ゴ","ザ","ジ","ズ","ゼ","ゾ","ダ","ヂ","ッ","デ","ド", "", "", "", "", "","バ","ビ","ブ","ベ","ボ", "", "", "", "", "","ャ", "","ュ", "","ョ", "", "", "", "", "", "", "", ""
katakana(0,2) = "", "","ヴ", "", "", "", "", "", "", "", "", "", "", "", "", "", "","ヅ", "", "", "", "", "", "", "","パ","ピ","プ","ペ","ポ", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""
repeat 55, 50
if katakana(cnt\55) == "" : katakana_kuranIndexs(katakana_kuranIndexs_num) = (cnt\55) : katakana_kuranIndexs_num++
loop
sdim katakana_add,32,katakana_kuranIndexs_num
katakana_add = "!","?","","","","","","","ー"
// アルファベット
sdim alphabet_tate,32,55,2
sdim alphabet_yoko,32,55,2
alphabet_tate(0,0) = "a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","","","","","1","2","3","4","5","6","7","8","9","0"
alphabet_tate(0,1) = "A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","","","","","1","2","3","4","5","6","7","8","9","0"
alphabet_yoko(0,0) = "a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","","","","","","","","1","2","3","4","5","6","7","8","9","0",""
alphabet_yoko(0,1) = "A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","","","","","","","","1","2","3","4","5","6","7","8","9","0",""
repeat 55, 40
if alphabet_tate(cnt\55) == "" : alphabet_tate_kuranIndexs(alphabet_tate_kuranIndexs_num) = (cnt\55) : alphabet_tate_kuranIndexs_num++
loop
repeat 55, 44
if alphabet_yoko(cnt\55) == "" : alphabet_yoko_kuranIndexs(alphabet_yoko_kuranIndexs_num) = (cnt\55) : alphabet_yoko_kuranIndexs_num++
loop
sdim alphabet_add,32,limit(alphabet_tate_kuranIndexs_num,alphabet_yoko_kuranIndexs_num)
alphabet_add = "-","!","?","_","&","(",")","+","/","."
// 各種初期設定
_group_ = -1
_col1_ = $AADCDCDC
_col2_ = $EEB8D7F1
_col3_ = $EE3288FF
_col4_ = $AAAAAAAA
_col5_ = $AA777777
_col6_ = $AA777777
_fontName_ = msgothic
#ifdef _HSP3DISH
info_os = sysinfo(0)
if instr(info_os,0,"Emscripten")>=0 : _fontName_ = "sans-serif"
#endif
_fontSize_ = 16
_fontStyle_ = 1
_fontDecoSize_ = 1
_fontColor_ = $111111
_decoColor_ = $EEEEEE
_mesStyle_ = 0
useOnEvent = 0
useCursor = 0
return
// スクリーンキーボードコントローラ作成
#deffunc ScKeyboard int sx, int sy, var out_input, int input_max, int group, int show_in, int focus_in, int press_in, int show_out, int focus_out, int press_out, int r1
gosub *init
if _group_ >= 0 : if laybtn_length(_group_) : return
_out_input_ = ""
if vartype(out_input) == 2 : _out_input_ = out_input
_input_max_ = limit(input_max,0,256) : if _input_max_ == 0 : _input_max_ = 256
// 入力項目
sdim out_input,1024 : keybd_inputs="" : keybd_inputs_num=0 : keybd_kanaType=0 : keybd_posCursor=0
if _out_input_ != "" {
split_char@modlaybtn_keybd _out_input_, hairetu
repeat limit(stat,0,_input_max_)
keybd_inputs(cnt) = hairetu(cnt) : keybd_inputs_num++ : keybd_posCursor++
loop
out_input = "" : repeat limit(keybd_inputs_num,,256) : out_input += keybd_inputs(cnt) : loop
}
_sx_ = sx
_sy_ = sy
_group_ = group ; キーボードは1つだけ
gcx = ginfo_cx : gcy = ginfo_cy
_pOutVar_ = varptr(out_input)
_show_in_ = show_in
_focus_in_ = focus_in
_press_in_ = press_in
_show_out_ = show_out
_focus_out_ = focus_out
_press_out_ = press_out
_komoji_fontSize_ = 0
_backspace_fontsize_ = 0
if sx < sy {
sxKey = sx/5 : syKey = (sy-10)/13
_r1_ = r1 : if r1 == -1 : _r1_ = (sxKey + syKey)/40
gosub *create_aiueo_tate
pxyHira = sxKey*0 +gcx, syKey*11+10 +gcy : sxyHira = sxKey, syKey
pxyKata = sxKey*1 +gcx, syKey*11+10 +gcy : sxyKata = sxKey, syKey
pxySyoA = sxKey*0 +gcx, syKey*12+10 +gcy : sxySyoA = sxKey, syKey
pxyDaiA = sxKey*1 +gcx, syKey*12+10 +gcy : sxyDaiA = sxKey, syKey
pxyKomj = sxKey*2 +gcx, syKey*11+10 +gcy : sxyKomj = sxKey, syKey
pxyLeft = sxKey*2 +gcx, syKey*12+10 +gcy : sxyLeft = sxKey/2, syKey
pxyRigh = sxKey*2+sxKey/2 +gcx, syKey*12+10 +gcy : sxyRigh = sxKey/2, syKey
pxyKuha = sxKey*3 +gcx, syKey*11+10 +gcy : sxyKuha = sxKey, syKey
pxySkjo = sxKey*4 +gcx, syKey*11+10 +gcy : sxySkjo = sxKey, syKey
pxyOkok = sxKey*3 +gcx, syKey*12+10 +gcy : sxyOkok = sxKey*2, syKey
}else {
sxKey = (sx-14)/14 : syKey = sy/5
_r1_ = r1 : if r1 == -1 : _r1_ = (sxKey + syKey)/40
gosub *create_aiueo_yoko
pxyHira = int(1.5*sxKey/2)*0 +gcx, syKey*0 +gcy : sxyHira = int(1.5*sxKey/2), syKey
pxyKata = int(1.5*sxKey/2)*1 +gcx, syKey*0 +gcy : sxyKata = int(1.5*sxKey/2), syKey
pxySyoA = int(1.5*sxKey/2)*0 +gcx, syKey*1 +gcy : sxySyoA = int(1.5*sxKey/2), syKey
pxyDaiA = int(1.5*sxKey/2)*1 +gcx, syKey*1 +gcy : sxyDaiA = int(1.5*sxKey/2), syKey
pxyKomj = int(1.5*sxKey/2)*0 +gcx, syKey*2 +gcy : sxyKomj = int(1.5*sxKey), syKey
pxyLeft = int(1.5*sxKey/2)*0 +gcx, syKey*4 +gcy : sxyLeft = int(1.5*sxKey/2), syKey
pxyRigh = int(1.5*sxKey/2)*1 +gcx, syKey*4 +gcy : sxyRigh = int(1.5*sxKey/2), syKey
pxyKuha = int(1.5*sxKey)+7+sxKey*11+7 +gcx, syKey*1 +gcy : sxyKuha = int(1.5*sxKey), syKey
pxySkjo = int(1.5*sxKey)+7+sxKey*11+7 +gcx, syKey*0 +gcy : sxySkjo = int(1.5*sxKey), syKey
pxyOkok = int(1.5*sxKey)+7+sxKey*11+7 +gcx, syKey*3 +gcy : sxyOkok = int(1.5*sxKey), syKey*2
}
gosub *create_function
if useCursor : gosub *create_cursorkey
return
*create_aiueo_tate
i=0
repeat 11 : cnt2 = cnt
repeat 5
pos sxKey*cnt +gcx, syKey*cnt2 +gcy
layerbutton sxKey,syKey, i, group, show_in,focus_in,press_in, show_out,focus_out,press_out {
laybtn_settings 64,,1
if lparam == objlayer_cmddraw {
// 文字
switch keybd_kanaType
case 0 : wd = hiragana(objlayer_option,0) : if wd=="" {repeat hiragana_kuranIndexs_num:if hiragana_kuranIndexs(cnt)==objlayer_option{wd=hiragana_add(cnt):break}loop} : swbreak
case 1 : wd = katakana(objlayer_option,0) : if wd=="" {repeat katakana_kuranIndexs_num:if katakana_kuranIndexs(cnt)==objlayer_option{wd=katakana_add(cnt):break}loop} : swbreak
case 2 : wd = alphabet_tate(objlayer_option,0) : if wd=="" {repeat alphabet_tate_kuranIndexs_num:if alphabet_tate_kuranIndexs(cnt)==objlayer_option{wd=alphabet_add(cnt):break}loop} : swbreak
case 3 : wd = alphabet_tate(objlayer_option,1) : if wd=="" {repeat alphabet_tate_kuranIndexs_num:if alphabet_tate_kuranIndexs(cnt)==objlayer_option{wd=alphabet_add(cnt):break}loop} : swbreak
swend
// Push
if layerbtn_stat == LAYBTN_PRESS_IN_SELECTED && wd!="" && _input_max_ > keybd_inputs_num {
ADD_keybd_inputs keybd_posCursor, wd : keybd_inputs_num++ : keybd_posCursor++
dupptr _out_input, _pOutVar_, 1024, 2
_out_input = "" : repeat limit(keybd_inputs_num,,256) : _out_input += keybd_inputs(cnt) : loop
}
// 描画
if wd != "" {
laybtn_ezbox _col1_,_col2_,_col3_,,,,,,,_r1_, 0,0,-2,-2
}else {
laybtn_ezbox _col4_,_col5_,_col6_,,,,,,,_r1_, 0,0,-2,-2
}
// 文字表示
font _fontName_,_fontSize_,_fontStyle_,_fontDecoSize_
rgbcolor _fontColor_ : objcolor _decoColor_>>16&$FF,_decoColor_>>8&$FF,_decoColor_&$FF
if useOnEvent :SetStat objlayer_option+(keybd_kanaType*100):SetRefstr wd: gosub _onEventLabel_
if useOnEvent == 0 || stat != -1 {
laybtn_ezbox $01000000,$01000000,$01000000,wd,_mesStyle_
}
return
}
if lparam == objlayer_cmdterm : if layerbtn_stat == LAYBTN_GROUP_DELETED : if useOnEvent :SetStat -1:SetRefstr "": gosub _onEventLabel_
return
}
i++
loop
loop
return
*create_aiueo_yoko
i=0
repeat 5 : cnt2 = cnt
repeat 11
pos int(1.5*sxKey)+7+sxKey*cnt +gcx, syKey*cnt2 +gcy
layerbutton sxKey,syKey, i, group, show_in,focus_in,press_in, show_out,focus_out,press_out {
laybtn_settings 64,,1
if lparam == objlayer_cmddraw {
// 文字
if keybd_kanaType <= 1 { ; 位置変換
_i = (10-(objlayer_option\11))*5 + (objlayer_option/11)
}else {
_i = objlayer_option
}
switch keybd_kanaType
case 0 : wd = hiragana(_i,0) : if wd=="" {repeat hiragana_kuranIndexs_num:if hiragana_kuranIndexs(cnt)==_i{wd=hiragana_add(cnt):break}loop} : swbreak
case 1 : wd = katakana(_i,0) : if wd=="" {repeat katakana_kuranIndexs_num:if katakana_kuranIndexs(cnt)==_i{wd=katakana_add(cnt):break}loop} : swbreak
case 2 : wd = alphabet_yoko(_i,0) : if wd=="" {repeat alphabet_yoko_kuranIndexs_num:if alphabet_yoko_kuranIndexs(cnt)==_i{wd=alphabet_add(cnt):break}loop} : swbreak
case 3 : wd = alphabet_yoko(_i,1) : if wd=="" {repeat alphabet_yoko_kuranIndexs_num:if alphabet_yoko_kuranIndexs(cnt)==_i{wd=alphabet_add(cnt):break}loop} : swbreak
swend
// Push
if layerbtn_stat == LAYBTN_PRESS_IN_SELECTED && wd!="" && _input_max_ > keybd_inputs_num {
ADD_keybd_inputs keybd_posCursor, wd : keybd_inputs_num++ : keybd_posCursor++
dupptr _out_input, _pOutVar_, 1024, 2
_out_input = "" : repeat limit(keybd_inputs_num,,256) : _out_input += keybd_inputs(cnt) : loop
}
// 描画
if wd != "" {
laybtn_ezbox _col1_,_col2_,_col3_,,,,,,,_r1_, 0,0,-2,-2
}else {
laybtn_ezbox _col4_,_col5_,_col6_,,,,,,,_r1_, 0,0,-2,-2
}
// 文字表示
font _fontName_,_fontSize_,_fontStyle_,_fontDecoSize_
rgbcolor _fontColor_ : objcolor _decoColor_>>16&$FF,_decoColor_>>8&$FF,_decoColor_&$FF
if useOnEvent :SetStat _i+(keybd_kanaType*100):SetRefstr wd: gosub _onEventLabel_
if useOnEvent == 0 || stat != -1 {
laybtn_ezbox $01000000,$01000000,$01000000,wd,_mesStyle_
}
return
}
if lparam == objlayer_cmdterm : if layerbtn_stat == LAYBTN_GROUP_DELETED : if useOnEvent :SetStat -1:SetRefstr "": gosub _onEventLabel_
return
}
i++
loop
loop
return
*create_function
// あアaA枠
pos pxyHira(0), pxyHira(1)
layerbutton sxyHira(0)*2, sxyHira(1)*2, 1000, group, show_in,focus_in,press_in, show_out,focus_out,press_out {
laybtn_settings 1,1,1
if lparam == objlayer_cmddraw {
// 全体枠
laybtn_ezbox _col1_,_col1_,_col1_,,,,,,,_r1_, 0,0,-2,-2
return
}
if lparam == objlayer_cmdterm : if layerbtn_stat == LAYBTN_GROUP_DELETED : if useOnEvent :SetStat -1:SetRefstr "": gosub _onEventLabel_
return
}
// ひらがな
pos pxyHira(0), pxyHira(1)
layerbutton sxyHira(0), sxyHira(1), 1001, group, show_in,focus_in,press_in, show_out,focus_out,press_out {
laybtn_settings 64,,1
if lparam == objlayer_cmddraw {
wd = "あ"
// Push
if layerbtn_stat == LAYBTN_PRESS_IN_SELECTED {
if keybd_kanaType != 0 : keybd_kanaType = 0
}
// フォーカス
laybtn_ezbox $01FFFFFF, (((_col2_>>24&$FF)/2)<<24)|(_col2_&$FFFFFF), (((_col3_>>24&$FF)/2)<<24)|(_col3_&$FFFFFF),,,,,,,-1*(_r1_==0)+_r1_,2,2,-2,-2
if keybd_kanaType == 0 && (layerbtn_stat & (LAYBTN_SHOW_OUT|LAYBTN_COMPLETE))==0 {
// 選択中表示
rgbcolor _col3_ : gmode 3,,,(_col2_>>24&$FF)
rboxfa_auto@modlaybtn objlayer_axis_x+objlayer_size_x/4+2, objlayer_axis_y2-12+2, objlayer_axis_x2-objlayer_size_x/4+2, objlayer_axis_y2-8+2, 2
}
// 文字表示
font _fontName_,_fontSize_,_fontStyle_,_fontDecoSize_
rgbcolor _fontColor_ : objcolor _decoColor_>>16&$FF,_decoColor_>>8&$FF,_decoColor_&$FF
if useOnEvent :SetStat objlayer_option:SetRefstr wd: gosub _onEventLabel_
if useOnEvent == 0 || stat != -1 {
laybtn_ezbox $01000000,$01000000,$01000000,wd,_mesStyle_,,,,,,2,2
}
return
}
if lparam == objlayer_cmdterm : if layerbtn_stat == LAYBTN_GROUP_DELETED : if useOnEvent :SetStat -1:SetRefstr "": gosub _onEventLabel_
return
}
// カタカナ
pos pxyKata(0), pxyKata(1)
layerbutton sxyKata(0), sxyKata(1), 1002, group, show_in,focus_in,press_in, show_out,focus_out,press_out {
laybtn_settings 64,,1
if lparam == objlayer_cmddraw {
wd = "ア"
// Push
if layerbtn_stat == LAYBTN_PRESS_IN_SELECTED {
if keybd_kanaType != 1 : keybd_kanaType = 1
}
// フォーカス
laybtn_ezbox $01FFFFFF, (((_col2_>>24&$FF)/2)<<24)|(_col2_&$FFFFFF), (((_col3_>>24&$FF)/2)<<24)|(_col3_&$FFFFFF),,,,,,,-1*(_r1_==0)+_r1_,-2,2,-2,-2
if keybd_kanaType == 1 && (layerbtn_stat & (LAYBTN_SHOW_OUT|LAYBTN_COMPLETE))==0 {
// 選択中表示
rgbcolor _col3_ : gmode 3,,,(_col2_>>24&$FF)
rboxfa_auto@modlaybtn objlayer_axis_x+objlayer_size_x/4-2, objlayer_axis_y2-12+2, objlayer_axis_x2-objlayer_size_x/4-2, objlayer_axis_y2-8+2, 2 ; 選択中表示
}
// 文字表示
font _fontName_,_fontSize_,_fontStyle_,_fontDecoSize_
rgbcolor _fontColor_ : objcolor _decoColor_>>16&$FF,_decoColor_>>8&$FF,_decoColor_&$FF
if useOnEvent :SetStat objlayer_option:SetRefstr wd: gosub _onEventLabel_
if useOnEvent == 0 || stat != -1 {
laybtn_ezbox $01000000,$01000000,$01000000,wd,_mesStyle_,,,,,,-2,2
}
return
}
if lparam == objlayer_cmdterm : if layerbtn_stat == LAYBTN_GROUP_DELETED : if useOnEvent :SetStat -1:SetRefstr "": gosub _onEventLabel_
return
}
// a
pos pxySyoA(0), pxySyoA(1)
layerbutton sxySyoA(0), sxySyoA(1), 1003, group, show_in,focus_in,press_in, show_out,focus_out,press_out {
laybtn_settings 64,,1
if lparam == objlayer_cmddraw {
wd = "a"
// Push
if layerbtn_stat == LAYBTN_PRESS_IN_SELECTED {
if keybd_kanaType != 2 : keybd_kanaType = 2
}
// フォーカス
laybtn_ezbox $01FFFFFF, (((_col2_>>24&$FF)/2)<<24)|(_col2_&$FFFFFF), (((_col3_>>24&$FF)/2)<<24)|(_col3_&$FFFFFF),,,,,,,-1*(_r1_==0)+_r1_,2,-2,-2,-2
if keybd_kanaType == 2 && (layerbtn_stat & (LAYBTN_SHOW_OUT|LAYBTN_COMPLETE))==0 {
// 選択中表示
rgbcolor _col3_ : gmode 3,,,(_col2_>>24&$FF)
rboxfa_auto@modlaybtn objlayer_axis_x+objlayer_size_x/4+2, objlayer_axis_y2-12-2, objlayer_axis_x2-objlayer_size_x/4+2, objlayer_axis_y2-8-2, 2 ; 選択中表示
}
// 文字表示
font _fontName_,_fontSize_,_fontStyle_,_fontDecoSize_
rgbcolor _fontColor_ : objcolor _decoColor_>>16&$FF,_decoColor_>>8&$FF,_decoColor_&$FF
if useOnEvent :SetStat objlayer_option:SetRefstr wd: gosub _onEventLabel_
if useOnEvent == 0 || stat != -1 {
laybtn_ezbox $01000000,$01000000,$01000000,wd,_mesStyle_,,,,,,2,-2
}
return
}
if lparam == objlayer_cmdterm : if layerbtn_stat == LAYBTN_GROUP_DELETED : if useOnEvent :SetStat -1:SetRefstr "": gosub _onEventLabel_
return
}
// A
pos pxyDaiA(0), pxyDaiA(1)
layerbutton sxyDaiA(0), sxyDaiA(1), 1004, group, show_in,focus_in,press_in, show_out,focus_out,press_out {
laybtn_settings 64,,1
if lparam == objlayer_cmddraw {
wd = "A"
// Push
if layerbtn_stat == LAYBTN_PRESS_IN_SELECTED {
if keybd_kanaType != 3 : keybd_kanaType = 3
}
// フォーカス
laybtn_ezbox $01FFFFFF, (((_col2_>>24&$FF)/2)<<24)|(_col2_&$FFFFFF), (((_col3_>>24&$FF)/2)<<24)|(_col3_&$FFFFFF),,,,,,,-1*(_r1_==0)+_r1_,-2,-2,-2,-2
if keybd_kanaType == 3 && (layerbtn_stat & (LAYBTN_SHOW_OUT|LAYBTN_COMPLETE))==0 {
// 選択中表示
rgbcolor _col3_ : gmode 3,,,(_col2_>>24&$FF)
rboxfa_auto@modlaybtn objlayer_axis_x+objlayer_size_x/4-2, objlayer_axis_y2-12-2, objlayer_axis_x2-objlayer_size_x/4-2, objlayer_axis_y2-8-2, 2 ; 選択中表示
}
// 文字表示
font _fontName_,_fontSize_,_fontStyle_,_fontDecoSize_
rgbcolor _fontColor_ : objcolor _decoColor_>>16&$FF,_decoColor_>>8&$FF,_decoColor_&$FF
if useOnEvent :SetStat objlayer_option:SetRefstr wd: gosub _onEventLabel_
if useOnEvent == 0 || stat != -1 {
laybtn_ezbox $01000000,$01000000,$01000000,wd,_mesStyle_,,,,,,-2,-2
}
return
}
if lparam == objlayer_cmdterm : if layerbtn_stat == LAYBTN_GROUP_DELETED : if useOnEvent :SetStat -1:SetRefstr "": gosub _onEventLabel_
return
}
// OK
pos pxyOkok(0), pxyOkok(1)
layerbutton sxyOkok(0), sxyOkok(1), 1005, group, show_in,focus_in,press_in, show_out,focus_out,press_out {
laybtn_settings 64,,0
if lparam == objlayer_cmddraw {
wd = "OK"
// 描画
laybtn_ezbox _col1_,_col2_,_col3_,,,,,,,_r1_,0,0,-2,-2
// 文字表示
font _fontName_,_fontSize_,_fontStyle_,_fontDecoSize_
rgbcolor _fontColor_ : objcolor _decoColor_>>16&$FF,_decoColor_>>8&$FF,_decoColor_&$FF
if useOnEvent :SetStat objlayer_option:SetRefstr wd: gosub _onEventLabel_
if useOnEvent == 0 || stat != -1 {
laybtn_ezbox $01000000,$01000000,$01000000,wd,_mesStyle_
}
return
}
if lparam == objlayer_cmdterm : if layerbtn_stat == LAYBTN_GROUP_DELETED : if useOnEvent :SetStat -1:SetRefstr "": gosub _onEventLabel_
return
}
// 空白
pos pxyKuha(0), pxyKuha(1)
layerbutton sxyKuha(0), sxyKuha(1), 1006, group, show_in,focus_in,press_in, show_out,focus_out,press_out {
laybtn_settings 64,,1
if lparam == objlayer_cmddraw {
wd = "空白"
// Push
if layerbtn_stat == LAYBTN_PRESS_IN_SELECTED && _input_max_ > keybd_inputs_num {
if keybd_kanaType <= 1 : wd=" " : else : wd=" "
ADD_keybd_inputs keybd_posCursor, wd : keybd_inputs_num++ : keybd_posCursor++
dupptr _out_input, _pOutVar_, 1024, 2
_out_input = "" : repeat limit(keybd_inputs_num,,256) : _out_input += keybd_inputs(cnt) : loop
}
// 描画
laybtn_ezbox _col1_,_col2_,_col3_,,,,,,,_r1_,0,0,-2,-2
// 文字表示
font _fontName_,_fontSize_,_fontStyle_,_fontDecoSize_
rgbcolor _fontColor_ : objcolor _decoColor_>>16&$FF,_decoColor_>>8&$FF,_decoColor_&$FF
if useOnEvent :SetStat objlayer_option:SetRefstr wd: gosub _onEventLabel_
if useOnEvent == 0 || stat != -1 {
laybtn_ezbox $01000000,$01000000,$01000000,wd,_mesStyle_
}
return
}
if lparam == objlayer_cmdterm : if layerbtn_stat == LAYBTN_GROUP_DELETED : if useOnEvent :SetStat -1:SetRefstr "": gosub _onEventLabel_
return
}
// 一文字消す
pos pxySkjo(0), pxySkjo(1)
layerbutton sxySkjo(0), sxySkjo(1), 1007, group, show_in,focus_in,press_in, show_out,focus_out,press_out {
laybtn_settings 64,,1
if lparam == objlayer_cmddraw {
wd = "一字削"
// BackSpaceキーを押したときにボタンを押したことにする。(押しっぱなしで連続になるようにする)
getkey backsp, 8
if mae_backsp != backsp : mae_backsp = backsp : if backsp : backsp_ipa = iparam ; 押した瞬間のiparamを記憶
if backsp && iparam > backsp_ipa {
if (iparam - backsp_ipa) < (LAYERBTN_KEY_REPEAT_FRAME@modlaybtn & $FFFF) {
backsp = 0
}else {
if (LAYERBTN_KEY_REPEAT_FRAME@modlaybtn>>16 & $FFFF) == 0 {
if (iparam - backsp_ipa)\(LAYERBTN_KEY_REPEAT_FRAME@modlaybtn/2) : backsp = 0
}else {
if (iparam - backsp_ipa)\(LAYERBTN_KEY_REPEAT_FRAME@modlaybtn>>16 & $FFFF) : backsp = 0
}
}
}
// Push (+ BackSpace:SHOW_OUT以降は受け付けないようにする)
if layerbtn_stat == LAYBTN_PRESS_IN_SELECTED || (backsp & layerbtn_stat < LAYBTN_SHOW_OUT) {
DEL_keybd_inputs keybd_posCursor
if keybd_posCursor > 0 : keybd_posCursor-- : keybd_inputs_num--
dupptr _out_input, _pOutVar_, 1024, 2
_out_input = "" : repeat limit(keybd_inputs_num,,256) : _out_input += keybd_inputs(cnt) : loop
}
// 描画
laybtn_ezbox _col1_,_col2_,_col3_,,,,,,,_r1_,0,0,-2,-2
// 文字表示
font _fontName_,_fontSize_,_fontStyle_,_fontDecoSize_
rgbcolor _fontColor_ : objcolor _decoColor_>>16&$FF,_decoColor_>>8&$FF,_decoColor_&$FF
if useOnEvent :SetStat objlayer_option:SetRefstr wd: gosub _onEventLabel_
if useOnEvent == 0 || stat != -1 {
if _backspace_fontsize_ == 0 {
// 文字がはみ出しがちなので、適正サイズを調査
_backspace_fontsize_ = 1
repeat
if _fontSize_-cnt <= 1 : break
pos -ginfo_sx, -ginfo_sy
font _fontName_,_fontSize_-cnt,_fontStyle_
mes wd, _mesStyle_
if ginfo_mesx < (0.9*sxySkjo(0)) : _backspace_fontsize_ = _fontSize_-cnt : break
loop
}
font _fontName_,_backspace_fontsize_,_fontStyle_,_fontDecoSize_
laybtn_ezbox $01000000,$01000000,$01000000,wd,_mesStyle_
}
return
}
if lparam == objlayer_cmdterm : if layerbtn_stat == LAYBTN_GROUP_DELETED : if useOnEvent :SetStat -1:SetRefstr "": gosub _onEventLabel_
return
}
// 小字゛゜
pos pxyKomj(0), pxyKomj(1)
layerbutton sxyKomj(0), sxyKomj(1), 1008, group, show_in,focus_in,press_in, show_out,focus_out,press_out {
laybtn_settings 64,,1
if lparam == objlayer_cmddraw {
wd = "小字 ゛゜"
// Push
if layerbtn_stat == LAYBTN_PRESS_IN_SELECTED {
if keybd_posCursor >= 1 {
mae_moji = keybd_inputs(keybd_posCursor-1)
repeat 50
UpdateDecoCase hiragana, cnt, keybd_inputs(keybd_posCursor-1) : if stat : break
UpdateDecoCase katakana, cnt, keybd_inputs(keybd_posCursor-1) : if stat : break
if _sx_ < _sy_ {
UpdateDecoCase alphabet_tate, cnt, keybd_inputs(keybd_posCursor-1) : if stat : break
}else {
UpdateDecoCase alphabet_yoko, cnt, keybd_inputs(keybd_posCursor-1) : if stat : break
}
loop
if mae_moji != keybd_inputs(keybd_posCursor-1) {
dupptr _out_input, _pOutVar_, 1024, 2
_out_input = "" : repeat limit(keybd_inputs_num,,256) : _out_input += keybd_inputs(cnt) : loop
}
}
}
// 描画
laybtn_ezbox _col1_,_col2_,_col3_,,,,,,,_r1_,0,0,-2,-2
// 文字表示
font _fontName_,_fontSize_,_fontStyle_,_fontDecoSize_
rgbcolor _fontColor_ : objcolor _decoColor_>>16&$FF,_decoColor_>>8&$FF,_decoColor_&$FF
if useOnEvent :SetStat objlayer_option:SetRefstr wd: gosub _onEventLabel_
if useOnEvent == 0 || stat != -1 {
if _komoji_fontSize_ == 0 {
// 文字がはみ出しがちなので、適正サイズを調査
_komoji_fontSize_ = 1
repeat
if _fontSize_-cnt <= 1 : break
pos -ginfo_sx, -ginfo_sy
font _fontName_,_fontSize_-cnt,_fontStyle_
mes wd, _mesStyle_
if ginfo_mesx < (0.9*sxyKomj(0)) : _komoji_fontSize_ = _fontSize_-cnt : break
loop
}
font _fontName_,_komoji_fontSize_,_fontStyle_,_fontDecoSize_
laybtn_ezbox $01000000,$01000000,$01000000,wd,_mesStyle_,,,,,0,(_komoji_fontSize_/3)*(wd=="小字 ゛゜"),0
}
return
}
if lparam == objlayer_cmdterm : if layerbtn_stat == LAYBTN_GROUP_DELETED : if useOnEvent :SetStat -1:SetRefstr "": gosub _onEventLabel_
return
}
return
*create_cursorkey
if id_cursorLeft == 0 {
// ←
pos pxyLeft(0), pxyLeft(1)
layerbutton sxyLeft(0), sxyLeft(1), 1009, _group_, _show_in_,_focus_in_,_press_in_, _show_out_,_focus_out_,_press_out_ {
laybtn_settings 64,,1
if lparam == objlayer_cmddraw {
wd = "←"
// Push
if layerbtn_stat == LAYBTN_PRESS_IN_SELECTED {
keybd_posCursor = limit(keybd_posCursor-1, 0, keybd_inputs_num)
}
// 描画
laybtn_ezbox _col1_,_col2_,_col3_,,,,,,,_r1_,0,0,-2,-2
// 文字表示
font _fontName_,_fontSize_,_fontStyle_,_fontDecoSize_
rgbcolor _fontColor_ : objcolor _decoColor_>>16&$FF,_decoColor_>>8&$FF,_decoColor_&$FF
if useOnEvent :SetStat objlayer_option:SetRefstr wd: gosub _onEventLabel_
if useOnEvent == 0 || stat != -1 {
laybtn_ezbox $01000000,$01000000,$01000000,wd,_mesStyle_
}
return
}
if lparam == objlayer_cmdterm {
id_cursorLeft = 0
if layerbtn_stat == LAYBTN_GROUP_DELETED : if useOnEvent :SetStat -1:SetRefstr "": gosub _onEventLabel_
}
return
}
id_cursorLeft = stat
}
if id_cursorRight == 0 {
// →
pos pxyRigh(0), pxyRigh(1)
layerbutton sxyRigh(0), sxyRigh(1), 1010, _group_, _show_in_,_focus_in_,_press_in_, _show_out_,_focus_out_,_press_out_ {
laybtn_settings 64,,1
if lparam == objlayer_cmddraw {
wd = "→"
// Push
if layerbtn_stat == LAYBTN_PRESS_IN_SELECTED {
keybd_posCursor = limit(keybd_posCursor+1, 0, keybd_inputs_num)
}
// 描画
laybtn_ezbox _col1_,_col2_,_col3_,,,,,,,_r1_,0,0,-2,-2
// 文字表示
font _fontName_,_fontSize_,_fontStyle_,_fontDecoSize_
rgbcolor _fontColor_ : objcolor _decoColor_>>16&$FF,_decoColor_>>8&$FF,_decoColor_&$FF
if useOnEvent :SetStat objlayer_option:SetRefstr wd: gosub _onEventLabel_
if useOnEvent == 0 || stat != -1 {
laybtn_ezbox $01000000,$01000000,$01000000,wd,_mesStyle_
}
return
}
if lparam == objlayer_cmdterm {
id_cursorRight = 0
if layerbtn_stat == LAYBTN_GROUP_DELETED : if useOnEvent :SetStat -1:SetRefstr "": gosub _onEventLabel_
}
return
}
id_cursorRight = stat
}
return
// 設定系命令
#define global ScKeybd_color(%1=$01674523,%2=$01674523,%3=$01674523,%4=$01674523,%5=$01674523,%6=$01674523) ScKeybd_color@modlaybtn_keybd %1,%2,%3,%4,%5,%6
#deffunc ScKeybd_color@modlaybtn_keybd int col1, int col2, int col3, int col4, int col5, int col6
gosub *init
if col1 != $01674523 : _col1_ = col1 : if (col1>>24&$FF) == 0 : _col1_ |= $FF000000
if col2 != $01674523 : _col2_ = col2 : if (col2>>24&$FF) == 0 : _col2_ |= $FF000000
if col3 != $01674523 : _col3_ = col3 : if (col3>>24&$FF) == 0 : _col3_ |= $FF000000
if col4 != $01674523 : _col4_ = col4 : if (col4>>24&$FF) == 0 : _col4_ |= $FF000000
if col5 != $01674523 : _col5_ = col5 : if (col5>>24&$FF) == 0 : _col5_ |= $FF000000
if col6 != $01674523 : _col6_ = col6 : if (col6>>24&$FF) == 0 : _col6_ |= $FF000000
return
#define global ScKeybd_font(%1="___null",%2=-1,%3=-1,%4=-1,%5=-1,%6=-1,%7=-1) ScKeybd_font@modlaybtn_keybd %1,%2,%3,%4,%5,%6,%7
#deffunc ScKeybd_font@modlaybtn_keybd str fontName, int fontSize, int fontStyle, int fontDecoSize, int fontColor, int decoColor, int mesStyle
gosub *init
if fontName != "___null" : _fontName_ = fontName
if fontSize != -1 : _fontSize_ = fontSize
if fontStyle != -1 : _fontStyle_ = fontStyle
if fontDecoSize != -1 : _fontDecoSize_ = fontDecoSize
if fontColor != -1 : _fontColor_ = fontColor
if decoColor != -1 : _decoColor_ = decoColor
if mesStyle != -1 : _mesStyle_ = mesStyle
return
#define global ScKeybd_onEvent(%1=-1) _lbl@modlaybtn_keybd=%1 : ScKeybd_onEvent@modlaybtn_keybd
#deffunc ScKeybd_onEvent@modlaybtn_keybd
gosub *init
if vartype(_lbl) == 1 {
useOnEvent = 1
_onEventLabel_ = _lbl
}else {
useOnEvent = 0
}
return
#define global ScKeybd_HiraganaSymbol(%1="",%2="",%3="",%4="",%5="",%6="",%7="",%8="",%9="",%10="",%11="",%12="",%13="",%14="",%15="",%16="",%17="",%18="",%19="",%20="") ScKeybd_HiraganaSymbol@modlaybtn_keybd %1,%2,%3,%4,%5,%6,%7,%8,%9,%10,%11,%12,%13,%14,%15,%16,%17,%18,%19,%20
#deffunc ScKeybd_HiraganaSymbol@modlaybtn_keybd str w1, str w2, str w3, str w4, str w5, str w6, str w7, str w8, str w9, str w10, str w11, str w12, str w13, str w14, str w15, str w16, str w17, str w18, str w19, str w20
gosub *init
hiragana_add = w1,w2,w3,w4,w5,w6,w7,w8,w9,w10,w11,w12,w13,w14,w15,w16,w17,w18,w19,w20
return
#define global ScKeybd_KatakanaSymbol(%1="",%2="",%3="",%4="",%5="",%6="",%7="",%8="",%9="",%10="",%11="",%12="",%13="",%14="",%15="",%16="",%17="",%18="",%19="",%20="") ScKeybd_KatakanaSymbol@modlaybtn_keybd %1,%2,%3,%4,%5,%6,%7,%8,%9,%10,%11,%12,%13,%14,%15,%16,%17,%18,%19,%20
#deffunc ScKeybd_KatakanaSymbol@modlaybtn_keybd str w1, str w2, str w3, str w4, str w5, str w6, str w7, str w8, str w9, str w10, str w11, str w12, str w13, str w14, str w15, str w16, str w17, str w18, str w19, str w20
gosub *init
katakana_add = w1,w2,w3,w4,w5,w6,w7,w8,w9,w10,w11,w12,w13,w14,w15,w16,w17,w18,w19,w20
return
#define global ScKeybd_AlphabetSymbol(%1="",%2="",%3="",%4="",%5="",%6="",%7="",%8="",%9="",%10="",%11="",%12="",%13="",%14="",%15="",%16="",%17="",%18="",%19="",%20="") ScKeybd_AlphabetSymbol@modlaybtn_keybd %1,%2,%3,%4,%5,%6,%7,%8,%9,%10,%11,%12,%13,%14,%15,%16,%17,%18,%19,%20
#deffunc ScKeybd_AlphabetSymbol@modlaybtn_keybd str w1, str w2, str w3, str w4, str w5, str w6, str w7, str w8, str w9, str w10, str w11, str w12, str w13, str w14, str w15, str w16, str w17, str w18, str w19, str w20
gosub *init
alphabet_add = w1,w2,w3,w4,w5,w6,w7,w8,w9,w10,w11,w12,w13,w14,w15,w16,w17,w18,w19,w20
return
#define global Sckeybd_cursor(%1=-3) Sckeybd_cursor@modlaybtn_keybd %1
#deffunc Sckeybd_cursor@modlaybtn_keybd int p1
gosub *init
if p1 == -2 { ; get
if _group_ == -1 : return -1
if _group_ >= 0 : if laybtn_length(_group_) == 0 : return -1
return keybd_posCursor
}
if p1 == -3 { ; create (default)
useCursor = 1
if _group_ == -1 : return
if _group_ >= 0 : if laybtn_length(_group_) == 0 : return
gosub *create_cursorkey
return
}
if p1 == -4 { ; clear
useCursor = 0
if _group_ == -1 : return
if _group_ >= 0 : if laybtn_length(_group_) == 0 : return
if id_cursorLeft : clrobj id_cursorLeft, id_cursorLeft : id_cursorLeft = 0
if id_cursorRight : clrobj id_cursorRight, id_cursorRight : id_cursorRight = 0
return
}
if p1 == -1 { ; 右端
keybd_posCursor = keybd_inputs_num
return
}else { ; 指定位置
keybd_posCursor = limit(p1, 0, keybd_inputs_num)
return
}
return
// local命令
#deffunc local ADD_keybd_inputs int posCursor, str word
repeat keybd_inputs_num-posCursor
keybd_inputs(keybd_inputs_num-cnt) = keybd_inputs(keybd_inputs_num-1-cnt)
loop
keybd_inputs(posCursor) = word
return
#deffunc local DEL_keybd_inputs int posCursor
if posCursor <= 0 : return
repeat keybd_inputs_num-posCursor
keybd_inputs(posCursor-1+cnt) = keybd_inputs(posCursor+cnt)
loop
return
#deffunc local UpdateDecoCase array _arr, int _cnt2, var word_
breaker = 0
repeat length2(_arr)
if _arr(_cnt2,cnt) == word_ {
cnt1 = cnt
repeat length2(_arr)-1,1
if _arr(_cnt2, (cnt1+cnt)\length2(_arr)) == "" : continue
word_ = _arr(_cnt2, (cnt1+cnt)\length2(_arr)) : break
loop
breaker = 1 : break
}
loop
return breaker
#deffunc local SetRefstr str word_
return word_
#deffunc local SetStat int p1
return p1
#deffunc split_char@modlaybtn_keybd str __str, array dst
if hspstat & $20000 {
split_utf8 dst, __str
}else {
split_sjis dst, __str
}
return
#deffunc local split_utf8 array dst, str __str
_str = __str
sdim dst, 32
dst_num = 0
len = strlen(_str)
i = 0 : count = 0
repeat
if i >= len : break
c = peek(_str, i)
if c < $80 {
bytes = 1
}else : if c < $E0 {
bytes = 2
}else : if c < $F0 {
bytes = 3
}else : if c < $F8 {
bytes = 4
}else : if c < $FC {
bytes = 5
}else {
bytes = 6
}
s = strmid(_str, i, bytes)
dst(dst_num) = s : dst_num++
i += bytes : count++
loop
return count
#deffunc local split_sjis array dst, str __str
_str = __str
sdim dst, 32
dst_num = 0
len = strlen(_str)
i = 0 : count = 0
repeat
if i >= len : break
c = peek(_str, i)
if (c >= $81 && c <= $9F) || (c >= $E0 && c <= $FC) {
bytes = 2
} else {
bytes = 1
}
s = strmid(_str, i, bytes)
dst(dst_num) = s : dst_num++
i += bytes : count++
loop
return count
#global
#endif