開発者であれば、フォームオブジェクトの内部でイベントを処理することに慣れていることでしょう。最も一般的なのはon clicked フォームイベントで、リストボックスを含むほとんどのオブジェクトで使用することができます。このオブジェクトでは、クリックをリストボックスのレベルまたはカラムメソッドで管理することができます。
そして、4D v18 R6 からは、on clicked フォームイベントが、セルが編集されているかどうかにかかわらず、トリガーされるようになり、コントロールが向上し、インターフェイスが改善されました。
以下は、非常に簡単な例です。
セルが編集されているときに、コンテクストメニューを使って可能な値を表示したいとします。しかし、行が選択されただけでは、その行やセルの色を選択できるようにしたいとします。
これはとても簡単なことです。
on clicked イベントで、セルが編集中かどうかをチェックします。そして、その結果に応じて、メニューを表示します。
If
)このようにすればいいのです。
$choice
// use the .row info present in the Form event object
FORM Event( ) ( ) := ( ; "Alpha") ( ; -1; "Alpha") ( ; "Bravo") ( ; -1; "Bravo") ( ; "Charlie") ( ; -1; "Charlie") := ( ) ( xml-ph-0033@Contextual click // you don't want to do anything if the click is not a contextual click
IfIs editing text // if the text is being edited, suggest input values
$dynMenuCreate menu
APPEND MENU ITEM$dynMenu
SET MENU ITEM PARAMETER$dynMenu
APPEND MENU ITEM$dynMenu SET MENU ITEM PARAMETER$dynMenu
APPEND MENU ITEM$dynMenu
SET MENU ITEM PARAMETER$dynMenu
$choiceDynamic pop up menu$dynMenu
If row APPEND MENU ITEM $choice}:= := ( ; "Blue") ( ; -1; "Blue") ( ; "Green") ($dynMenu; -1; "Green") := ( ) ( #"") (*; .; . ; ) $choice
(
End if
Else // if the text is NOT being edited, suggest color for the text
$dynMenuCreate menu
APPEND MENU ITEM$dynMenu
SET MENU ITEM PARAMETER$dynMenu
$dynMenu
SET MENU ITEM PARAMETER
Dynamic pop up menu$dynMenu
If$choice
// use columnName and row attributes of the Form event object
LISTBOX SET ROW COLOR FORM EventcolumnName FORM Eventrow $choice
End if
End if
RELEASE MENU$dynMenu)
End if
フォームイベントの詳細については、doc centerを参照してください。
互換性についての注意
on clicked イベントで実行されるコードをすでに持っている場合、編集したセル内でクリックが発生したときにそのコードの実行を停止させたいことがあります。この場合、is editing text 関数で事前にこのセルの状態をテストしてください。
技術的な詳細については、ドキュメントをチェックしてください。