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テーブルのカレントセレクションを作成することはできません。
フォームのサイズが「自動」に設定されている場合,ウィンドウの最小サイズは,すべてのオブジェクトが表示できるサイズになります。そのようなウィンドウに対してSET WINDOW RECT
を使用する場合,ウィンドウの最小サイズを下回るような指定をすることがないようにしてください。
コマンドで強制的に変形された「自動サイズ」のウィンドウをユーザーがマウス操作でリサイズした場合,ウィンドウの境界付近に表示された中途半端なオブジェクトが完全に表示されるよう,ウィンドウサイズの補正が試みられますが,ウィンドウの境界部はスプリッターでもあるので,同時にオブジェクトがリサイズされ,再びウィンドウサイズが不足することになります。ウィンドウとオブジェクトが互いを増幅させるため,リサイズがいつまでも終わりません。「自動サイズ」のウィンドウに対してSET WINDOW RECT
を使用する場合,ウィンドウの最小サイズに違反するような設定をしないように注意してください。
Windows版で,ウィンドウを表示する場合,編集メニュー(コピー&ペーストなど)を誤って無効化していないか,特に注意してしてください。Macとは違い,モーダル型のウィンドウがメニューバーをdisable
にするのは,仕様です。
ピクチャライブラリに登録された画像は,ドラッグ&ドロップあるいはコピー&ペースト操作でフォームに挿入し,スタティックピクチャ(ライブラリ画像)にすることができますが,ピクチャの番号(ID)が32767
よりも上だった場合,画像はエディターでもランタイムでも表示されません。これは仕様です。ピクチャライブラリのIDは,符号付き16
ビットなので,32767
が最大値となります。
v11以降,Resourcesフォルダーが画像をライブラリ管理するための標準的な手段であり,ピクチャライブラリは,役目を終えています。廃止される予定はありませんが,今後,サポートが拡張されることもありません。そのことを踏まえ,新規の開発では,フォーム画像の管理にリソースピクチャを使用することが推奨されています。
v17r5では,4D View Proのエクスポート(VP EXPORT DOCUMENT
)が拡張され,PDF形式が指定できるようになりました。
v18では,より正確なPDFドキュメントが出力できるよう,フォントの埋め込みがサポートされるようになりました。
Manage Printing and PDF export
埋め込みに対応しているのは,OpenType(.otf
.ttf
)フォントです。SpreadJSが内部的に使用しているpdfkit
の制限により,Unicodeマップを有するフォントだけが使用できます。システムにプリインストールされているフォントには,Unicodeマップを有さないものもあるため,エクスポートの前にフォントファイルがスキャンされ,埋め込みができるかどうか,判断されるようになっています(SpreadJSがデフォルトでサポートしているフォントはスキップします)。フォントファイルのスキャンは,下記の仕様に基づいて実行されます。
Font file
は,VP EXPORT DOCUMENT
が埋め込みフォントファイルを特定するため,VP EXPORT DOCUMENT
が内部的に使用するコマンドとして追加されました。4D View Proドキュメント内で使用されているフォントに対応するフォントファイルがみつからない場合,SpreadJSのデフォルトフォントが使用されます。
前述したように,PDFに埋め込むことができるのは.otf
.ttf
ファイルだけであり,フォントコレクション(.ttc
)はサポートされていないことに留意してください。たとえば「Gill Sans」フォントは,フォントコレクションなので,印刷はできますが,PDFに埋め込むことはできません。これは(SpreadJSおよびpdfKitの)仕様です。
回避策として,フォントコレクションを個別のフォントファイルに分割するオンラインサービスが使用できるかもしれません。
4Dのキーボードショートカットは,モディファイアキーとA
からZ
(文字)の単純な組み合わせで設定されています。ロシア語キーボードのレイアウトは,西欧レイアウトとは入力できる文字が違うため,ショートカットの設定ダイアログを表示している間,無効にされるべきですが,Macの場合,そのままキリル文字が入力できてしまいます。しかし,そのように設定したショートカットは無効です。ショートカットは,西欧レイアウトで設定するようにしてください。
整数の11
に実数の1.5
を加算した値は,何でしょうか。
$Int:=11
$Real:=1.5
$Int:=$Int+$Real
上記の演算は,32ビット版では13
(12.5
を切り上げた値),64ビット版では12
(12.5
を切り下げた値)となります。これは仕様です。
64ビット版の4Dでは,インタープリターモードとコンパイルモードの動きを揃えるため,インタープリターモードであっても,Intel CPUの「丸め」処理(最近接偶数丸め)で「丸め」処理が実行されるようになっています。一方,32ビット版は,従来どおり,「四捨五入」処理が実行されるため,演算結果に違いがあります。
Windows版でフォームオブジェクトを同一メソッド内で非表示に設定し,移動してから非表示を解除した場合,画面上ではオブジェクトが以前の位置と新しい位置の両方に表示されます。これはAPIの特性に由来する振る舞いであり,現状では仕様です。オブジェクトの「増殖」を防止するためには,下記のようなコードを避けてくだだい。
OBJECT SET VISIBLE (*;"object";False)
OBJECT SET COORDINATES*;"object";$left;$top;$right;$bottom)
OBJECT SET VISIBLE (*;"object";True)