コルネの進捗や備忘録が記されたなにか

進捗や成果物や備忘録てきななにかを雑に更新していきます。

【Power Apps】超簡単!Power Apps でクリック/選択された座標を取得する


スポンサードリンク

今回やること

今回は下記のようにクリック/選択された座標をPower Apps で取得する方法を紹介したいと思います。

方針

今回は以下の方針でクリックされた座標を取得できるようにしたいと思います。

  • 複雑なロジックは極力しようしない
  • 動作が重くなるような実装は避ける

Power Apps はローコードを売りにしていますので、上記方針で作成しています。

クリック/選択された座標をPower Apps で取得する

まずは「縦方向(空)」のギャラリーを配置して以下のように設定してください。

Gallery1.X & Gallery1.Y

0

Gallery1.Width

Parent.Width

Gallery1.Height

Parent.Height

Gallery1.TemplatePadding

0

f:id:koruneko:20201025221938p:plain

ギャラリーの配下に「評価」を追加して以下のように設定します。

Rating1.X & Rating1.Y

0

Rating1.Width

Parent.Width

Rating1.Default

0

Rating1.ShowValue

false

f:id:koruneko:20201025224404p:plain

X座標の選択された座標を取得する仕組みを作成する

X座標の選択された座標を取得する仕組みには先ほど作成した「評価」を用います。
以下のように設定を変更してください。

Rating1.Max

100

ここでMaxに設定した値が大きければ大きいほど選択したX座標の精度が高くなります。
ここの値を大きくしてもそれほど性能に影響しないので、今回は100に設定しています。
なおここに設定できる値は最大でも100までなので注意しましょう。

f:id:koruneko:20201025224625p:plain

上記のようにどこを選択しているのか判定できますね。
あとはこの値をもとに座標を算出してあげればよいというわけです。

Y座標の選択された座標を取得する仕組みを作成する

Y座標の選択された座標を取得する仕組みにはギャラリーを用います。
今回は以下のように設定することとします。

Gallery1.TemplateSize

40

Gallery1.Items

Sequence(Self.Height / Self.TemplateHeight)

f:id:koruneko:20201025225723p:plain

上記の設定により、TemplateSize に設定した値によって表示されるカラムの数が変化します。
具体的にいうと、TemplateSize の値が小さいほど、カラムの数は増えますし、値が大きいほどカラムの数は減ります。

当然カラムの数が多いほうが、Y座標の判定の精度は高くなりますが、その分アプリが重くなってしまいます。
ここはY座標の精度をとるか、アプリの重さをとるかのトレードオフとなりますね。

取得した値を実際の座標に変換する

選択した座標がきちんと取得/計算できている判断するために、適当なアイコンでも設定しましょう。
このときギャラリーが最前面にくるように設定しなければならないことに注意してください。

取得した値を計算するには以下のように設定します。

Icon1.X

Gallery1.Selected.Rating1.Value * Gallery1.Width / Rating1.Max - Self.Width / 2

Icon1.Y

Gallery1.Selected.Value * Gallery1.TemplateHeight - Self.Height / 2

- Self.Width / 2- Self.Height / 2 は選択された座標の中心にアイコンをもってくるための式です。

まずはX座標の計算についての解説です。
Gallery1.Selected.Rating1.Value では選択された評価の値を取得しています。
このままの値では座標の値ではないので座標に変換を行います。
評価の数値1あたりの座標の数値を算出するには、ギャラリーの幅 / 評価の最大値で算出できますね。 これを式にすると Gallery1.Width / Rating1.Max となるわけです。

続いてY座標の計算についての解説です。
Gallery1.Selected.Value では選択されたカラムの数を取得しています。
X座標のときと同様この数値を座標に変換します。
同様の理論でカラム1つあたりの座標を算出するための式を作成します。
それが Gallery1.TemplateHeight にあたるというわけですね。

おわり

以上でPower Apps でなるべく簡単なロジックでクリック/選択された座標を取得するための仕組みを作成することができました!
願わくばこの機能がいつか標準で取得できるようになるといいですね...

また、今回「評価」を用いましたが、「スライダー」でも同様に実現可能です。


スポンサードリンク