64ビット整数型のフィールドに登録されている符号なし整数値を符号あり32ビット整数型の変数(C_LONGINT
)に代入した場合,インタープリターモードにおけるオーバーフロー値(例:30,000,000
)の扱いは,プラットフォーム依存となります。これは仕様です。Windowsでは,オーバーフロー値が0
になりますが,Macではなりません。そのため,クエリや演算の結果がプラットフォーム間で違うことがあります。なお,コンパイルモードでは,どちらのプラットフォームでも同じ結果になります。いずれにしても,整数値オーバーフローの動作は「未定義」ですので,特定の動作を前提にしたコーディングは避けるべきです。たとえば,整数をC_REAL
で処理できるかもしれません。
Mac版のv18は,4D SASによってコード署名され,アプリ公証(ノータリゼーション)にも合格していますが,macOS 10.13 High Sierraでは,初回の起動時に「開発元が未確認のため開けません」というエラーが表示されます。これは,4D.app特有の現象であり,4D Server.appでは発生しません。4D.appには,モバイルアプリのジェネレーター(4D for iOS)がプリインストールされていますが,このSDKのSwiftフレームワークは,High Sierraにインストールされているものよりもバージョンが新しいため,GateKeeperがアプリの検証に失敗してしまうようです。
4D for iOS v18のシステム要件は・・・
Xcode 11.2 Swift 5.1 iOS 13.2 macOS 10.14.4
・・・となっています。
4D v18 LTSのシステム要件は・・・
macOS High Sierra (10.13) – macOS Catalina (10.15)
・・・ですが,上述した問題が発生するようであれば,MojaveまたはCatalinaを使用することが推奨されています。
開発プラットフォームをアップグレードすることが難しい場合,下記いずれかの方法で問題を回避することができます。
Swiftをインストールする【推奨】
私たちにとって、日を追うごとにデベロッパーを楽にすることは大事な目的です。そしてリストボックス は、この目的を叶えるための、4Dで最も使われている強力なフォームの一つです。ご存知のようにリストボックス は多くのイベントのトリガーです。4D v18 R2ではForm eventコマンドを拡張して、リストボックス がトリガーとなった場合により多くの情報が返されるようにしたのは、そのような理由です。
古いトリッキーなコードで、どの列、行、ヘッダーをクリックしたか、マウスを重ねていたかを知りたいのではないでしょうか。よりスムーズでスマートな方法をお見せしましょう。
イベントによって、追加された関連のあるプロパティがForm eventコマンドによって返されます。 いくつかサンプルをチェックしてみましょう。
ヘッダーオブジェクトの名称、カラムオブジェクトの名称、カラム番号はForm eventコマンドによって返されます。以下のサンプルは、On Header Clickイベントでトリガーされた時にオブジェクトを返す例です。
{"headerName":"headerLastname", // New property - Header object name "columnName":"lastname", // New property - Column object name "column":2, // New property - Column number "code":42, "description":"On Header Click", "objectName":"EmployeesLB"}
例えば、カラム・オブジェクト名をデータベースの実際の属性名(例:lastname)に設定した場合、
Employeeのlastnameを表示するカラムのヘッダーをクリックした際に、lastnameとfirstname属性のカラムをソートします:
Form.event:=FORM Event
Case of
: (Form event code=On Header Click)
If (Form.event.columnName="lastname")
Form.employees:=Form.employees.orderBy(Form.event.columnName+", firstname")
End if
End case
On Display Detailイベントがトリガーされる場合、追加される関連のあるプロパティ(例:isRowSelected)はForm eventコマンドによって返されます。これはリストボックス の行の外観を管理するのに役に立ちます:
以下はリストボックス のMeta info expressionプロパティのメソッド(setColor)のサンプルです:
setColorメソッド:
C_OBJECT($event;$0;$meta)
$event:=FORM Event
$meta:=New object
Case of
: ($event.code=On Display Detail)
If ($event.isRowSelected) //set color when row is selected
$meta.fill:="lightblue"
End if
End case
$0:=$meta
そして行を選択した際のリストボックス の状態です:
他によく使われるイベントはOn Mouse Moveイベントです。下記はForm eventコマンドによってトリガーされた時に返されるオブジェクトの例です。
マウスを置いた場所の役に立つ情報をすぐに入手できます!
Form eventコマンドが返すのは:
{"area":"header", // The mouse is on a header
"areaName":"headerLastname", // Header object name
"column":2, // Column number
"columnName":"lastname", // Colmun object name
"code":37,
"description":"On Mouse Move",
"objectName":"EmployeesLB"}
Form eventコマンドが返すのは:
{"area":"cell", // The mouse is on a cell
"column":1, // Column number
"row":2, // Row number
"columnName":"firstname", // Colmun object name
"code":37,
"description":"On Mouse Move",
"objectName":"EmployeesLB"}
とても多くのリストボックス イベントがあるので、一つのブログでは全てをカバーすることはできません。ドキュメントをチェックして、各イベントについてより詳細な情報を参照し、HDIサンプルをダウンロードして多くを学んでください!
入力フォームでレコードを表示している間,そのテーブルは自動リレーションの対象から除外されます。これは編集中のレコードが意図に反してアンロードされることを防止するための措置であり,仕様です。たとえば,Nテーブルの入力フォームでダイアログを表示している場合,RELATE MANY
でNテーブルのカレントセレクションを作成することはできません。