「開発室:備忘録」の版間の差分

編集の要約なし
73行目: 73行目:


Windows 10、ディスプレイ 1 (メイン: 125%)、ディスプレイ 2 (サブ: 100%) の Per-Monitor DPI で確認
Windows 10、ディスプレイ 1 (メイン: 125%)、ディスプレイ 2 (サブ: 100%) の Per-Monitor DPI で確認


===Per-Monitor DPI にてフォーム表示直後にスケーリングされない===
===Per-Monitor DPI にてフォーム表示直後にスケーリングされない===
84行目: 83行目:


*<span style="color:crimson;">なお、Delphi 10 Seattle Update 1 ではもっと派手にぶっ壊れている模様</span>
*<span style="color:crimson;">なお、Delphi 10 Seattle Update 1 ではもっと派手にぶっ壊れている模様</span>


===Per-Monitor DPI にて Constraints を指定していると正常に動作しない===
===Per-Monitor DPI にて Constraints を指定していると正常に動作しない===
122行目: 120行目:
end;
end;
</source>
</source>


===Constraints を指定しているとスケーリング後のフォームサイズがおかしい===
===Constraints を指定しているとスケーリング後のフォームサイズがおかしい===
130行目: 127行目:


この問題は ChangeScale の後でタイトルバーの高さをスケーリングした場合の差分を足してやることで回避は可能だが結果的に高さが WM_DPICHANGED で送られてくる LPARAM の中の高さと異なってしまうため、ディスプレイをまたぐ位置によってはサイズが変更されなかったり無限ループが発生する恐れがあると思われる。
この問題は ChangeScale の後でタイトルバーの高さをスケーリングした場合の差分を足してやることで回避は可能だが結果的に高さが WM_DPICHANGED で送られてくる LPARAM の中の高さと異なってしまうため、ディスプレイをまたぐ位置によってはサイズが変更されなかったり無限ループが発生する恐れがあると思われる。


===FormCreate 時のフォームの PixelsPerInch がおかしい===
===FormCreate 時のフォームの PixelsPerInch がおかしい===
143行目: 139行目:


*いずれの場合も FormShow 以降に処理を書けば正しい PixelsPerInch を取得できる
*いずれの場合も FormShow 以降に処理を書けば正しい PixelsPerInch を取得できる


===WM_DPICHANGED の実装における問題===
===WM_DPICHANGED の実装における問題===
207行目: 202行目:
function EnableNonClientDpiScaling; external user32 name 'EnableNonClientDpiScaling' delayed;
function EnableNonClientDpiScaling; external user32 name 'EnableNonClientDpiScaling' delayed;
</source>
</source>


===FormCreate でフォームのフォントを変更してもスケーリングされない===
===FormCreate でフォームのフォントを変更してもスケーリングされない===
スポンサーリンク