Page History
[ |../../index.htm#lansa/l4wdev06_0700.htm]
現在地:
...
この例では、社員を1つのフォームからドラッグし、他のフォームにドロップします。
これがソースのフォームです。
これがターゲットのフォームです。
Ctrlキーを押されずに社員がドラッグされると、ソース・フォームからターゲット・フォームに移動されます。Ctrlキーを押された場合は、社員はソース・フォームからターゲット・フォームにコピーされます。
カーソル
移動とコピーの動作の違いが見てわかるよう、2つのカーソル・コンポーネントを使用します。そのため、この例を実行する場合は、カーソル・タイプのコンポーネントを2つ作成する必要があります。
DD_CURMOV | このカーソルは、社員をコピーするときに表示されます。 |
|---|---|
DD_CURCPY | このカーソルは、社員を移動するときに表示されます。 |
これらのコンポーネントを作成する場合は、既存の.curファイルをFileNameプロパティの値として指定する必要があります。.curファイルは、Windowsのディレクトリで見つけることができます。どのカーソル・イメージを選択してもかまいません。
この例を実行するには、前のセクションの2つのカーソルのDD_EMPPL Payloadのソースを再利用可能パーツにコンパイルし、ソース・フォームのソースとターゲット・フォームのソースをコンパイルする必要があります。
ソース・フォームを実行します。ターゲット・フォームは自動的に表示されます。
ソース・フォームのソース
このソースをコピーしてフォームに貼り付け、コンパイルして実行してください。 FUNCTION options
FUNCTION options(*DIRECT)
BEGIN_
...
COM role(*
...
EXTENDS #PRIM_FORM)
...
HEIGHT(258)
...
LAYOUTMANAGER(#ATLM_1)
...
LEFT(302)
...
TOP(108)
...
VISUALSTYLE(#VS_NORM)
...
WIDTH(662)
DEFINE_
...
COM class(#PRIM_ATLM)
...
name(#ATLM_1)
DEFINE_
...
COM class(#PRIM_STBR)
...
name(#STBR_1)
...
DISPLAYPOSITION(1)
...
HEIGHT(24)
...
LEFT(0)
...
MESSAGEPOSITION(1)
...
PARENT(#COM_OWNER)
...
TABPOSITION(1)
...
TABSTOP(False)
...
TOP(207)
...
WIDTH(654)
DEFINE_
...
COM class(#PRIM_ATLI)
...
name(#ATLI_1)
...
ATTACHMENT(Bottom)
...
MANAGE(#STBR_1)
...
PARENT(#ATLM_1)
DEFINE_
...
COM class(#PRIM_LTVW)
...
name(#LTVW_1)
...
DISPLAYPOSITION(2)
...
DRAGSTYLE(Automatic)
...
FULLROWSELECT(True)
...
HEIGHT(207)
...
LEFT(0)
...
PARENT(#COM_OWNER)
...
TABPOSITION(2)
...
TOP(0)
...
WIDTH(654)
DEFINE_
...
COM class(#PRIM_ATLI)
...
name(#ATLI_2)
...
ATTACHMENT(Center)
...
MANAGE(#LTVW_1)
...
PARENT(#ATLM_1)
DEFINE_
...
COM class(#PRIM_LVCL)
...
name(#LVCL_1)
...
DISPLAYPOSITION(1)
...
PARENT(#LTVW_1)
...
SOURCE(#EMPNO)
...
WIDTH(16)
DEFINE_
...
COM class(#PRIM_LVCL)
...
name(#LVCL_2)
...
DISPLAYPOSITION(2)
...
PARENT(#LTVW_1)
...
SOURCE(#SURNAME)
...
WIDTH(20)
DEFINE_
...
COM class(#PRIM_LVCL)
...
name(#LVCL_3)
...
DISPLAYPOSITION(3)
...
PARENT(#LTVW_1)
...
SOURCE(#GIVENAME)
...
WIDTH(20)
DEFINE_
...
COM class(#PRIM_LVCL)
...
name(#LVCL_4)
...
DISPLAYPOSITION(4)
...
PARENT(#LTVW_1)
...
SOURCE(#DEPTMENT)
...
WIDTH(20)
DEFINE_
...
COM class(#PRIM_LVCL)
...
name(#LVCL_5)
...
DISPLAYPOSITION(5)
...
PARENT(#LTVW_1)
...
SOURCE(#SECTION)
...
WIDTH(20)
...
DEFINE_
...
COM class(#DD_TARGET)
...
name(#DD_TARGET)
...
EVTROUTINE handling(#com_owner.CreateInstance)
...
SET com(#com_owner)
...
CAPTION(*component_desc)
...
SELECT fields(#LTVW_1)
...
from_file(PSLMST)
ADD_
...
ENTRY to_list(#LTVW_1)
...
ENDSELECT
INVOKE method(#dd_target.showform)
...
INVOKE method(#com_owner.activateform)
...
ENDROUTINE
EVTROUTINE handling(#LTVW_1.StartDrag)
...
PAYLOAD(#Payload)
DEFINE_
...
COM class(#dd_emppl)
...
name(#Local_Payload)
...
* Create payload
SELECTLIST named(#LTVW_1)
...
CONTINUE if('#ltvw_1.currentitem.
...
selected =
...
False')
...
INVOKE method(#Local_Payload.Add_to_payload)
...
EMPLOYEE_ID(#empno)
...
EMPLOYEE_SURNAME(#surname)
...
EMPLOYEE_GIVENAME(#givename)
...
EMPLOYEE_DEPARTMENT(#deptment)
...
EMPLOYEE_SECTION(#section)
...
ENDSELECT
* Move temporary payload to Drag Manager.
* Temporary Payload is destroyed at the end of the routine
SET_REF com(#payload) to(#Local_Payload)
...
ENDROUTINE
* Check Drag result
EVTROUTINE handling(#LTVW_1.EndDrag)
...
PAYLOAD(#payload)
...
DRAGRESULT(#DragResult)
DEFINE_
...
COM class(#dd_emppl)
...
name(#Local_Payload)
...
reference(*dynamic)
...
SET_
...
REF com(#Local_payload)
...
to(*
...
dynamic #Payload)
CHANGE field(#STD_OBJ)
...
to('#DRAGRESULT.VALUE')
...
IF cond('#DragResult.
...
value =
...
Accepted')
...
* Control key down then copying
IF cond('#sys_keybd.
...
ControlkeyDown =
...
False')
...
SELECTLIST named(#LTVW_1)
...
CONTINUE if('#ltvw_1.currentitem.
...
selected =
...
False')
DLT_
...
ENTRY from_list(#LTVW_1)
ENDSELECT
...
ENDIF
ENDIF
ENDROUTINE
EVTROUTINE handling(#COM_OWNER.Closing)
...
options(*
...
NOCLEARMESSAGES *NOCLEARERRORS)
...
INVOKE method(#dd_target.closeform)
ENDROUTINE
END_COM
...
ターゲット・フォームのソース
このソースをコピーしてフォームに貼り付け、コンパイルして実行してください。このフォームは自動的にソース・フォームから表示されます。 FUNCTION options
FUNCTION options(*DIRECT)
BEGIN_
...
COM role(*
...
EXTENDS #PRIM_FORM)
...
HEIGHT(256)
...
LAYOUTMANAGER(#ATLM_1)
...
LEFT(314)
...
TOP(356)
...
VISUALSTYLE(#VS_NORM)
...
WIDTH(644)
DEFINE_
...
COM class(#PRIM_ATLM)
...
name(#ATLM_1)
DEFINE_
...
COM class(#PRIM_STBR)
...
name(#STBR_1)
...
DISPLAYPOSITION(1)
...
HEIGHT(24)
...
LEFT(0)
...
MESSAGEPOSITION(1)
...
PARENT(#COM_OWNER)
...
TABPOSITION(1)
...
TABSTOP(False)
...
TOP(205)
...
WIDTH(636)
DEFINE_
...
COM class(#PRIM_ATLI)
...
name(#ATLI_1)
...
ATTACHMENT(Bottom)
...
MANAGE(#STBR_1)
...
PARENT(#ATLM_1)
DEFINE_
...
COM class(#PRIM_LTVW)
...
name(#LTVW_1)
...
DISPLAYPOSITION(2)
...
FULLROWSELECT(True)
...
HEIGHT(205)
...
LEFT(0)
...
PARENT(#COM_OWNER)
...
TABPOSITION(2)
...
TOP(0)
...
WIDTH(636)
DEFINE_
...
COM class(#PRIM_ATLI)
...
name(#ATLI_2)
...
ATTACHMENT(Center)
...
MANAGE(#LTVW_1)
...
PARENT(#ATLM_1)
DEFINE_
...
COM class(#PRIM_LVCL)
...
name(#LVCL_1)
...
DISPLAYPOSITION(1)
...
PARENT(#LTVW_1)
...
SOURCE(#EMPNO)
...
WIDTH(16)
DEFINE_
...
COM class(#PRIM_LVCL)
...
name(#LVCL_2)
...
DISPLAYPOSITION(2)
...
PARENT(#LTVW_1)
...
SOURCE(#SURNAME)
...
WIDTH(20)
DEFINE_
...
COM class(#PRIM_LVCL)
...
name(#LVCL_3)
...
DISPLAYPOSITION(3)
...
PARENT(#LTVW_1)
...
SOURCE(#GIVENAME)
...
WIDTH(20)
DEFINE_
...
COM class(#PRIM_LVCL)
...
name(#LVCL_4)
...
DISPLAYPOSITION(4)
...
PARENT(#LTVW_1)
...
SOURCE(#DEPTMENT)
...
WIDTH(20)
DEFINE_
...
COM class(#PRIM_LVCL)
...
name(#LVCL_5)
...
DISPLAYPOSITION(5)
...
PARENT(#LTVW_1)
...
SOURCE(#SECTION)
...
WIDTH(20)
...
EVTROUTINE handling(#com_owner.CreateInstance)
...
SET com(#com_owner)
...
CAPTION(*component_desc)
...
ENDROUTINE
EVTROUTINE handling(#ltvw_1.DragOver)
...
PAYLOAD(#payload)
...
ACCEPTDROP(#AcceptDrop)
...
DRAGCURSOR(#Cursor)
...
* If an instance of the Employee "Payload"
...
SET com(#Acceptdrop)
...
VALUE(true)
...
IF cond('#sys_keybd.
...
ControlkeyDown =
...
False')
...
SET_
...
REF com(#cursor)
...
to(#dd_curmov)
...
ELSE
SET_REF com(#cursor)
...
to(#dd_curcpy)
...
ENDIF
ENDROUTINE
EVTROUTINE handling(#ltvw_1.DragDrop)
...
PAYLOAD(#payload)
DEFINE_
...
COM class(#dd_emppl)
...
name(#Local_Payload)
...
reference(*dynamic)
...
SET_
...
REF com(#Local_Payload)
...
to(*
...
dynamic #Payload
* Get the number of items from the payload
CHANGE field(#STD_NUM)
...
to('#Local_Payload.Payload_Items'
...
* Get the number of items data from the payload
BEGIN_LOOP using(#LISTENTRY) to(#STD_NUM)
...
INVOKE method(#Local_Payload.Get_Payload_Item)
...
PAYLOAD_ITEM(#listentry)
...
EMPLOYEE_ID(#empno)
...
EMPLOYEE_SURNAME(#surname)
...
EMPLOYEE_GIVENAME(#givename)
...
EMPLOYEE_DEPARTMENT(#deptment)
...
EMPLOYEE_SECTION(#section)
ADD_
...
ENTRY to_list(#LTVW_1)
END_LOOP
...
SET_
...
REF com(#Local_Payload)
...
to(*null)
...
ENDROUTINE
END_COM

