前回からの続き
前回はOS種別によって判定を行いました。これは一見便利ですが、面倒な点があります。
デバッグが面倒という点です。最終的な動作確認はiPhoneなどの実機で行いますが、実装中の確認を、毎回データベースプロパティをいじって、スマホ用のフレームセットを変更するは面倒です。
そこで今回はV12から追加された@ResolutionWidthと@ResolutionHeightを使って、ウィンドウ幅とウィンドウの高さを判定基準に開く画面を決定してみたいと思います。
@ResolutionWidthと@ResolutionHeightの使い方
@ResolutionWidthと@ResolutionHeightは、ウィンドウ幅とウィンドウの高さを取得する新しい関数です。関数の動作については2022年に中野さんやHCL公式が下記のような記事を上げています。
HCL Nomad Mobile のご紹介 (2022年2月) | PPT (slideshare.net)
画面の幅と高さを知るには | ノーツってヤッぁ..二児の父の苦悩つ (harunakano.blogspot.com)
表示用の計算結果フィールドなどでもウィンドウサイズが取得できそうです。手元にあった端末で、関数から取得できる値と液晶の解像度を調査すると下記のようになりました。@ResolutionWidthを基準に複数端末に対応するには、まずは関数で取得できる値を調査して、レイアウトの切替ポイントとなる幅を決める必要がありそうです。
端末 | @ResolutionWidth : @ResolutionHeight | 液晶解像度 |
---|---|---|
WindowsPC - 全画面 | 1877 × 908 | 1920 × 1080 |
Xperia10 V | 710 × 240 | 2520 × 1080 |
iPad mini 6 | 1133 × 650 | 2266 × 1488 |
iPhone8 | 667 × 284 | 1920 × 1080 |
アイリスオーヤマAndroid13タブレット | 1666 × 908 | 1920 × 1200 |
今回は動作確認ですので、横画面(@ResolutionWidth>@ResolutionHeight)ならPC用フレームセット、縦画面(@ResolutionWidth<=@ResolutionHeight)ならスマホ用フレームセットを開く実装にしてみたいと思います。
PostOpenで@ResolutionWidthと@ResolutionHeightの実行確認
表示用の計算結果フィールド、計算結果フィールドではウィンドウサイズが取得できることがわかったので、今度はフォームのPostOpenイベントに@式を記述し、動作するか?を確認します。
【@式-PostOpenイベント】
@Prompt([Ok]; "画面サイズ 横:縦" ; @Text(@ResolutionWidth) + ":" + @Text(@ResolutionHeight))
【実行結果-PC】
実行結果を見ると、フィールド内で取得できる値と、PostOpenで取得している値には違いがあるようです。ウィンドウサイズを変えてもPostOpenで取得できる値は常に同じ値だったので、PostOpenで取得できるのはウィンドウサイズではないのかもしれません。ウィンドウを最大化した場合のサイズとも違うようです。ちなみにNomad(Android、iOS)ではフィールドで取得できる値とほぼ同じ値が返ってきます。
PostOpenに記述した@式では想定したウィンドウサイズは取得できなかったので、「表示用の計算結果フィールド」を作成し、PostOpenイベントで取得する形で実装したいと思います。
【フィールドイメージ】
スマホ用フォームのPostOpenイベントでウィンドウサイズを判定し、開くフレームセットを切り替える
前回は、OS判定用のページを作って、スマホ用フレームセット、PC用フレームセットを開いていましたが、今回はデフォルトでスマホ用フレームセットを開き、ウィンドウサイズによってPC用フレームセットを開くか?判定します。
※判定用ページ方式が良いか?今回のような方式が良いか?は利用端末の割合(スマホ優先、PC優先)などにも変わりますので、自社にあった方法を使用して下さい。
【実行イメージ】
【LotusScript】
Sub Postopen(Source As Notesuidocument)
'ウィンドウサイズを取得し、横幅>高さの場合は、PC用フレームセットを開く
'変数、クラス宣言
Dim ws As New NotesUIWorkspace
Dim iResolutionWidth As Integer
Dim iResolutionHeight As Integer
'クラス、変数セット
iResolutionWidth = Cint(Source.FieldGetText("ResolutionWidth"))
iResolutionHeight = Cint(Source.FieldGetText("ResolutionHeight"))
'ウィンドウサイズを判定して、フレームセットを開く
If iResolutionWidth > iResolutionHeight Then
Call ws.OpenFrameSet("fsMain")
Call Source.Close
End If
End Sub
【実行結果-PC】
【実行結果-Nomad(Android)】
@ResolutionWidthと@ResolutionHeightを使うことで、PCでも縦長画面はスマホ用フレーム、横長画面はPC用フレームを開くことができるようになりました。
次回予告
今回は@ResolutionWidthと@ResolutionHeightを使ってウィンドウサイズを判定し、表示するフレームセットを切り替えるという動作を実装しました。次回は同じタイミングで実装されたonSizeイベントを使ってさらに高度な画面切替を実装できるかを確認します。