Versions Compared

Key

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

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

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

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

  • StartDrag

  • DragOver

  • DragDrop

  • EndDrag

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

LANSAコントロールで、ドラッグ・オーバーまたはドラッグ・アンド・ドロップ・イベント中に Windows Explorer からのファイル・パスを受け入れるようにするには、Sys_Appln で (例えば) 次のプロパティを有効にします。 #com_owner.Initialize.

#SYS_APPLN.AllowWindowsDragDrop := True

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

Pic1Image RemovedImage Added

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

...

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

* 
**************************************************
*
*  COMPONENT  COMPONENT:  STD_FORM
*
* 
**************************************************
Function OptionsFunction Options(*DIRECT)
Begin_Com Role(*EXTENDS #PRIM_FORM) Clientheight(374) Clientwidth(449) Dragstyle(Aggregated) Height(410) Left(513) Top(151) Width(465)
 
Define_Com ClassCom Class(#PRIM_LTVW)  NameName(#ListView)  ColumnbuttonheightColumnbuttonheight(20)  ComponentversionComponentversion(2)  DisplaypositionDisplayposition(1)  DragstyleDragstyle(Automatic)  EnforceminimumsizeEnforceminimumsize(True)  FullrowselectFullrowselect(True)  HeightHeight(289)  KeyboardpositioningKeyboardpositioning(SortColumn)  LeftLeft(16)  ParentParent(#COM_OWNER)  ShowsortarrowShowsortarrow(True)  TabpositionTabposition(1)  TopTop(8)  WidthWidth(420)
Define_Com ClassCom Class(#PRIM_LVCL)  NameName(#LVCL_1)  CaptionCaption('Items')  CaptiontypeCaptiontype(Caption)  DisplaypositionDisplayposition(1)  MinimumwidthMinimumwidth(10)  ParentParent(#ListView)  SourceSource(#STD_NUM)  WidthWidth(10)
Define_Com ClassCom Class(#PRIM_LVCL)  NameName(#LVCL_2)  CaptionCaption('File PathFile Path')  CaptiontypeCaptiontype(Caption)  DisplaypositionDisplayposition(2)  MinimumwidthMinimumwidth(10)  ParentParent(#ListView)  SourceSource(#VF_INSDTA)  WidthWidth(93)

* Initialisation
Evtroutine HandlingEvtroutine Handling(#com_owner.Initialize)
#SYS_APPLN.AllowWindowsDragDrop AllowWindowsDragDrop :=  TrueTrue
Set ComSet Com(#com_owner)  CaptionCaption(*component_desc)
Endroutine
 
Evtroutine HandlingEvtroutine Handling(#ListView.DragOver)  OptionsOptions(*NOCLEARMESSAGES NOCLEARMESSAGES *NOCLEARERRORS)  PayloadPayload(#draggedData)  AcceptdropAcceptdrop(#acceptDrop)  DragstateDragstate(#dragState)
If If (#dragState #dragState *NE ExitNE Exit)
If If (#draggedData #draggedData *Is #PRIMIs #PRIM_APPL.IDragDropFilePaths)
#STD_NUM NUM :=   (#draggedData #draggedData *As #PRIMAs #PRIM_APPL.IDragDropFilePaths).FileCount
#VF_INSDTA := ''
 
Clr_List Named(#ListView)
 
Add_Entry To_List(#ListView)
 
#acceptDrop #acceptDrop :=  TrueTrue
Endif
Endif
Endroutine
Evtroutine Handling 
Evtroutine Handling(#ListView.DragDrop)  OptionsOptions(*NOCLEARMESSAGES NOCLEARMESSAGES *NOCLEARERRORS)  PayloadPayload(#draggedData)
Clr_List Named(#ListView)
If  
If (#draggedData #draggedData *Is #PRIMIs #PRIM_APPL.IDragDropFilePaths)
Define FieldDefine Field(#NumFiles)  ReffldReffld(#STD_NUM)
#NumFiles #NumFiles :=   (#draggedData #draggedData *As #PRIMAs #PRIM_APPL.IDragDropFilePaths).FileCount
#STD_NUM := 1
Dowhile Cond 
Dowhile Cond(#STD_NUM <NUM <=  #NumFiles#NumFiles)
#VF_INSDTA INSDTA :=   (#draggedData #draggedData *As #PRIMAs #PRIM_APPL.IDragDropFilePaths).FilePath<#STD_NUM>
Add_Entry ToEntry To_List(#ListView)
#STD_NUM NUM +=  11
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つのフォーム間で社員を移動