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/
フォルダーに以下のファイルが存在する場合:
- screen.css
@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;
}
}
- print.css
text.normal {
stroke: black;
}
input.normal {
stroke: black;
}
line.normal {
stroke: black;
}
- form.4DForm(抜粋)
{
"$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を切り替えたりせず,はじめから自動の代わりに黒を全面的に使用したほうが合理的でしょう。