ピクチャライブラリに登録された画像は,ドラッグ&ドロップあるいはコピー&ペースト操作でフォームに挿入し,スタティックピクチャ(ライブラリ画像)にすることができますが,ピクチャの番号(ID)が32767よりも上だった場合,画像はエディターでもランタイムでも表示されません。これは仕様です。ピクチャライブラリのIDは,符号付き16ビットなので,32767が最大値となります。
v11以降,Resourcesフォルダーが画像をライブラリ管理するための標準的な手段であり,ピクチャライブラリは,役目を終えています。廃止される予定はありませんが,今後,サポートが拡張されることもありません。そのことを踏まえ,新規の開発では,フォーム画像の管理にリソースピクチャを使用することが推奨されています。
v17r5では,4D View Proのエクスポート(VP EXPORT DOCUMENT)が拡張され,PDF形式が指定できるようになりました。
v18では,より正確なPDFドキュメントが出力できるよう,フォントの埋め込みがサポートされるようになりました。
Manage Printing and PDF export
埋め込みに対応しているのは,OpenType(.otf .ttf)フォントです。SpreadJSが内部的に使用しているpdfkitの制限により,Unicodeマップを有するフォントだけが使用できます。システムにプリインストールされているフォントには,Unicodeマップを有さないものもあるため,エクスポートの前にフォントファイルがスキャンされ,埋め込みができるかどうか,判断されるようになっています(SpreadJSがデフォルトでサポートしているフォントはスキップします)。フォントファイルのスキャンは,下記の仕様に基づいて実行されます。
Font fileは,VP EXPORT DOCUMENTが埋め込みフォントファイルを特定するため,VP EXPORT DOCUMENTが内部的に使用するコマンドとして追加されました。4D View Proドキュメント内で使用されているフォントに対応するフォントファイルがみつからない場合,SpreadJSのデフォルトフォントが使用されます。
前述したように,PDFに埋め込むことができるのは.otf .ttfファイルだけであり,フォントコレクション(.ttc)はサポートされていないことに留意してください。たとえば「Gill Sans」フォントは,フォントコレクションなので,印刷はできますが,PDFに埋め込むことはできません。これは(SpreadJSおよびpdfKitの)仕様です。
回避策として,フォントコレクションを個別のフォントファイルに分割するオンラインサービスが使用できるかもしれません。
4Dのキーボードショートカットは,モディファイアキーとAからZ(文字)の単純な組み合わせで設定されています。ロシア語キーボードのレイアウトは,西欧レイアウトとは入力できる文字が違うため,ショートカットの設定ダイアログを表示している間,無効にされるべきですが,Macの場合,そのままキリル文字が入力できてしまいます。しかし,そのように設定したショートカットは無効です。ショートカットは,西欧レイアウトで設定するようにしてください。
整数の11に実数の1.5を加算した値は,何でしょうか。
$Int:=11
$Real:=1.5
$Int:=$Int+$Real
上記の演算は,32ビット版では13(12.5を切り上げた値),64ビット版では12(12.5を切り下げた値)となります。これは仕様です。
64ビット版の4Dでは,インタープリターモードとコンパイルモードの動きを揃えるため,インタープリターモードであっても,Intel CPUの「丸め」処理(最近接偶数丸め)で「丸め」処理が実行されるようになっています。一方,32ビット版は,従来どおり,「四捨五入」処理が実行されるため,演算結果に違いがあります。
Windows版でフォームオブジェクトを同一メソッド内で非表示に設定し,移動してから非表示を解除した場合,画面上ではオブジェクトが以前の位置と新しい位置の両方に表示されます。これはAPIの特性に由来する振る舞いであり,現状では仕様です。オブジェクトの「増殖」を防止するためには,下記のようなコードを避けてくだだい。
OBJECT SET VISIBLE (*;"object";False)
OBJECT SET COORDINATES*;"object";$left;$top;$right;$bottom)
OBJECT SET VISIBLE (*;"object";True)
4D Write ProのHTMLパーサーは,XHTML(XML形式のHTML)をインポートするように設計されています。正しくないXMLのインポートは失敗するかもしれません。たとえば,アンパーサンド記号(”&”)は&のようにエスケープされている必要があります。WP Newで初期化するテキストは,標準テキストや不完全なHTMLコードの断片ではなく,XHTMLであるべきです。
タグが省略された標準テキストは,まずHTMLとして整形され(この時点で&は&になります),その後,XMLとして解析されるので,エラーになります。アンパーサンド記号(”&”)のようにエスケープが必要な文字が含まれるテキストを4D Write Proでインポートする場合,文字がエスケープされた標準テキストをWP Newに処理させようとするのではなく,文字がエスケープされていない標準テキストをWP SET TEXTで処理するようにしてください。
v2004では,Windows版に限り,標準テキスト内のHTMLハイパーリンクがアンダーラインで装飾され,クリック操作でURLにジャンプすることができました。4Dのテキスト入力エリアがリッチテキスト入力オブジェクトで実装されていたためです。現行バージョンでは,テキスト入力オブジェクトの「マルチスタイル」プロパティが有効にされていない場合,HTMLハイパーリンクは標準テキストとしてレンダリングされます。これは仕様です。
Mac 64ビット版では,出力フォームをスクロールすると,On Headerイベントが1度ではなく,何度かコールされることがあります。これは仕様です。Mac 64ビット版(Cocoa)のグラフィック描画は最適化されており,フォームは部分的に再描画されないようになっています。
参考: v16でACI0098508が修正されるまで,300個のオブジェクトが配置されたリストフォームのスクロールおよび行の選択の反応は堪えられないほどに遅いものでした。更新のたびにフォーム全体が更新されないよう,グラフィック描画が最適化されたことにより,そのようなデザインのリストフォームでも軽快に動作するようになりました。
リストフォームが更新されると,On Headerイベントが発生します。イベントが発生したことにより,再度,リストが更新された場合,再度,On Headerイベントが発生しますが,今度はリストが更新されないかもしれず,そうであれば,そのタイミングではOn Headerイベントが発生しません。リストフォームをスクロールした場合,スクロールした行数とOn Headerイベントの回数は対応しないことがあります。言い換えるならば,On Headerイベントが余分に発生しているのではなく,フォームが再描画される回数が減っているため,スクロール中はイベントがまとめて発生したり,逆に発生しなかったりするようになった,ということです。
24時間を超過する時間型の値をView Proエリアで使用した場合,値は時間ではなく,時刻として表示されます。たとえば,Time(26;00;00)を挿入した場合,26時間ではなく,午前2時と表示されます。これは仕様です。SpeadJSセルの表示フォーマット(long time pattern)は,デフォルトでHH:mm:ssに設定されています。24時間を超過する時間型を表示したいのであれば,フォーマットを[hh]:mm:ssに設定してください。
オブジェクト型フィールドのオブジェクト型プロパティの値をOB SETで変更してから保存した場合,オブジェクト型プロパティの値は更新されないかもしれません。これは仕様です。たとえば,下記のコードを実行した場合,[Test]TestObject.Testの値は200に更新されません。
LOAD RECORD([Test])
$oSubObject:=OB Get([Test]TestObject;"MySubObject";Is object)
OB SET($oSubObject;"Test";200)
SAVE RECORD([Test])
OB SETコマンドは,第1パラメーターに渡されたオブジェクト型(フィールドまたは変数)のdirty(変更済み)フラグだけをセットします。そのオブジェクトを参照している他のオブジェクトのフラグはセットしません。OB SETコマンドでオブジェクト型フィールドの内部オブジェクトを間接的に更新する場合,フィールド自体のdirty(変更済み)フラグを下記のようにセットする必要があります。
[Test]TestObject:=[Test]TestObject

プロジェクトモードデータベースを導入してから、いくつかの4Dダイアログのインターフェイスも修正しました。このブログでは、フォームエディターに加えた変更をいくつか提示します。
まずはフォームがどのように組成されるのかを思い出しましょう。

フォーム名をつけたフォルダを各フォームごとに作成します:
各フォームフォルダーは以下の項目で構成されています:
フォーム・ディスクリプション
お気づきかもしれませんが、プロパティー・リスト中のプロパティーのいくつかは太字です。なぜでしょう?とてもシンプルですが:プレーンテキストのプロパティーは初期値を使い、太字のテキストはデザイナーによってオーバーライドされています。
このビデオ中では、私たちは太字のテキスト、値のリセットの方法、そしてこの情報がスタイルシートでいかに有効かについてデモを行っています。
4Dはオブジェクトをグループ化でき、全体を簡単に選択、移動、修正することができます。このビデオでは、プロジェクトモード・データベース中のグループの改良点をお見せします。
例えば、グループの中の一つのオブジェクトを選択します:最初に、グループ中のオブジェクトをクリックしてグループを選択します。それから選択したい特定のオブジェクトをクリックします。
もしグループを選択したら、整列と分布アクションが可能になります。アクションはグループ内の全てのオブジェクトに適用されます。