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_0700.htm]
現在地:

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

この例では、社員を1つのフォームからドラッグし、他のフォームにドロップします。
これがソースのフォームです。

これがターゲットのフォームです。

Ctrlキーを押されずに社員がドラッグされると、ソース・フォームからターゲット・フォームに移動されます。Ctrlキーを押された場合は、社員はソース・フォームからターゲット・フォームにコピーされます。
カーソル
移動とコピーの動作の違いが見てわかるよう、2つのカーソル・コンポーネントを使用します。そのため、この例を実行する場合は、カーソル・タイプのコンポーネントを2つ作成する必要があります。

DD_CURMOV

このカーソルは、社員をコピーするときに表示されます。

DD_CURCPY

このカーソルは、社員を移動するときに表示されます。

これらのコンポーネントを作成する場合は、既存の.curファイルをFileNameプロパティの値として指定する必要があります。.curファイルは、Windowsのディレクトリで見つけることができます。どのカーソル・イメージを選択してもかまいません。
この例を実行するには、前のセクションの2つのカーソルのDD_EMPPL Payloadのソースを再利用可能パーツにコンパイルし、ソース・フォームのソースとターゲット・フォームのソースをコンパイルする必要があります。
ソース・フォームを実行します。ターゲット・フォームは自動的に表示されます。
ソース・フォームのソース
このソースをコピーしてフォームに貼り付け、コンパイルして実行してください。
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(*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
 
[ |../../index.htm#lansa/l4wdev06_0700.htm]

  • No labels