【FileMaker】数字をテンキーで入力したい

FileMaker Goではテンキーなど入力手段が色々と用意されていますが、ノートPCなどで数字を入力するのは、結構めんどくさいですよね。
なので、数字を入力するテンキーを実装しました。

# 動きについて

こんな感じです。
![20160726_1.png](https://qiita-image-store.s3.amazonaws.com/0/60538/45617111-fc69-0dfc-e49f-5554ac34e2f9.png)


まずは、こちらで動きを確認です。
https://youtu.be/TYMEph0mFFw

数字パレットは、「入力値表示」以外は、ほとんどがボタンです。
![20160726_pallet.png](https://qiita-image-store.s3.amazonaws.com/0/60538/fb971480-d0f0-7a72-28d9-3dc9bc5c04b9.png)
上部の入力値は、テンキーで押された数値やボタンの結果が反映されます。

# テーブル構成

テーブルは、テンキーの数字パレットと今回サンプル用のテーブルです。
それぞれの数字のグローバル変数には、あらかじめ数字が設定されています。
![20160726_tbpallet.png](https://qiita-image-store.s3.amazonaws.com/0/60538/1bc73a80-dd91-0490-7fd8-b6a4bcf6be10.png)

:::note info
## 2024/05/23 追記
それぞれの数字のグローバル変数にあらかじめ数字を設定する方法として、2つの方法を紹介です。
（この部分のみFileMaker Pro 2023で実装したキャプチャになりますが、拡張子がfmp12のものであれば問題なく動きます。それ以外では確認していません、、、、）

### (1)ファイルを開いたときにグローバル変数に設定する方法
複数のレイアウトで同じ電卓レイアウトを使いたい時は、こちらの方法がおすすめです。
![スクリーンショット 2024-05-23 12.50.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/e9c97b58-fb51-e2de-4d30-26dc22beac39.png)

### (2)レイアウトを開いた時にグローバル変数に設定する方法
明らかに一つのレイアウトでしか使わない、もしくは電卓の種類によって表示する数字やテキストが違う場合は、レイアウトごとに初期設定するのがおすすめです。
![スクリーンショット 2024-05-23 12.50.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/33772631-8ad5-03ea-8119-bddd8671a738.png)

### 応用編
スクリプト内容は同じなので、スクリプトの使い回しをしても大丈夫ですが、同じスクリプト内で別の設定や処理を入れたい場合は、「[スクリプト実行](https://help.claris.com/ja/pro-help/content/control-script-steps.html)」ステップを使ってそれぞれのスクリプトから呼び出す形でユーティリティ化するのもいいですね。
![スクリーンショット 2024-05-23 15.42.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/50551cb7-6441-5d86-9bc2-d4e343de71f8.png)

:::

サンプル用のテーブルは、それぞれの環境での使用テーブルになります。
ここでは、適当な入力フィールドを作っています。
![20160726_tbsample.png](https://qiita-image-store.s3.amazonaws.com/0/60538/17338569-cbdd-1ab1-56ec-d3901c29763b.png)

# 数字パレットを表示するには
数字パレットを表示するタイミングを、スクリプトトリガのOnObjectEnterに指定します。
![20160726_scripttrigger.png](https://qiita-image-store.s3.amazonaws.com/0/60538/991afcee-7a72-9b3d-a46b-61f23d8632c8.png)
このとき、スクリプトの引数として、数字パレットで決定した数値を設定するテーブル::フィールドとレコード番号を渡します。
入力フィールドに設定する方法は他にも方法はあるかと思いますが、今回は数字パレットの決定ボタンが押されたら、直接フィールドに設定する方法を取っています。

#数字パレットを表示するスクリプト
何もめんどくさいことはしていません。
単に新規ウィンドウに数字パレットを表示するのがメインです。
ポイントは、入力値を表示するディスプレイフィールドを初期化しておくことです。
グローバルフィールドなので、前回の数値が残っていては、美しくないですよね。
![20160726_script1.png](https://qiita-image-store.s3.amazonaws.com/0/60538/c5084d49-ad09-141a-3cd1-209d546127f7.png)

# 数字キーが押されたら
数字キーが押されたら、ディスプレイフィールドにどんどんつなげていきます。
これを、1〜0まで設定します。
![20160726_script2.png](https://qiita-image-store.s3.amazonaws.com/0/60538/9bc7fae5-dc86-0292-87ae-cf6a695f1866.png)

# １数字消したい
入力した数字を１つ消したい場合もありますので、左矢印キーを作りました。
こちらも単純につなげたディスプレイフィールドから、右側の１数字を削っているだけです。
![20160726_script3.png](https://qiita-image-store.s3.amazonaws.com/0/60538/92008bb1-59a1-ba95-0385-e52b6b6eaeef.png)

# 全部消したい
入力し直したい場合として、「C」（クリア）キーを作りました。
単純にディスプレイフィールドをクリアします。
![20160726_script4.png](https://qiita-image-store.s3.amazonaws.com/0/60538/889169f3-537f-2311-232f-c90385b9ffb3.png)

# 入力値を決定する
入力した値を入力フィールドに反映します。
ついでに数字パレットのウィンドウも閉じます。
このウィンドウを閉じる動作のために数字パレットを表示するスクリプトではグローバル変数にウィンドウ名を入れていますが、タイミングとして実装方法によってはここでなくてもいいかもしれません。
![20160726_script5.png](https://qiita-image-store.s3.amazonaws.com/0/60538/030b6d12-e970-1d86-ca4d-5b5f72ede296.png)

# 入力値を入力フィールドに設定する
今回、入力フィールドに入力値を設定する処理を別スクリプトで実装しています。
これは、場合によって入力フィールドに設定する方法が違うと思うので、設定部分を切り出して修正しやすくしています。
今回は、グローバル変数に保持しているフィールド情報をもとに、入力値を設定しています。
![20160726_script6.png](https://qiita-image-store.s3.amazonaws.com/0/60538/2e1693e3-36c2-ee42-3ddf-2d21f28e3398.png)


どうでしょうか？
少しの実装で入力が楽になりますよ。