皆様
久世です。
最近は、高DPI環境が増えてきておりアプリ側への対応が必要と思うのですが
具体的な対応方法について相談させてください。
OSは、主にWin10を考えております。
高DPI環境では、従来のソフトのフォントがボケて表示されるという理解です。
ボケ対応としてDelphiXE4での具体的な方法にいて悩んでいます。
対応は、下記という理解です。
Not DPI Aware : 高DPIに対応していないアプリケーション
System DPI Aware : 高DPIに対応しているアプリケーション。
ただし、モニターごとのDPIには対応していません。
Per monitor DPI Aware : Windows 8.1でサポートされたモニターごとの
DPIの設定にも対応しています。
通常はNot DPI Awareになっているため、System DPI Aware以上に変更が必要
手順としては下記と考えています。
1.カスタムのマニフェストに変更
2.TForm.Scaled = True → Falseに変更
3.PixelsPerInchに応じて、フォントやVCLのパーツのサイズを調整
ここで、まず1についての質問です。
Delphi 10であれば、Per-Monitor V2 の設定ができるようなのですが、
Delphi XE4にはそのような設定はありません。
そこでカスタムマニフェストを使用するしかないと考えています。
具体的には、
1-1. C:\Program Files\Embarcadero\RAD Studio\11.0\bin
\default_app.manifest
を、対象のアプリのソースのフォルダーにコピー
1-2. 「プロジェクト」→「オプション」→「アプリケーション」の
「ランタイムテーマ」の項目で 「カスタム マニフェストを使用する」
を選択し、カスタムマニフェストに先のコピーした
default_app.manifestを指定する
1-3. マニフェストに、<dpiAware>true</dpiAware>を追記する
ここまですると、OS側からの認識はSystem DPI Aware以上に
変更できると思っています。
マニフェストをあまり変更したことがないため、カスタムマニフェストを
使用した場合、各OSのテーマが正しく適用されるのかがよくわかっていません。
1-1のファイルをベースにしているので問題ないと考えてよいのでしょうか?
教えて下さい。
ちなみに、3のサイズ調整については
3-1. Screen.PixelsPerInchと、Form.PixelsPerInchを比較して
設計時との現在の比率を計算。
K = Screen.PixelsPerInch / Form.PixelsPerInch
3-2. Windowsの標準解像度は96DPIで、1Pointは1/72インチであるため
1ポイントのドット数を計算するときは
標準 :フォントサイズ/72*96
高DPI:フォントサイズ/72*Screen.PixelsPerInch
3-3. ボタンなどのサイズは、上記フォントサイズを考慮して変更
3-4. WM_DPICHANGED のメッセージに応じてサイズは、再計算必要
と考えています。
MLホームページ:
https://www.freeml.com/delphi-users
----------------------------------------------------------------------
スマホアプリ版で100万ダウンロード突破の
「キャプテン翼ZERO~決めろ!ミラクルシュート~」
HTML5ゲームプラットフォーム「ゲソてん byGMO」にて、
PCブラウザ版を好評配信中!
https://gesoten.com/games/genre/sports/tsubasa-zero
------------------------------------------------------[freeml byGMO]--
あなたの街のチラシがいつでも無料で見放題!
チラシをクリックしてチラシが拡大されたらポイントゲット♪
まずはかんたん登録♪ -ポイントタウン-
https://www.pointtown.com/ptu/rd.cgi?cid=8912
----------------------------------------------------------------------