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

Compare with Current View Page History

Version 1 Next »

&<img src="../resources/images/opentocr.png" title="Open Contents list" border="0"&>
You are here:

Create an Ancestor Form

To see how forms can inherit from each other, create a form to be used as the ancestor for other forms. The ancestor form will have a File menu and a status bar:

You can copy the Source for the Ancestor Form and paste it to a form and compile it.  In this example you call the ancestor form EOEXAM01.
When EOEXAM01 is run, you can see it has a File menu with three options and a status bar showing the current user, date and time.

The form contains a timer which updates the time every five seconds.
It also contains event routines for the File menu options which display message boxes. For example, when the Exit option is selected the message box asks to confirm the action:

Source for the Ancestor Form
Source for the Ancestor Form
***************************************************
*                                                 

  • COMPONENT:  STD_FORM                            
    *                                                 
    ***************************************************
    FUNCTION OPTIONS(*DIRECT)
    BEGIN_COM LEFT(340) MENUBAR(#MBAR_1) TOP(132) VISUALSTYLE(#VS_NORM)
    DEFINE_COM CLASS(#PRIM_STBR) NAME(#STBR_1) DISPLAYPOSITION(1) HEIGHT(24) LEFT(0) MESSAGEPOSITION(1) PARENT(#COM_OWNER) TABPOSITION(1) TABSTOP(False) TOP(270) WIDTH(492)
    DEFINE_COM CLASS(#USER.Visual) NAME(#USER) DISPLAYPOSITION(1) HEIGHT(18) LEFT(285) MARGINLEFT(0) PARENT(#STBR_1) READONLY(True) TABPOSITION(1) TABSTOP(False) TOP(4) WIDTH(71)
    DEFINE_COM CLASS(#DATE.Visual) NAME(#DATE) DISPLAYPOSITION(2) HEIGHT(18) LEFT(358) MARGINLEFT(0) PARENT(#STBR_1) READONLY(True) TABPOSITION(2) TABSTOP(False) TOP(4) WIDTH(61)
    DEFINE_COM CLASS(#TIME.Visual) NAME(#TIME) DISPLAYPOSITION(3) HEIGHT(18) LEFT(421) MARGINLEFT(0) PARENT(#STBR_1) READONLY(True) TABPOSITION(3) TABSTOP(False) TOP(4) WIDTH(54)
    DEFINE_COM CLASS(#PRIM_TIMR) NAME(#TIMER) INTERVAL(5000)
    DEFINE_COM CLASS(#PRIM_MBAR) NAME(#MBAR_1) PARENT(#COM_OWNER)
    DEFINE_COM CLASS(#PRIM_MITM) NAME(#MITM_1) CAPTION('File') DISPLAYPOSITION(1) PARENT(#MBAR_1)
    DEFINE_COM CLASS(#PRIM_SMNU) NAME(#SMNU_1) PARENT(#MITM_1)
    DEFINE_COM CLASS(#PRIM_MITM) NAME(#MITM_FILE_OPEN) CAPTION('Open') DISPLAYPOSITION(1) PARENT(#SMNU_1)
    DEFINE_COM CLASS(#PRIM_MITM) NAME(#MITM_FILE_CLOSE) CAPTION('Close') DISPLAYPOSITION(2) PARENT(#SMNU_1)
    DEFINE_COM CLASS(#PRIM_MITM) NAME(#MITM_EXIT) CAPTION('Exit') DISPLAYPOSITION(3) PARENT(#SMNU_1)
  • Initialize the details on th status bar
    EVTROUTINE HANDLING(#Com_Owner.Initialize) OPTIONS(*NOCLEARMESSAGES *NOCLEARERRORS)
    Change #User *User
    Change #Date *Date
    Change #Time *Time
    ENDROUTINE
  • Update the time on the status bar every 5 seconds (5000 milliseconds)
    EVTROUTINE HANDLING(#TIMER.Tick) OPTIONS(*NOCLEARMESSAGES *NOCLEARERRORS)
    Change #Time *Time
    ENDROUTINE
  • Handle Exit request by attempting to close the form
    EVTROUTINE HANDLING(#MITM_EXIT.Click) OPTIONS(*NOCLEARMESSAGES *NOCLEARERRORS)
    Invoke #Com_Self.CloseForm
    ENDROUTINE
  • Handle file open menu item by invoking the "HandleFileOpen" method
    EVTROUTINE HANDLING(#MITM_File_Open.Click) OPTIONS(*NOCLEARMESSAGES *NOCLEARERRORS)
    Invoke #Com_Self.HandleFileOpen
    ENDROUTINE
  • Handle file close menu item by invoking the "HandleFileClose" method
    EVTROUTINE HANDLING(#MITM_File_Close.Click) OPTIONS(*NOCLEARMESSAGES *NOCLEARERRORS)
    Invoke #Com_Self.HandleFileClose
    ENDROUTINE
  • Handle a request to close the form by getting a confirmation
    EVTROUTINE HANDLING(#Com_Owner.Closing) OPTIONS(*NOCLEARMESSAGES *NOCLEARERRORS) Action(#AfterCloseAction)
    Use Message_Box_Show (okCancel Ok Info #Com_Self.Name 'Are you sure you want to close the form?') (#Std_Obj)
    If '#Std_Obj = Cancel'
    Set #AfterCloseAction Value(None)
    Endif
    ENDROUTINE
  • Default method "HandleFileOpen". Typically this is redefined by a descendant
    Mthroutine HandleFileOpen
    Use Message_Box_Show (ok Ok Info #Com_Owner.Name 'Ancestor HandleFileOpen method invoked') (#Std_Obj)
    Endroutine
  • Default method "HandleFileClose". Typically this is redefined by a descendant
    Mthroutine HandleFileClose
    Use Message_Box_Show (ok Ok Info #Com_Owner.Name 'Ancestor HandleFileClose method invoked') (#Std_Obj)
    Endroutine
    END_COM
    &<img src="../resources/images/opentoc-dark.png" title="Open Contents List" border="0"&>
  • No labels