Macでシステムオブジェクトに「自動」の色を割り当てると,その塗りつぶしや線の色はいわゆる「まっ黒」つまり#000000
ではありません。
ライトモードの場合,OBJECT GET RGB COLORS
は「自動」に対して#000000
を返しますが,印刷やPDFで確認すると,実際には「まっ黒」ではないことに気づきます。
var $fg; $bg; $ag : Text
OBJECT GET RGB COLORS(*; $object; $fg; $bg; $ag)
以下の例では,上のページのオブジェクトは線の色が「自動」に設定されているため,若干,薄い黒が出力されています。
対照的に,下のページのオブジェクトは線の色が「black」に設定されているため,完全な黒が出力されています。
プレビューのカラーピッカーでPDFの色を確認すると,黒に見える色は#272727
,つまり「とても暗いグレー」です。
HTMLでは,メディアクエリを使用して,デバイスのメディアタイプに応じて異なるスタイルを適用するのが一般的です。
4DにもCSSメディアクエリが用意されていますが,唯一サポートされているメディアフィーチャーはprefers-color-scheme
だけです。
以下のCSSはエラーになるわけではありませんが,4Dでは効果がなく,画面と印刷でスタイルが切り替わることはありません。
@media print {
text.normal {
stroke: red;
}
input.normal {
stroke: red;
}
line.normal {
stroke: red;
}
}
代替策として,フォームをオブジェクトに読み込み,使用する直前にcss
プロパティを変更することで,スタイルシートを切り替えることができます。
/SOURCES/
フォルダーに以下のファイルが存在する場合:
@media (prefers-color-scheme: light){
text.normal {
stroke: automatic;
}
input.normal {
stroke: automatic;
}
line.normal {
stroke: automatic;
}
}
@media (prefers-color-scheme: dark){
text.normal {
stroke: automatic;
}
input.normal {
stroke: automatic;
}
line.normal {
stroke: automatic;
}
}
text.normal {
stroke: black;
}
input.normal {
stroke: black;
}
line.normal {
stroke: black;
}
{
"$4d": {
"version": "1",
"kind": "form"
},
"css": [
"/SOURCES/screen.css"
]
}
FORM LOAD("black")
とすれば,画面用のCSSが使用されます。一方,
$form:=JSON Parse(File("/SOURCES/Forms/black/form.4DForm").getText(); Is object)
$form.css:=["/SOURCES/print.css"]
FORM LOAD($form)
とすれば,印刷用のCSSが使用されます。
もちろん,印刷専用のフォームであれば,CSSを切り替えたりせず,はじめから自動の代わりに黒を全面的に使用したほうが合理的でしょう。
4D 20でストラクチャファイルをプロジェクトモードに変換した場合,Windows版の過去バージョンで作成したフォームの入力エリアに表示した文字の末端(特に数字など丸みのある文字の曲線部分)が欠けてしまうことがあります。
4Dは,19r4以降,高解像度ディスプレイに対応しています。これはGDIスケーリング(画像や文字サイズを引き伸ばすことで高解像度ディスプレイに対応する便宜的な仕組み)ではなく,テキストのレンダリングをGDIからDirectWriteに移行することによって実現した本格的な対応です。
GDIを使用していた過去バージョンで作成されたフォームを4D 20のDirectWriteモードで表示した場合,まったく同じようにテキストがレンダリングされることはありません。
バイナリモードには互換性オプションの「フォームでのテキストレンダリングではDirectWriteを使用する」が用意されていますが,プロジェクトモードではこのオプションが表示されません。過去バージョンで作成されたバイナリモードのフォームを4D 20に変換した場合,このオプションを有効化することは任意となっていますが,バイナリモードのフォームを4D 20でプロジェクトモードに変換した場合,このオプションは強制的に有効化されます。アップグレードの原則は「互換性を重視」ですが,プロジェクトモード変換の原則は「最新の仕様に移行」だからです。
もし,どうしても過去バージョンと同じようなテキストのレンダリングを希望し,高解像度ディスプレイ対応を諦めても良いのであれば,直接,settings.4DSettings ファイルを編集することができます。
<?xml version="1.0" encoding="UTF-8"?>
<preferences stamp="…">
<com.4d>
<database>
<misc win_form_text_directwrite="false"/>
</database>
</com.4d>
</preferences>
ただし,4D 19 R4以降は全体として「高解像度ディスプレイ対応アプリケーション」なので,高解像度ディスプレイではフォームの表示が不自然になるかもしれません。その場合,4D.exeと同階層のResources フォルダーにあるinfo.plist ファイルを編集し,高解像度ディスプレイ未対応当時の動作に戻すことができます。
<key>WinDPIAwareness</key>
<string>0</string>
いずれも暫定的な措置であり,GDIモードが将来的にサポートされるわけではありません。過去バージョンで作成したフォームの入力エリアに表示した文字の末端(特に数字など丸みのある文字の曲線部分)が欠けてしまう場合,そのような入力エリアのフォントやサイズを見直すことが勧められています。
それぞれのモードでテキスト入力に数字を表示しています。プロパティは下記のとおりです。
MS Pゴシック
13
6
および9
の左側が欠けていることに気づきます。
スタイルシートのフォントサイズを変更します。オブジェクトの高さは自動的に調整されます。
16
20
スタイルシートのフォント名をMS Pゴシック
ではなく,よりモダンなものに変更します。
游ゴシック
macOS 15 Sequoia以降,「プライバシーとセキュリティ」設定でローカルネットワークへのアクセスを許可するアプリを指定できるようになりました。そのため,4Dまたは4D Serverを起動した後,「ローカルネットワーク上 のデバイスを見つけることを許可しますか?」というアラート画面が表示されることがあります。
ローカルネットワーク操作とは,ブロードキャスト機能を有するネットワークインタフェースに関連づけられたインターネットプロトコルネットワークと定義されています。Wi-FiおよびEthernetが含まれ,携帯電話の回線を利用してインターネットに接続するワイヤレス通信網(無線広域通信網)およびVPNは含まれません。マルチキャストアドレス(224.0.0.0/4, ff00::/8)およびIPv4のブロードキャストアドレス(255.255.255.255)もローカルネットワークアドレスです。ローカルネットワーク上のDNSサーバーやプロキシに対するアクセスは除外されます。「ローカルネットワーク上 のデバイスを見つけること」が目的とは限りません。
4Dの場合,Webサーバー(TCP待ち受け)はローカルネットワーク操作に該当しないので,許可は必要ありません。4D Serverの公開と発見(いずれもUDP)は許可が必要です。ローカルネットワーク上の4D Serverに対するアクセス(ServerNet=TCPまたはQUIC=UDP)も許可が必要です。Webエリアの表示に許可は必要ありません。
アプリケーションビルド画面の「コード署名」は,少しトリッキーなユーザーインタフェースかもしれません。「ライセンス&証明書」のページで「OS X署名に使用する証明書」の下にある「アプリケーションに署名」チェックボックスを選択し,「認証名」を空にしておいた場合(いずれもデフォルト値),自分の証明書で署名する,という意味になります。使用する証明書は,Apple Developer ID Applicationまたは自己署名証明書です。「アプリケーションに署名」チェックボックスを選択しなかった場合,証明書の代わりにハイフン(-
)が渡され,AdHoc署名が実施されます。いずれにしても,何らかの署名が実施される点に留意してください。
ビルドしたアプリケーションやコンポーネントをコード署名したくないのであれば,ビルドXMLファイルのAdHocSign
をFalse
にする必要があります。