You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Next »

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

2.23 ドラッグ・アンド・ドロップ

ドラッグ・アンド・ドロップ操作は、オブジェクトをある場所から別の場所に移動またはコピーするために使用されます。
ドラッグ・アンド・ドロップ操作は、マウスの左ボタンをクリックしてマウスでオブジェクトを選択すると開始します。それからマウスの左ボタンを押さえたままオブジェクトをドラッグし、最後にマウスの左ボタンを離してオブジェクトをドロップします。
ドラッグ・アンド・ドロップ操作は、4つのイベントで構成されます。

  • StartDrag
  • DragOver
  • DragDrop
  • EndDrag

ドラッグ・アンド・ドロップされるオブジェクトは、Payloadです。
LANSAコントロールで、ドラッグ・オーバーまたはドラッグ・アンド・ドロップ・イベント中に Windows Explorer からのファイル・パスを受け入れるようにするには、Sys_Appln で (例えば) 次のプロパティを有効にします。 #com_owner.Initialize.
#SYS_APPLN.AllowWindowsDragDrop := True
ファイルをドラッグすると、イベント・ハンドラーのPayloadパラメータに、タイプ #PRIM_APPL.IDragDropFilePaths のコンポーネント・インターフェースが含まれます。

このインターフェースは、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列目に表示されるのを確認します。
警告:DragOver イベント・ハンドラーでドラッグ状態をチェックするコードに注意してください。DragDrop が完了した後、別の DragOver イベントが、dragState を Exit に設定して発生します。こうすることで、コントロールでドラッグ完了時に必要な任意の最終処理を実行できるようになります。
次のトピックも参照してください。
2.23.1 Payload
2.23.2 例1: ツリー内で社員を移動
2.23.3 例2: 2つのフォーム間で社員を移動
[ |../../index.htm#lansa/l4wdev06_0110.htm]

  • No labels