パラメーター型を宣言する新しいvar
シンタックスでは,暗黙的に任意のパラメーターを宣言することができません。つまり,C_VARIANT($0;${1})"
のようなことができません。これは仕様です。パラメーター数が事前に決まっていない場合,コレクション側を使用することを検討してください。
プロジェクトモードでは,フォームのタイプによって保存されるプロパティに違いがあります。これは仕様です。詳細フォーム(スクリーン用・印刷用)では,フォームの境界だけが保存されます。リストフォーム(スクリーン用・印刷用)では,境界・マーカー・マーカーラベルが保存されます。つまり,詳細フォームにはマーカーのが存在しません。フォームのタイプを後から変更した場合,該当しないプロパティは(プロパティリストに表示されるとしても)保存されませんので注意してください。
On Display Detail
フォームイベント中にOBJECT SET COORDINATES
でオブジェクトの位置やサイズを変更することはしないでください。この点はドキュメントに明記されています。
Windows版では,画面の描画に使用されているシステムAPIの関係で,実際にはOn Display Detail
フォームイベント中にコマンドを使用することができます。しかし,macOSではウィンドウの描画が最適化されているため,同じような振る舞いになりません。
リストの詳細行に配置されたオブジェクトでプログレスバーのようなユーザーインタフェースを実現するのであれば,四角形をリサイズするのではなく,SVGピクチャまたは進捗バーオブジェクトの使用を検討してください。
コンパイラー設計上の制約により,下記のようなコードはコンパイルモードで動作しません。
GET LISTBOX CELL POSITION(Self->;col;row;var)
問題を回避するためには,ポインターの逆参照をローカル変数に代入した上で,パラメーターとして渡すことができます。
$ptr:=Self
GET LISTBOX CELL POSITION($ptr->;col;row;var)
Self
だけでなく,ポインターを返すコマンドの逆参照を直接パラメーターとして渡した場合,正しいコードがコンパイルされません。これは仕様です。
v18では,プロジェクトメソッドをプリエンプティブモードで実行できるようにするため,スレッドセーフではないコマンドのチェックを部分的にスキップすることができるようになりました。チェックを無効化するためには,下記のようにアンセーフなコマンドの前後にコンパイラー指示を記述します。
//%T
SET MENU BAR(1) //not thread safe
//%T+
このテクニックは,論理的な条件分岐により,スレッドセーフではないコマンドがプリエンプティブモードで実行されることはないとわかっているような場合に有用です。
チェックの対象から外されるのは,4Dコマンドだけであることに留意してください。プリエンプティブモードで実行できないプロジェクトメソッドをチェックから除外することはできません。
この点はドキュメントに明記されています。
新規プロセスで作成したウィンドウの初期座標をメインモニター以外に設定した場合,ウィンドウがすぐには表示されないことがあります。これはMac版の仕様(修正できない問題)であると考えられています。
Open form window
とDIALOG
の間にWINDOW LIST
を呼び出した場合On Load
イベントでWINDOW LIST
を呼び出した場合問題を回避するためには,メインモニターにOpen form window
でウインドウを表示した後,SET WINDOW RECT
で移動することができます。
クライアント/サーバー版のORDAでデータストアクラスの戻り値($0
)にエンティティやエンティティセレクションをそのまま返すことはできますが,オブジェクト型のプロパティにンティティやエンティティセレクションを設定して返すことはできません。ORDAオブジェクトだけでなく,JFile
Folder
など,JSONにシリアライズできないナイティブ(C++)オブジェクトは,いずれもRESTサーバーから返すことができません。メンバーメソッドからダイレクトに返せるという点で,エンティティやエンティティセレクションは例外的な存在です。ダイレクトであればORDAで返せるオブジェクトには,ピクチャ・Write Proドキュメント・View Proドキュメントが含まれます。
スタンドアロン版であれば問題がなく,クライアント/サーバー版で替さえれるエラーメッセージ(不正なJSON)が直接的ではないという点で意表を突かれたように感じるかもしれませんが,これは仕様です。なお,ORDAオブジェクト(データストア・データクラス・エンティティ・エンティティセレクション)に加え,ポインター型もオブジェクト型のプロパティとしてRESTサーバーから返すことができません。
Random
は0
から32767
までの乱数を返す関数です。v18では,
プラットフォームAPIのarc4random
(macOS)およびCryptGenRandom
(Windows)が内部的にコールされています。