こんにちはジョージです。一般的なカスタム App 開発ではまず使うことのない「XOR」を無理矢理使ってみます。
XOR とは
計算式ダイアログの演算子に鎮座する「これ」です。ちなみにエクスクルーシブオア(eXclusive OR)と読みます。
![スクリーンショット 2022-11-29 11.03.18.png (49.6 kB)](https://img.esa.io/uploads/production/attachments/5600/2022/11/29/20803/9a59665f-a22b-468f-b677-73fb865da8d9.png)
XOR の真理値表
XOR の論理演算は以下のような特性があります。2 つの入力が異なる場合、結果に真を返します。なかなひねくれてます。はたして XOR をカスタム App に取り入れることはできるのでしょうか???
X | Y | 結果 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
トグルスイッチ
以前 Abs 関数でも紹介しましたが、
![](https://blog.genecom.co.jp/wp-content/uploads/2022/08/A_じぇねんちゅの自由研究-300x158.png)
トグルとは現在の状態を交互に反転する操作です。変数 $$flg に対して Abs 関数でトグルを実装するには以下の計算式が利用できます。
$$flg = Abs( $$flg - 1 )
これを XOR で置き換えると以下のようになります。少しだけ記述が少なくなりましたね!
$$flg = $$flg xor 1
XOR の真理値表に置き換えると以下の演算が対応します。$$flg 現在の状態が入力 1 を加えると反転するというわけです。
$$flg | 入力 | 結果 |
---|---|---|
0 | 1 | 1 |
1 | 1 | 0 |
ボタンに応用
カスタム App に応用してみましょう!まずはボタンバーを作成してオブジェクト名に「SW」と指定します。
![スクリーンショット 2022-12-01 16.24.20.png (304.7 kB)](https://img.esa.io/uploads/production/attachments/5600/2022/12/01/20803/20f99778-9b34-4e80-8731-7d98dbeb8454.png)
さらに、アクティブセグメントの背景を青で指定し、内側の陰影でボタンが押し込まれた感じに設定します。
![スクリーンショット 2022-12-01 16.25.46.png (317.9 kB)](https://img.esa.io/uploads/production/attachments/5600/2022/12/01/20803/620aa030-1514-4161-9eb6-53496fcac401.png)
ボタンバー設定ダイアログから、アクティブセグメントの指定を「False」とします。これはボタンバーのディフォルトのセグメントの状態になります。※アクティブセグメント「なし」ではうまく動作しません。
![スクリーンショット 2022-12-01 16.24.57.png (229.6 kB)](https://img.esa.io/uploads/production/attachments/5600/2022/12/01/20803/159d63f7-5eac-4556-abad-bebd5fafc12c.png)
![スクリーンショット 2022-12-01 16.25.05.png (184.3 kB)](https://img.esa.io/uploads/production/attachments/5600/2022/12/01/20803/b3957798-a7be-4ffd-bc83-16149062326d.png)
最後に、処理アクションにスクリプト「トグル」を指定します。
![スクリーンショット 2022-12-01 16.42.18.png (84.9 kB)](https://img.esa.io/uploads/production/attachments/5600/2022/12/01/20803/e9c92f98-95b7-4237-a64e-e0e9ff4666e0.png)
スクリプトの中身はこんな感じです。1行目に xor を使ってみました。
変数を設定 [ $$flg ; 値: $$flg xor 1 ]
If [ not $$flg ]
オブジェクトの更新 [ オブジェクト名: "SW" ; 繰り返し: 1 ]
End If
![スクリーンショット 2022-12-01 16.33.57.png (134.3 kB)](https://img.esa.io/uploads/production/attachments/5600/2022/12/01/20803/2f532671-f547-4ebc-818f-eafe95dea370.png)
ボタンをクリックして $$flg が 1 になると、アクティブセグメントが有効となりボタンが青い背景となります。
さらにボタンを押すと $$flg が 0 となりボタンバーの表示が初期化され、元の白い背景に戻ります。
![スクリーンショット 2022-12-01 16.25.20.png (117.0 kB)](https://img.esa.io/uploads/production/attachments/5600/2022/12/01/20803/5d3f9836-b833-4ce5-8d92-c610f0320353.png)
![スクリーンショット 2022-12-01 16.25.24.png (121.2 kB)](https://img.esa.io/uploads/production/attachments/5600/2022/12/01/20803/751fbec6-77eb-4030-9c9c-8a75e9233d1e.png)
まとめ
いかがでしたでしょうか? FileMaker のカスタム App でトグルといえば Abs 関数を使ったものが多い印象ですが、あえて XOR を使ってみるのも面白いと思います!気になる方は試してみてね。