4D-jp 4D Japan Technical Support Team

新しいテキストレンダリング


ブログで解説されているように,19r3のWindows版では,テキストレンダリングのAPIがGDIからDirectWriteに切り替わりました。よりなめらかな描画システムのおかげで,高解像度ディスプレイにおけるテキストの可読性が向上しています。

リストボックスは,v15以前に作成されたものはGDI,v16以降で作成されたものはDirectWriteを使用しています。作成された時期により,リストボックスの外観がいくらか違うことがあるのはそのためです。移行期のバージョンでは,データベースパラメーターの107番を変更することにより,リストボックスの描画APIを切り替えることができました。

  • 0: デフォルト
  • 1: DirectWrite
  • 2: GDI

19r3では,これがフォームのスタティックテキストテキスト入力オブジェクトにも拡大されました。レンダリングの違いによって発生する「ずれ」の度合いは,使用するフォントによって異なりますが,ほとんどの場合,それは1ピクセル程度の違いです。しかし,GDIだけでサポートされているフォントの場合,DirectWriteでは代替フォントが使用されるため,大幅に外観が変わってしまうことがあります。また,1ピクセル程度の違いであっても,わかち書きする言語では折り返し位置がおおきく変動するかもしれません。

過去のバージョンで作成されたプロジェクトの場合,新しいテキストレンダリングは無効にされており,データベース設定の「互換性」で有効にすることができます。設定はコンポーネント単位に適用されます。

19r4では,高解像度ディスプレイにおけるテキストの可読性を考慮し,ALERTCONFIRMなどで表示されるフォームを収録したランタイムコンポーネントのDirectWriteが有効にされています。前述した違いに加え,DirectWriteではテキストの折り返し(ラインブレーク)のルールも違っています。たとえば,GDIではアンダースコア記号(_)でブレークできるのに対し,DirectWriteではどうしても幅に収まらない場合を除き,アンダースコア記号ではブレークできません。


リンク