Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

[ Image Removed |../../index.htm#lansa/l4wdev06_0110.htm]
現在地:

...

ドラッグ・アンド・ドロップ操作は、オブジェクトをある場所から別の場所に移動またはコピーするために使用されます。

ドラッグ・アンド・ドロップ操作は、マウスの左ボタンをクリックしてマウスでオブジェクトを選択すると開始します。それからマウスの左ボタンを押さえたままオブジェクトをドラッグし、最後にマウスの左ボタンを離してオブジェクトをドロップします。

ドラッグ・アンド・ドロップ操作は、4つのイベントで構成されます。

  • StartDrag

  • DragOver

  • DragDrop

  • EndDrag

ドラッグ・アンド・ドロップされるオブジェクトは、Payloadです。

LANSAコントロールで、ドラッグ・オーバーまたはドラッグ・アンド・ドロップ・イベント中に Windows Explorer

...

からのファイル・パスを受け入れるようにするには、Sys_Appln で (例えば) 次のプロパティを有効にします。 #com_owner.Initialize.

#SYS_APPLN.AllowWindowsDragDrop := True

ファイルをドラッグすると、イベント・ハンドラーのPayloadパラメータに、タイプ #PRIM_APPL.IDragDropFilePaths のコンポーネント・インターフェースが含まれます。

Image RemovedPic1Image Added

このインターフェースは、2つのメソッドを公開します。

FileCount

ドラッグされたファイルの数を確認する

FilePath<インデックス>

位置インデックスのファイル・パスを取得する

 
以下は、この機能を使用して、ListViewコントロールにドラッグ・アンド・ドロップされるファイル・パスのリストを取得できるようにする方法の例を示しています。

新しいフォームを作成し、ソースを次のコードで置き換えます。
 

* **************************************************
*
*  COMPONENT:STD_FORM
*
**************************************************
Function Options(*DIRECT)
Begin_

...

Com Role(*

...

EXTENDS #PRIM_FORM)

...

Clientheight(374)

...

Clientwidth(449)

...

Dragstyle(Aggregated)

...

Height(410)

...

Left(513)

...

Top(151)

...

Width(465)
Define_Com Class(#PRIM_LTVW) Name(#ListView) Columnbuttonheight(20) Componentversion(2) Displayposition(1) Dragstyle(Automatic) Enforceminimumsize(True) Fullrowselect(True) Height(289) Keyboardpositioning(SortColumn) Left(16) Parent(#COM_OWNER) Showsortarrow(True) Tabposition(1) Top(8) Width(420)
Define_Com Class(#PRIM_LVCL) Name(#LVCL_1) Caption('Items') Captiontype(Caption) Displayposition(1) Minimumwidth(10) Parent(#ListView) Source(#STD_NUM) Width(10)
Define_Com Class(#PRIM_LVCL) Name(#LVCL_2) Caption('File Path') Captiontype(Caption) Displayposition(2) Minimumwidth(10) Parent(#ListView) Source(#VF_INSDTA) Width(93)
*

...

Initialisation
Evtroutine Handling(#com_owner.Initialize)
#SYS_APPLN.AllowWindowsDragDrop := True
Set Com(#com_owner) Caption(*component_desc)
Endroutine
Evtroutine Handling(#ListView.DragOver) Options(*NOCLEARMESSAGES *NOCLEARERRORS) Payload(#draggedData) Acceptdrop(#acceptDrop) Dragstate(#dragState)
If (#dragState *NE Exit)
If (#draggedData *Is #PRIM_APPL.IDragDropFilePaths)
#STD_NUM := (#draggedData *As #PRIM_APPL.IDragDropFilePaths).FileCount
#VF_

...

INSDTA :=

...

''
Clr_

...

List Named(#ListView)
Add_

...

Entry To_List(#ListView)
#acceptDrop := True
Endif
Endif
Endroutine
Evtroutine Handling(#ListView.DragDrop) Options(*NOCLEARMESSAGES *NOCLEARERRORS) Payload(#draggedData)
Clr_

...

List Named(#ListView)
If (#draggedData *Is #PRIM_APPL.IDragDropFilePaths)
Define Field(#NumFiles) Reffld(#STD_NUM)
#NumFiles := (#draggedData *As #PRIM_APPL.IDragDropFilePaths).FileCount
#STD_

...

NUM :=

...

1
Dowhile Cond(#STD_NUM <= #NumFiles)
#VF_INSDTA := (#draggedData *As #PRIM_APPL.IDragDropFilePaths).FilePath<#STD_NUM>
Add_Entry To_List(#ListView)
#STD_NUM += 1
Endwhile
Endif
Endroutine
End_Com

...


Windows Explorerを使用してファイルを選択します。ファイルをListViewの上にドラッグし、選択したファイルの数が「Items」列に表示されるのを確認します。ファイルをListViewの上にドロップし、ファイル・パスが2列目に表示されるのを確認します。

...

Warning

警告:DragOver イベント・ハンドラーでドラッグ状態をチェックするコードに注意してください。DragDrop が完了した後、別の DragOver

...

 イベントが、dragState  Exit に設定して発生します。こうすることで、コントロールでドラッグ完了時に必要な任意の最終処理を実行できるようになります。


次のトピックも参照してください。

2.23.1 Payload

2.23.2 例1: ツリー内で社員を移動

2.23.3 例2: 2つのフォーム間で社員を移動

...