タブコントールオブジェクトのデータソースは配列またはリスト(倍長整数)にすることができます。リストを使用する場合,オブジェクトの変数はOn Load
イベントではなく,フォームを開く前に宣言されていなければなりません。オブジェクトの変数を宣言しないのであれば,オブジェクトのプロパティリストで変数タイプが「数値」に設定されている必要があります。タブコントロールの変数は,デフォルトでテキスト配列となります。データソースが数値型でない場合,タブコントールを対象にSelected list items
などのリスト系コマンドは使用できません。これは仕様です。
DOM Parse XML variable
には,テキスト型またはBLOB型の変数またはフィールドを渡す必要があります。オブジェクト型のプロパティ,たとえば$obj.data
のようなテキスト値を渡すことはできません。これは仕様です。ランゲージの設計上,変数と値には違いがあり,値を受け取るコマンドに変数を渡すことはできますが,その逆はできません。似たような例としてValue type
には値を渡すことができますが,Type
には変数またはフィールドしか渡せません。変数と値には違いがある,という点に留意してください。
パラメーター型を宣言する新しい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コマンドだけであることに留意してください。プリエンプティブモードで実行できないプロジェクトメソッドをチェックから除外することはできません。
この点はドキュメントに明記されています。