Formクラスに追加されたプロパティHorizontalScale、VerticalScale、FontScaleを利用して擬似的な拡大縮小(スケーリング)、縦横比の変更を行うことが可能になりました。
この章ではスケーリング動作における注意点を記載します。
従来のBiz/Browserにおいても参照式を利用することにより擬似的に上位フォームの位置・サイズにおいてフォーム配下のオブジェクトのサイズを自動調整することは可能でした。
Form frmMain { X = 0; Y = 0; Width = 600; Height = 400; Button btnExit { X &= 50 * (^.Width / 600); Y &= 50 * (^.Height / 400); Width &= 100 * (^.Width / 600); Height &= 60 * (^.Height / 400); } TextBox txtInput { X &= 200 * (^.Width / 600); Y &= 50 * (^.Height / 400); Width &= 200 * (^.Width / 600); Height &= 50 * (^.Height / 400); } }
しかしながら、実行スピード、開発生産性において決して優れている手法ではありませんでした。
またフォントは作成時以外指定できないため、フォントサイズを動的に変更させることはできませんでした。
新規に追加されたプロパティを利用すると、すっきりとしたコーディングで同様の効果を高速に行うことが可能です。
指定したForm配下に存在するオブジェクトに関して、自動的に座標計算を行い画面上へ再配置を行います。
上記と同じ効果を持つCRSコードは以下のようになります。
Form frmMain { X = 0; Y = 0; Width = 600; Height = 400; HorizontalScale &= Width / 600; VerticalScale &= Height / 400; FontScale &= Width / 600; Button btnExit { X = 50; Y = 50; Width = 100; Height = 60; } TextBox txtInput { X = 200; Y = 50; Width = 200; Height = 50; } }
配下のオブジェクトのプロパティは変化しないため、論理値により画面設計を行い、適宜ディスプレイサイズにマッチングさせるような実装が可能になりました。
またフォントサイズも動的にスケーリングさせることが可能になり、あたかも拡大縮小するように振る舞わせることが可能です。
フォントサイズはオブジェクトのサイズと独立して拡大縮小率を設定できるため、画面の拡大比率よりやや小さめ・・・など細かな調整が可能です。
スケーリング動作はオブジェクトのサイズを動的に変更する機構であり、画像を拡大縮小する訳ではありません。
よってOSの指定値で表示される、ボーダー(枠線)やスクロールバーの幅に関しては拡大縮小に影響されません。
そのため、オブジェクト内の有効な領域は拡大時は広く、縮小時は狭くなります。
有効領域のスケーリングの正確さを優先しオブジェクトのサイズを実際の倍率とは異なる値に自動的に補正するクラスもあります。
詳しくは各クラスの説明をご参照ください。
また座標系は整数値のため、小数を含んだ倍率を指定した場合、1ピクセル単位で切り捨て(切り上げ)誤差が発生することがあります。
FontScaleに関しては倍率をポイント単位で丸めます。よって座標のスケーリングよりも変化量は大きくなります。
スケーリング動作を用いて画面設計を行う場合、表示エリアに余裕を持った設計を行うようにしてください。