ブログで解説されているように,19r3のWindows版では,テキストレンダリングのAPIがGDIからDirectWriteに切り替わりました。よりなめらかな描画システムのおかげで,高解像度ディスプレイにおけるテキストの可読性が向上しています。
リストボックスは,v15以前に作成されたものはGDI,v16以降で作成されたものはDirectWriteを使用しています。作成された時期により,リストボックスの外観がいくらか違うことがあるのはそのためです。移行期のバージョンでは,データベースパラメーターの107
番を変更することにより,リストボックスの描画APIを切り替えることができました。
0
: デフォルト1
: DirectWrite2
: GDI
19r3では,これがフォームのスタティックテキストとテキスト入力オブジェクトにも拡大されました。レンダリングの違いによって発生する「ずれ」の度合いは,使用するフォントによって異なりますが,ほとんどの場合,それは1ピクセル程度の違いです。しかし,GDIだけでサポートされているフォントの場合,DirectWriteでは代替フォントが使用されるため,大幅に外観が変わってしまうことがあります。また,1ピクセル程度の違いであっても,わかち書きする言語では折り返し位置がおおきく変動するかもしれません。
過去のバージョンで作成されたプロジェクトの場合,新しいテキストレンダリングは無効にされており,データベース設定の「互換性」で有効にすることができます。設定はコンポーネント単位に適用されます。
19r4では,高解像度ディスプレイにおけるテキストの可読性を考慮し,ALERT
やCONFIRM
などで表示されるフォームを収録したランタイムコンポーネントのDirectWriteが有効にされています。前述した違いに加え,DirectWriteではテキストの折り返し(ラインブレーク)のルールも違っています。たとえば,GDIではアンダースコア記号(_
)でブレークできるのに対し,DirectWriteではどうしても幅に収まらない場合を除き,アンダースコア記号ではブレークできません。