コンパイラー設計上の制約により,下記のようなコードはコンパイルモードで動作しません。
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)が内部的にコールされています。
SDIモードでウィンドウタイプのToolbar form window
はサポートされていません。これは仕様です。
ツールバータイプのウィンドウは,常に画面の幅いっぱい最上部に表示されるウィンドウです。Windowsのタスクバーをデスクトップの「上」「右」「左」に表示した場合,4Dで表示したツールバーの一部がWindowsタスクバーの下に隠れてしまうかもしれません。
ドキュメントの記述は近日中に修正されます。
ウィンドウの水平方向のサイズはデスクトップ(macOSおよびSDIモードのWindows)または4Dのメインウィンドウ内部(MDIモードのWindows)の利用可能な全ての水平方向のスペースを埋める形で自動的に調整されます。
デザインモードの「編集」メニューの最下段にある「すべてを置換」アクションは,直前に実行された「編集>検索>置換…」の条件をメソッド内で適用するというものですが,「単語全体」条件は適用されず。単純な文字列の置換となることに留意してください。これは仕様です。
たとえば,検索条件を「単語全体」を有効にし,プロジェクトメソッド「Method1」を「Method2」に変換した場合,変数「<>Method1」および「$Method1」は影響を受けません。「単語全体」が指定されているためです。しかし,「すべてを置換」は,単純な置換となるため,変数も置換の対象となります。
タブコントールに「選択リスト」が設定されている場合,データソースは階層リストになります。とはいえ,「式の型(旧称:式のタイプ)」は「整数」と「テキスト配列」のどちらも選択することができます。選択リストが設定されていながら,式の型がテキスト配列に設定されているタブコントールは,データソース変数が明示的に宣言されていない場合,配列型なのかリスト型なのか,はっきりしないことになります。
v17以前,選択リストが設定されていれば,そのタブコントールはリスト型であるとみなされ,データソースは階層リストになりました。つまり,式の型がテキスト配列であることは無視されました。
18以降,式の型がテキスト配列であれば,そのタブコントールは配列型であるとみなされるようになりました。選択リストが設定されている場合,そのリストから配列にデータがコピーされました。
配列型のタブコントールはSelected list items
のようなリストコマンドでコントールすることができません。リスト型のタブコントールとして使用するのであれば,式の型を整数に設定するか,データソース変数を明示的に宣言する必要があります。これは仕様です。