ドロップ先オブジェクト("ドロップ可"プロパティチェック済み)のOn Drag Over イベントにおいて、GET PASTEBOARD DATA TYPE あるいは GET PASTEBOARD DATA を使用して、ペーストボード内のデータの型、あるいはデータのシグネイチャー取得し、ドロップ先オブジェクトと互換性があるかどうかをチェックします。 Drop position コマンドは、ドロップ先オブジェクトが配列(つまりスクロール可能なエリア)、改装リスト、テキストあるいはコンボボックスの場合にはターゲット要素のアイテム位置の要素番号を返し、ドロップ先オブジェクトがリストボックスの場合にはカラム番号を返します。 ドロップ先オブジェクトまたは要素が互換性がある場合、コマンドは$0 に0 を返してドロップを受け付け、そうでない場合には$0 には-1 を返します。
ドロップ先オブジェクト("ドロップ可"プロパティチェック済み)のOn Drop イベントにおいて、ドロップに対応するアクションを実行します。例えばドラッグ&ドロップの操作がドラッグしているデータをコピーする目的であった場合、そのデータをドロップ先オブジェクトへ割り当てます。ドラッグ&ドロップがデータの移動ではなく、特定の操作のためのユーザーインターフェースメタファーであった場合、例えばGet file from pasteboard コマンドを使用してファイルパスを取得するなど、必要な処理を実行します。
On Begin Drag Over フォームイベントは、ドラッグ可能なすべてのフォームオブジェクトで選択できます。このイベントは、オブジェクトがドラッグ可プロパティを持っている場合、すべてのケースで生成されます。ソースオブジェクトのメソッドあるいはソースオブジェクトのフォームメソッドから呼び出されます。
注:On Drag Over フォームイベントと異なり、On Begin Drag Over はドラッグアクションのソースオブジェクトのコンテキストで呼び出されます。
On Begin Drag Over イベントはドラッグアクションの高度な管理に使用できます。以下のようなことに使用できます:
ドラッグを受け入れると、ドロップ先オブジェクトがハイライトされます。ドラッグを拒否した場合、ドロップ先オブジェクトはハイライトされません。 ドラッグを受け付けることは、ドラッグされたデータがドロップ先オブジェクトに挿入されるという意味ではありません。これは、単にマウスボタンをこの場所 で離したときに、ドラッグされたデータがドロップ先オブジェクトによって受け付けられ、On Drop イベントが動くということを意味するだけです。
自動ドロップ: このオプションは自動ドロップモードを有効にするために使用します。4Dは可能な限り自動で、オブジェクトにドロップされたテキストやピクチャ型データの挿入を管理します (データはオブジェクトにペーストされます)。この場合On Drag Over と On Drop フォームイベントは生成されません。他方、ドロップ中の On After Edit とオブジェクトがフォーカスを失った時の On Data Change イベントは生成されます。 テキストやピクチャ以外のデータ (他の4Dオブジェクトやファイルなど) や複合データがドロップされた場合、アプリケーションはドロップ可オプションを参照します。オプションがチェックされていれば、On Drag Over と On Drop フォームイベントが生成されます。そうでなければドロップは拒否されます。これは“外部からのドラッグアンドドロップを拒否”オプションの設定も関連します (以下参照)。
// Object Method: label1 If(Form even codet=On Drop) //プロパティリストにおいてドロップ可が有効化されている必要あり ARRAY TEXT($signatures_at;0) ARRAY TEXT($nativeTypes_at;0) ARRAY TEXT($formatNames_at;0) GET PASTEBOARD DATA TYPE($signatures_at;$nativeTypes_at;$formatNames_at) If(Find in array($signatures_at;"com.4d.private.text.native")#-1) // 4D テキストがペーストボードにある OBJECT Get pointer(Object current)->:=Get text from pasteboard End if End if
:(Form event code=On Drag Over) // ペーストボードにファイルが格納されている婆にのみOn Drop イベントを受け入れ、それ以外は拒否する If(Get file from pasteboard(1)#"") //少なくとも1つのファイルがドロップされた $0:=0 //ドロップを受け入れる Else//ペーストボードにファイルがない $0:=-1 //ドロップを拒否 End if
:(Form event code=On Drop) //プロパティリストにてドロップ可アクションが有効化されている必要あり ARRAY TEXT(importedPath_at;0) C_TEXT($path_t) C_LONGINT($index_l) $index_l:=1 Repeat $path_t:=Get file from pasteboard($index_l) If($path_t#"") APPEND TO ARRAY(importedPath_at;$path_t) End if $index_l:=$index_l+1 Until($path_t="") End case