ブログで解説されているように,19r3のWindows版では,テキストレンダリングのAPIがGDIからDirectWriteに切り替わりました。よりなめらかな描画システムのおかげで,高解像度ディスプレイにおけるテキストの可読性が向上しています。
リストボックスは,v15以前に作成されたものはGDI,v16以降で作成されたものはDirectWriteを使用しています。作成された時期により,リストボックスの外観がいくらか違うことがあるのはそのためです。移行期のバージョンでは,データベースパラメーターの107
番を変更することにより,リストボックスの描画APIを切り替えることができました。
0
: デフォルト1
: DirectWrite2
: GDI19r3では,これがフォームのスタティックテキストとテキスト入力オブジェクトにも拡大されました。レンダリングの違いによって発生する「ずれ」の度合いは,使用するフォントによって異なりますが,ほとんどの場合,それは1ピクセル程度の違いです。しかし,GDIだけでサポートされているフォントの場合,DirectWriteでは代替フォントが使用されるため,大幅に外観が変わってしまうことがあります。また,1ピクセル程度の違いであっても,わかち書きする言語では折り返し位置がおおきく変動するかもしれません。
過去のバージョンで作成されたプロジェクトの場合,新しいテキストレンダリングは無効にされており,データベース設定の「互換性」で有効にすることができます。設定はコンポーネント単位に適用されます。
19r4では,高解像度ディスプレイにおけるテキストの可読性を考慮し,ALERT
やCONFIRM
などで表示されるフォームを収録したランタイムコンポーネントのDirectWriteが有効にされています。前述した違いに加え,DirectWriteではテキストの折り返し(ラインブレーク)のルールも違っています。たとえば,GDIではアンダースコア記号(_
)でブレークできるのに対し,DirectWriteではどうしても幅に収まらない場合を除き,アンダースコア記号ではブレークできません。
SET PRINT OPTION
のドキュメントで説明されているように,Windows 64-bit版の印刷はDirect2Dベースの新しいプリントレイヤーが採用されていますが,セレクターのLegacy printing layer optionを指定することにより,GDIベースの旧式プリントレイヤーを選択することもできます。
新しいプリントレイヤーは総合的な表現力が優れていますが,あえてシンプルな旧式プリントレイヤーのほうが望ましいように思えることがあります。下記の例では,文字数に応じてテキストの配置が微妙に調整されるため,新しいプリントレイヤーでは数字の桁区切り位置が微妙にずれています。縦方向に位置を揃えたいのであれば,文字ごとにオブジェクトを配置するなど,フォームのデザインを見直す必要がありますが,それまでの間,旧式プリントレイヤーのシンプルなレンダリングに切り替えることができるかもしれません。
プロジェクトモードでは,テキスト入力に設定された選択リストの「更新」ボタンがクリックできません。これは仕様です。バイナリモードの選択リストはストラクチャファイルに書き込まれていますが,バイナリモードではProjectフォルダーまたは.4DZ
ファイル内のlist.jsonファイルで管理されており,ランタイムモードではリードオンリーのデータとして扱われるためです。
参考: .4DZ
形式ではなく,PackProjectモードでアプリケーションをビルドすれば,SAVE LISTコマンドでリストを更新することができます。
v17以降,リストフォームの垂直スクロールバーをクリックした場合,WindowsではOn HeaderおよびOn Display Detailイベントが1
回ずつ発生しますが,macOSではそれぞれ2
回ずつ発生します。v16ではプラットフォームによる違いはありませんでした。
スクロールバーを操作したときに発生するフォームイベントの種類や回数は,プラットフォームAPIのリドローに左右される部分があり,4Dの仕様としては明記されていません。Mac版のリストフォームは,v17以降,Quartz Compositorのサポートが強化されており,macOS特有のオーバーレイシステムが働くようになったため,再描画で発生するフォームイベントの回数がWindows版よりも多いことがあります。
v19はUniversal Binaryアプリです。つまり,IntelとApple Silicon,両方のアーキテクチャに対応しています。M1搭載Macでv19を起動した場合,Apple Siliconアーキテクチャの実行ファイルが優先的にロードされます。アプリは,ストラクチャファイルを選択する前に起動するため,バイナリモードの.4DBファイルを開いたとしても,デザインモードはApple Siliconアーキテクチャで動作することになります。
デザインモードがApple Siliconで動作している場合,バイナリモードのストラクチャをコンパイルしようとすると,エラーが返されます。
デザインモードをIntelアーキテクチャで起動するためには,アプリを右クリックし,Finderの「情報を見る」メニューを選択して「Rosettaを使用して開く」チェックボックスを有効にする必要があります。