| 4D v20.1Drop position | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 
 | 
    4D v20.1
 Drop position 
         | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Drop position {( columnNumber | pictPosY )} -> 戻り値 | ||||||||
| 引数 | 型 | 説明 | ||||||
| columnNumber | pictPosY | 倍長整数 |   | リストボックス列番号 (ドロップ位置が最後の列を超えた場合-1)、または ピクチャーの場合Y座標の位置 | |||||
| 戻り値 | 倍長整数 |   | ・数値 (配列/リストボックス) または ・位置 (階層リスト) または ・ドロップ先項目の文字列中の位置 (テキスト/コンボボックス) または ・最後の配列要素やリスト項目を超えてドロップされた場合-1 または ・ピクチャー中のX座標の位置 | |||||
Drop positionコマンドは、 “複合” オブジェクトに対して行われたドロップのドロップ位置を知るために使用します。
特に階層リスト、リストボックス、テキスト、ピクチャフィールドまたは4D Write Proエリアに対して発生したドラッグ&ドロップイベントを処理するのにDrop positionを使用します。
リストボックス、コンボボックス、階層リスト、テキスト、ピクチャーまたは4D Write Pro エリアに対してドラッグ&ドロップイベント以外でDrop positionを呼び出すと、コマンドは-1を返します。
重要: フォームオブジェクトにドロップ可プロパティが選択されている場合、ドロップされたデータを受け付けます。また、そのオブジェクトメソッドは、On Drag Over またはOn Drop あるいはその両方に対して、これらのイベントを処理するためにアクティブにする必要があります。
以下の例では、支払額のリストが人ごとかつ月ごとに分割されます。これは二つのリストボックス間でドラッグ&ドロップをすることで実行されます:

右の(ソース)リストボックスのオブジェクトメソッドには以下のようなコードが書かれています:
 If(Form event code=On Begin Drag Over) //イベントはリストボックスで有効化されている必要あり
    C_BLOB($tomove)
    C_TEXT($val)
    LISTBOX GET CELL POSITION(*;"LBPaid";$col;$row)
    $val:=PaidCol{$row}
    VARIABLE TO BLOB($val;$tomove)
    APPEND DATA TO PASTEBOARD("mydrag";$tomove) //カスタムのキーを使用
 End if左の(ドロップ先)リストボックスのオブジェクトメソッドには以下のようなコードが書かれています:
 Case of
 
    :(Form event code=On Drag Over) //イベントはリストボックスで有効化されている必要あり
       C_BLOB($toGet)
       C_LONGINT($rownum)
       $rownum:=Drop position($colnum)
       GET PASTEBOARD DATA("mydrag";$toGet) //データを取得
       If(Pasteboard data size("mydrag")>0)&($colnum#1)) //データがペーストボードに入っていたら
          $0:=0 //ドロップを受け入れ
       Else
          $0:=-1 //ドロップを拒否
       End if
 
    :(Form event code=On Drop) //イベントはリストボックスで有効化されている必要あり
       C_BLOB($toGet)
       C_LONGINT($rownum;$val)
       $rownum:=Drop position($colnum)
       GET PASTEBOARD DATA("mydrag";$toGet)
       BLOB TO VARIABLE($toGet;$val) //値を取得
       If(Pasteboard data size("mydrag")>0))
          If($colnum=1)
             BEEP
          Else
             Case of //ドロップされた値を追加
                :($colnum=2)
                   John{$rownum}:=John{$rownum}+$val
                :($colnum=3)
                   Mark{$rownum}:=Mark{$rownum}+$val
                :($colnum=4)
                   Peter{$rownum}:=Peter{$rownum}+$val
             End case
             DELETE FROM ARRAY(PaidCol;Find in array(PaidCol;$val)) //ソースのリストボックスを更新
          End if
       End if
 End case
	プロダクト: 4D
	テーマ: ドラッグ&ドロップ
	番号: 
        608
        
        
        
	
	変更: 4D v11 SQL  
	変更: 4D v12
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	ランゲージリファレンス ( 4D v20)
	
	
	ランゲージリファレンス ( 4D v20.1)
	
	
	
 コメントを追加
コメントを追加