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
で移動することができます。