【注意】本記事は画像サイズの関係でPCで見ることを前提としています。

最近のノートパソコンは高解像度化が進み、ハイビジョン(1920x1080)を超えるものが一般的になりつつあります。高解像度のノートパソコンとWindows 10の組み合わせでは表示スケールが100%より大きく設定されていることがありますが、この設定で古いアプリケーションを実行すると文字のレンダリングやイメージの表示が正しく行われない場合があります。

Delphi / C++Buidler / RAD Studio 10.3 Rio ではVCLの高DPI対応に関する強化が行わており、100%を超える表示スケールでも文字のレンダリングやイメージの表示が適切に行われます。この記事ではVCLの高DPI対応の2つのポイント、Per-Monitor V2 と新しいイメージリストコンポーネントについて解説します。

Per-Monitor V2のサポートによる最適な文字スケーリング

Per-Monitor V2とは、Windows側で自動的に表示文字列のスケーリングをサポートする機能で、Windows 10 Creators Update(1703)より導入されました。この機能によりアプリケーションは解像度によらず、適切にスケーリングされた文字列が表示されます。
https://docs.microsoft.com/en-us/windows/desktop/hidpi/high-dpi-desktop-application-development-on-windows

たとえばDelphi / C++Builder 2007でビルドしたアプリケーションをWindows 10 (1809)でモニタのスケールを150%で表示すると次のように文字が全体的にぼやけて表示されてしまいます。

同じアプリケーションをDelphi / C++Builder 10.3 Rioでビルドして実行すると、次のように文字列が適切にスケーリングされ、綺麗に表示されます。

Per-Monitor V2の設定はIDEのメニューからプロジェクトオプションを表示し、オプション内の「マニフェスト」で設定できます。DPIの認識を「ディスプレイごとの DPIに対応 V2」に設定することで有効になります

新しいイメージリストコンポーネントで最適なイメージを表示

高DPI対応は文字列だけではなくイメージについても適用できます。例として、TImageListにビットマップを設定して、TListViewで表示するDelphi / C++Builder 2007 で作成したアプリケーションを用意しました。このアプリケーションをWindows 10 (1809)でモニタのスケールを150%にして実行すると、次の画面のようにイメージがぼやけて表示されます

100%スケールの状態と比較するために、それぞれキャプチャして拡大してみました。左は表示スケール150%、右は100%です

イメージをぼやけずに表示するには、解像度にあわせたイメージを適切に切り替えて使う必要があります。これを実現するのがTImageCollectionTVirtualImageListです。

TImageCollectionとTVirtualImageListはペアで利用します。TImageCollectionは1つの「論理」イメージに対して、複数の解像度を登録・管理するコンポーネントです。TImageCollectionに登録された画像コレクション内より画面の解像度に応じたイメージがTVirtualImageListによって選択されます

次の画面は、今までのTImageListをTImageCollectionとTVirtualImageListに変更した例です。解像度に応じたイメージが選択されているので、高DPI環境でもイメージがぼやけずに表示されます

TImageCollectionとTVirtualImageListの詳細については、下記のDocwikiのページをご参照ください

http://docwiki.embarcadero.com/RADStudio/Rio/ja/イメージ_コレクションおよび仮想イメージリスト_コンポーネントを持つ高_DPI_イメージのサポート

その他の新機能が気になる方は…

第36回デベロッパーキャンプでは、Delphi / C++Builder / RAD Studio 10.3 Rioの新機能をご紹介いたしました。新機能にご興味がある方は、ぜひ資料のダウンロードやビデオをご活用ください。

23%offキャンペーンは本日12月25日までです

様々な機能強化が施された10.3 Rio。発売を記念した最大23%offキャンペーンは本日12月25日まで!

Anonymous