Page History
以下の例では、フォームはREFEX1とREFEX2です。
メイン・フォーム
...
FUNCTION options(*DIRECT)
BEGIN_
...
COM role(*
...
EXTENDS #PRIM_FORM)
...
CAPTION('
...
Main Form')
...
HEIGHT(290)
...
LEFT(318)
...
TOP(128)
...
WIDTH(386)
...
* When you use REFERENCE(*DYNAMIC)
...
you tell the application that an instance of the form
* #REFEX2 (referred to as #AddressForm) will be created when you get round to it, not when this main form is loaded.
* This means that before you can use this new reference, you have to create it using a SET_REF command:
DEFINE_COM class(#REFEX2) name(#AddressForm) reference(*dynamic)
DEFINE_
...
COM class(#PRIM_PHBN)
...
name(#PHBN_ADDR)
...
CAPTION('
...
Show Address Form')
...
DISPLAYPOSITION(1)
...
LEFT(248)
...
PARENT(#COM_OWNER)
...
TABPOSITION(1)
...
TOP(16)
...
WIDTH(112)
DEFINE_
...
COM class(#PRIM_STBR)
...
name(#STBR_1)
...
DISPLAYPOSITION(2)
...
HEIGHT(24)
...
LEFT(0)
...
MESSAGEPOSITION(1)
...
PARENT(#COM_OWNER)
...
TABPOSITION(2)
...
TABSTOP(False)
...
TOP(239)
...
WIDTH(378)
DEFINE_
...
COM class(#EMPNO.Visual)
...
name(#EMPNO)
...
DISPLAYPOSITION(3)
...
HEIGHT(18)
...
LEFT(22)
...
MARGINLEFT(100)
...
PARENT(#COM_OWNER)
...
TABPOSITION(3)
...
TOP(21)
...
WIDTH(163)
DEFINE_
...
COM class(#PRIM_GRID)
...
name(#GRID_1)
...
DISPLAYPOSITION(4)
...
HEIGHT(179)
...
LEFT(24)
...
NOTIFICATIONSTYLE(Default)
...
PARENT(#COM_OWNER)
...
SHOWBUTTONSELECTION(False)
...
SHOWSELECTIONHIGHLIGHT(True)
...
TABPOSITION(4)
...
TOP(48)
...
WIDTH(337)
DEFINE_
...
COM class(#PRIM_GDCL)
...
name(#GDCL_1)
...
DISPLAYPOSITION(1)
...
PARENT(#GRID_1)
...
SOURCE(#EMPNO)
...
WIDTH(35)
DEFINE_COM class(#PRIM_GDCL) name(#GDCL_2) DISPLAYPOSITION(2) PARENT(#GRID_1) SOURCE(#SURNAME) WIDTH(27) WIDTHTYPE(Remainder)
...
EVTROUTINE handling(#com_owner.Initialize)
...
SELECT fields(#GRID_1)
...
from_file(PSLMST)
ADD_
...
ENTRY to_list(#GRID_1)
ENDSELECT
ENDROUTINE
...
EVTROUTINE handling(#PHBN_ADDR.Click)
...
* Create an instance of the AddressForm. After this statement you will be in basically the same position as you would have been had
* you simply used a normal DEFINE_COM without the dynamic reference:
SET_REF com(#AddressForm) to(*create_as #refex2)
...
* Now that an instance of the AddressForm exists, you can run the methods in it. You invoke u_GetDetails passing in the employee
* number and surname:
INVOKE method(#AddressForm.u_GetDetails)
...
U_WITHEMPNO(#EMPNO)
...
U_WITHSURNAME(#SURNAME)
ENDROUTINE
...
* This event signalled from the AddressForm tells this form that it has closed:
EVTROUTINE handling(#AddressForm.u_Detail_form_closed)
...
* When the instance of the AddressForm closes, remove it from memory by setting the reference to it to*NULL.
...
* This says remove anything related to AddressForm from memory. In other words the form itself, the button
* and the fields will all disappear from the system:
SET_REF com(#AddressForm) to(*null)
ENDROUTINE
END_COM
アドレスフォーム
...
FUNCTION options(*DIRECT)
BEGIN_
...
COM role(*
...
EXTENDS #PRIM_FORM)
...
CAPTION('
...
Address Form')
...
HEIGHT(211)
...
LEFT(320)
...
TOP(112)
...
WIDTH(405)
DEFINE_
...
COM class(#PRIM_STBR)
...
name(#STBR_1)
...
DISPLAYPOSITION(1)
...
HEIGHT(24)
...
LEFT(0)
...
MESSAGEPOSITION(1)
...
PARENT(#COM_OWNER)
...
TABPOSITION(1)
...
TABSTOP(False)
...
TOP(160)
...
WIDTH(397)
DEFINE_
...
COM class(#EMPNO.Visual)
...
name(#EMPNO)
...
DISPLAYPOSITION(2)
...
HEIGHT(18)
...
LEFT(18)
...
PARENT(#COM_OWNER)
...
TABPOSITION(2)
...
TOP(40)
...
WIDTH(215)
DEFINE_
...
COM class(#SURNAME.Visual)
...
name(#SURNAME)
...
DISPLAYPOSITION(3)
...
HEIGHT(19)
...
LEFT(16)
...
PARENT(#COM_OWNER)
...
TABPOSITION(3)
...
TOP(20)
...
WIDTH(324)
DEFINE_
...
COM class(#PRIM_PHBN)
...
name(#PHBN_1)
...
CAPTION('Close')
...
DISPLAYPOSITION(4)
...
LEFT(304)
...
PARENT(#COM_OWNER)
...
TABPOSITION(4)
...
TOP(128)
DEFINE_
...
COM class(#ADDRESS1.Visual)
...
name(#ADDRESS1)
...
DISPLAYPOSITION(5)
...
HEIGHT(19)
...
LEFT(16)
...
PARENT(#COM_OWNER)
...
TABPOSITION(5)
...
TOP(72)
...
WIDTH(363)
DEFINE_
...
COM class(#ADDRESS2.Visual)
...
name(#ADDRESS2)
...
DISPLAYPOSITION(6)
...
HEIGHT(19)
...
LEFT(16)
...
PARENT(#COM_OWNER)
...
TABPOSITION(6)
...
TOP(88)
...
WIDTH(363)
DEFINE_COM class(#ADDRESS3.Visual) name(#ADDRESS3) DISPLAYPOSITION(7) HEIGHT(19) LEFT(16) PARENT(#COM_OWNER) TABPOSITION(7) TOP(104) WIDTH(363)
...
* Define an event which will tell this form has closed
DEFINE_EVT name(u_Detail_form_closed)
...
* Published method which will get the #empno and #surname values from the main form, retreive the address information
* from the PSLMST file and then show this form
MTHROUTINE name(u_GetDetails)
DEFINE_
...
MAP for(*INPUT)
...
class(#EMPNO)
...
name(#u_WithEMPNO)
DEFINE_
...
MAP for(*INPUT)
...
class(#SURNAME)
...
name(#u_WithSURNAME)
...
CHANGE field(#EMPNO)
...
to('#U_WITHEMPNO.VALUE')
CHANGE field(#SURNAME) to('#U_WITHSURNAME.VALUE')
...
IF cond('
...
#EMPNO *
...
NE *BLANKS')
...
FETCH fields(#ADDRESS1 #ADDRESS2 #ADDRESS3) from_file(PSLMST)
...
with_key(#EMPNO)
ENDIF
...
INVOKE method(#COM_OWNER.ShowForm)
ENDROUTINE
...
EVTROUTINE handling(#PHBN_1.Click)
...
INVOKE method(#com_owner.closeform)
ENDROUTINE
...
EVTROUTINE handling(#COM_OWNER.Closing)
...
options(*
...
NOCLEARMESSAGES *NOCLEARERRORS)
...
* signal an event to the parent form telling that this form has closed
SIGNAL event(u_detail_form_closed)
ENDROUTINE
END_
...
COM