PowerAppsで作った7セグLEDをコンポーネント化して6桁表示にしてみた

# 前回記事はこちら
[PowerApps で画像を使わずに、7セグLEDを表現してみた](https://qiita.com/rnakamuramartiny/items/40b95e287688483c4e24)

# 一桁表示じゃやっぱり味気ない
まぁそりゃそうでしょうよ。
こんなの全く意味ないもの。
やっぱり複数桁表示できてこそ・・・ですよね。

## でも・・・
あんなの毎回コピペなんてできない・・・

フラグを各桁毎に7つ用意しないといけないんですもんよ。
そりゃ厳しいですって。

## そうだ！コンポーネント化しよう！！
というわけで、前回作った7セグLEDをコンポーネント化していきます。

# コンポーネント化とは
PowerAppsで実験的に提供されている
複数のオブジェクトを関数や変数ごとまとめて
一つのオブジェクトとして扱います。
コンポーネントがグループと全く異なるのは
コンポーネントに対して入出力が設定できるところです。

ようは、コンポーネントに対してデータを送って表示を制御したり
コンポーネント側の実行結果を本体アプリに返す
ということが可能になります。

@h-nagao さんのこちらの記事が非常にわかりやすいです！ぜひ参考になさってください。
[PowerApps の Componentsについて紹介 (実験的な機能)](https://qiita.com/h-nagao/items/daf143225f28acb7990f)

## コンポーネント化の有効化
キャンバス表示から「ファイル」をクリックして
![](https://i.imgur.com/AXwnt4K.png)

「アプリの設定」から
![](https://i.imgur.com/iYBUKKF.png)

「詳細設定」をクリックし
![](https://i.imgur.com/dJv3Gfj.png)

一番下の「コンポーネント」を有効化します。
![](https://i.imgur.com/29av2Jv.png)

すると、画面ビューの横に「コンポーネント」が表示されていると思います。
![](https://i.imgur.com/hIIRPVi.png)

また、挿入タブにも新しく「コンポーネント」が表示されていれば有効化されています。

![](https://i.imgur.com/ogFg9ZI.png)

## 7セグLEDをコンポーネント化
画面ビュー横の「コンポーネント」をクリックし
コンポーネントビューに切り替えたら
「新しいコンポーネント」をクリックしましょう。
![](https://i.imgur.com/G4Q0B6I.png)

Component1というのが作られますので
名前を7SegLEDに変更し
サイズを　Widthを 177 Heightを 327 にします。
![](https://i.imgur.com/putgTNW.png)

出来たら、画面ビューに戻り、7SegLEDのオブジェクトを
スライダーを残してすべて選択し、コピーします。

![](https://i.imgur.com/Jm340Jn.png)

タイマーコントロールは非表示にしておきましょう。
![](https://i.imgur.com/BnZMX6t.png)

### 入力データ受信用にカスタムプロパティを設定する
数字を受けて表示を切り替えるので、本体アプリから数字を受信できるようにカスタムプロパティを設定します。

コンポーネント「7SegLED」をクリックすると
「新しいカスタムプロパティ」が表示されますのでそちらをクリックします。
![](https://i.imgur.com/iB7Jman.png)

今回は本体アプリから数字を受信するため
入力としてカスタムプロパティを以下のように設定します。
![](https://i.imgur.com/ZVARMAj.png)

設定したら作成をクリックします。
「numdata」が作成されていることを確認します。
![](https://i.imgur.com/qUxTei7.png)

プロパティにも作成されています。
![](https://i.imgur.com/mi7lhnS.png)
こちらは中のデータを空にしておきましょう。

これでカスタムプロパティの準備は完了です。

### 表示制御用のタイマーコントロールを変更する
前回ではスライダーの値を取得して切り替えていましたが
今回は本体アプリの「numdata」を受信して切り替える為
表示制御用のタイマーコントロール「OnTimerStart」を
以下のように変更します。

```php:OnTimerStart
Switch('7SegLED'.numdata, //←ここを変える
    0,Set(object1,true)&Set(object2,true)&Set(object3,true)&Set(object4,true)&Set(object5,true)&Set(object6,true)&Set(object7,false),
    1,Set(object1,false)&Set(object2,false)&Set(object3,false)&Set(object4,true)&Set(object5,false)&Set(object6,true)&Set(object7,false),
    2,Set(object1,true)&Set(object2,true)&Set(object3,false)&Set(object4,true)&Set(object5,true)&Set(object6,false)&Set(object7,true),
    3,Set(object1,true)&Set(object2,true)&Set(object3,false)&Set(object4,true)&Set(object5,false)&Set(object6,true)&Set(object7,true),
    4,Set(object1,false)&Set(object2,false)&Set(object3,true)&Set(object4,true)&Set(object5,false)&Set(object6,true)&Set(object7,true),
    5,Set(object1,true)&Set(object2,true)&Set(object3,true)&Set(object4,false)&Set(object5,false)&Set(object6,true)&Set(object7,true),
    6,Set(object1,true)&Set(object2,true)&Set(object3,true)&Set(object4,false)&Set(object5,true)&Set(object6,true)&Set(object7,true),
    7,Set(object1,true)&Set(object2,false)&Set(object3,true)&Set(object4,true)&Set(object5,false)&Set(object6,true)&Set(object7,false),
    8,Set(object1,true)&Set(object2,true)&Set(object3,true)&Set(object4,true)&Set(object5,true)&Set(object6,true)&Set(object7,true),
    9,Set(object1,true)&Set(object2,true)&Set(object3,true)&Set(object4,true)&Set(object5,false)&Set(object6,true)&Set(object7,true)
)
```

これでコンポーネント化は終了です。

# 本体アプリで使ってみる
## スクリーン1のオブジェクトを一旦すべて削除しましょう！
![](https://i.imgur.com/4cqQpER.png)

## コンポーネントを配置
挿入タブからコンポーネントをクリックすると
7SegLEDが表示されているので、そちらをクリックします。
![](https://i.imgur.com/ZTuJddD.png)

以下の通り、作ったコンポーネントがそのまま表示されています。
![](https://i.imgur.com/cZa5nZL.png)

同じように全部で6桁分追加して配置しましょう！
![](https://i.imgur.com/b8WAaeC.png)

## 数字増減確認用のスライダーを設定
例のごとくスライダーを作りましょう。
今回は、6桁なので以下の通りにします。

* Min 0
* Max 999999
* Default 0

## 各コンポーネントに入力データを送信
私のこちらの記事を参考に、各コンポーネントに
各桁の数字を送信するように設定します。
[PowerApps GameDev#1 スコア表示フォントをゲームっぽいものにしてみる](https://qiita.com/rnakamuramartiny/items/c95a46eec0d189471926)

```php:1桁目numdata
Value(Mid(Text(Slider1.Value),Len(Text(Slider1.Value)),1))
```

```php:2桁目numdata
Value(Mid(Text(Slider1.Value),Len(Text(Slider1.Value))-1,1))
```

## 背景を黒にする
背景が白だとちょっと見づらいので、黒にしてみましょう！
![](https://i.imgur.com/7H4eCjA.png)

# では実際に動かしてみましょう！
<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">実験的内容２<br>Components をつかったら複数桁表示も行けた！！<br>画像なしでもちゃんと表現できるね！<a href="https://twitter.com/hashtag/PowerApps?src=hash&amp;ref_src=twsrc%5Etfw">#PowerApps</a> <a href="https://t.co/QnItVrZot2">pic.twitter.com/QnItVrZot2</a></p>&mdash; りなたむ（RINATAMU） (@R_t_A_n_M) <a href="https://twitter.com/R_t_A_n_M/status/1100078621601886215?ref_src=twsrc%5Etfw">2019年2月25日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

こんな感じになれば成功です！

# まとめ
いかがでしたか？
2回にわたって試してみた
画像を使わずにして数字を表現する

コンポーネントという実験機能が追加されたことで
PowerAppsの表現の幅がさらに広がりました！

テスト的に作っていたパーツも
これを機にコンポーネント化して開発効率のさらなる向上を目指しましょう！