| Name | Initial value |
|---|---|
| Caption | "" |
| ToolTipText | "" |
| lproportionalresize | .F. |
| Name | Initial value |
|---|---|
| AutoSize | .F. |
| Caption | "" |
| Style | 0 |
| ToolTipText | "" |
| lproportionalresize | .F. |
| Name | Initial value | Comment |
|---|---|---|
| ^afavorites[1,0] | .f. | Array for the favorites. |
| ^aformlist[1,1] | .f. | List of all forms opened with the runform method |
| ^alastform[1,2] | .f. | Internally used array to store the forms for the recently used file list. |
| ^atoolbar[1,1] | .f. | Internally used array to store different toolbars |
| ^avfptoolbar[1,1] | .f. | Internally used array to store different VFP toolbars |
| cascorderrgb | RGB(255,255,0) | Color to be used in the grid to highlight the column header for displaying "ascending" order. |
| ccurrentrowbackcolor | .f. | No more used. |
| ccurrentrowforecolor | .f. | No more used. |
| cdatadir | .f. | Specifies the directory containing the current database |
| cdateformat | BRITISH | Used in cfoxapp.onsetenv to set the desired date format |
| cdescorderrgb | RGB(255,0,0) | Color to be used in the grid to highlight the column header for displaying "descending" order. |
| cedt_date | edt_date | Name of the field in any table to be automatically used to store the "last edit" date. If no such field exists, nothing happens. See also: cedt_usr, cedt_date, cins_usr, cins_date |
| cedt_usr | edt_usr | Name of the field in any table to be automatically used to store the "user" who last modified this record. If no such field exists, nothing happens. See also: cedt_usr, cedt_date, cins_usr, cins_date |
| cexcludefiles | .f. | Specifies the list of the filename to be excluded from the Database Tools dialog |
| cexportdir | .f. | Current export directory. |
| chelpfile | .f. | Specifies the name of the help file to be used. IMPORTANT: When chm help is used please indicate also the file extension. Default file extension in VFP 6.0 is hlp. |
| cimportdir | .f. | Default import directory. |
| cins_date | ins_date | Name of the field in any table to be automatically used to store the "date" when this record has been inserted. If no such field exists, nothing happens. See also: cedt_usr, cedt_date, cins_usr, cins_date |
| cins_usr | ins_usr | Name of the field in any table to be automatically used to store the "user" who inserted this record. If no such field exists, nothing happens. See also: cedt_usr, cedt_date, cins_usr, cins_date |
| cintrobitmap | BITMAP\INTRO.BMP | Bitmap to be used for the intro screen (also called splash screen) |
| cintroform | CSplashDialog | Name of the intro form (also called splash screen) |
| clangid | ENG | Country language: FRE,GER,ITA,ESP,ENG,USR |
| cloginform | VFXLOGIN | Specifies the name of the login form to be used. Don't include the extension. The extension .scx is assumed automatically. |
| cmaindatabase | DATABASE | Specifies the name of the main database |
| cmainform | Specifies the name of the main form to be displayed when the application starts. | |
| cmainicon | BITMAP\MAIN.ICO | Icon to be used used for the main window. |
| cmainmenu | VFXMENU.MPR | Main menu name including extension. |
| cmaintitle | Untitled | Specifies the main window caption |
| cmaintoolbar | COfficeBar | Specifies the main toolbar to be used. Out of the box the following two main toolbars are available: cofficebar and cnavigatorbar. |
| coldtitle | .f. | Internally used old title of the main window |
| coriginalpath | .f. | Internal Use. Store the orginal Application's Path |
| creportdir | .f. | Specifies the path to the external reportfiles (*.frx). |
| cupdatedir | .f. | Internally used to store the update directory |
| cvfxdir | .f. | Specifies the path to the directory containing the free tables vfx*.dbf. |
| cvfxpath | vfxpath.dbf | Specifies the filename of the table containing the pathes to the client directories. Defaults to vfxpath.dbf |
| especially | .f. | usefull in C/ |
| especially | .f. | usefull in C/S |
| filemnuname | File | Name of the file menu pad. |
| filemnuoffset | 7 | Offset within the file menu popup up to the first recently used form entry |
| goprogram.olastformcreated. | .f. | |
| lallowdeletechilddata | .F. | Allow to delete child data in onetomany forms even if the deletion of parent records is not allowed. |
| lautologin | .F. | Enables automatic login when the app starts assuming that user are already authenticated in the LAN. |
| lautorefreshonsave | .f. | When set to .t. all not yet visited pages will automatically be refreshed before the form valid event. Default is .f. |
| lcanclose | .f. | Defines whether the main window can be closed using the close button or not. |
| lcentury | .f. | Specifies if the SET CENTURY is on or off |
| lclearidxmsg | .T. | Specifies whether the ClearAllIDX Method displayes a warning message |
| ldebugmode | .f. | Debug mode setting. Set to .t. when you want enable debug mode. |
| ldisableformresize | .f. | Set to .t. to globally disable the resize of any forms |
| lloginfirst | .T. | Internally used property during the login procedure. |
| lnoclearidxondelete | .f. | By design, VFX clears IDX indexes when edit, insert or delete operations occur to prevent VFP from crashing since IDX files cannot be open when transactions are used! Use this property to disable this behaviour when deleting, |
| lnoclearidxonedit | .f. | By design, VFX clears IDX indexes when edit, insert or delete operations occur to prevent VFP from crashing since IDX files cannot be open when transactions are used! Use this property to disable this behaviour when editing, especially |
| lnoclearidxoninsert | .f. | By design, VFX clears IDX indexes when edit, insert or delete operations occur to prevent VFP from crashing since IDX files cannot be open when transactions are used! Use this property to disable this behaviour when inserting, |
| lopendialog | .f. | Property is .t. when open dialog is active |
| lrelogonquit | .f. | Defines the behaviour when an unsuccessfull relogon occurrs during the running application. This property set to .t. quits the application during an unsuccessfull relogon attempt. |
| lremakeidxafterclear | .f. | Can be used to recreate temporary index files when they have been deleted due tu a delete, undo or save operation. When set to .t., the cleared IDX will be recreated automatically. See also lnoclearidxonedit, ...insert ...delete. |
| lsavedatabeforeupdate | .T. | Defines whether all data should be copied into a backup directory with generic name before a client site data update process starts. |
| lshowintroform | .T. | Defines whether the intro form (also called splash screen) should be displayed. |
| luseactivedesktop | .f. | Defines whether to use the ActiveDesktop class in VFXMAIN to enable the VFX active desktop user interface. |
| luseagent | .f. | Defines whether to use the Agent Class at startup in VFXMAIN |
| lusedesktopcolor | .f. | Specifies if we use the windows desktop color as background for the main window |
| luseenterastab | .f. | In ccheckbox enter moves the focus to the next object. |
| luserlogged | .f. | Specifies if the user is already logged. Used internally during logon procedure |
| lusewinusername | .T. | Specifies if VFX will retrieve the current Win 95, Win NT user in the application login procedure |
| naddusertocaption | 0 | Adds the username to the application caption: 0 - none, 1 - username, 2 - name |
| nasktosave | 0 | Always ask prior any save operation? 0 - Nothing, 1 - Enabled, 2 - Disabled |
| nautoeditmode | 1 | Defines whhether the form automatically switches to the edit mode, when the user starts typing into any control. 0 - Use form setting, 1- Force to .t., 2 - Force to .f. |
| ncentury | .f. | Numeric value of the standard century: 20 |
| ndonthidelistpage | 0 | Defines whether the list page should not be hidden when editing. 0 means "use form property ldonthidelistpage", 1 means .t. for all forms, and 2 means .f. for all forms |
| nenablehook | 0 | Specifies if the hooks are enabled. 0 means "use form setting", 1 means .t. for all forms, and 2 means .f. for all forms |
| nenteriseditingrid | 0 | Specifies if the OnKeyEnter() calls the OnEdit() Method in a CGrid Object.0 - Use form setting, 1 - True for all forms, 2 - False for all forms |
| nerror2005counter | 0 | Counter for retries after error 2005 occurred. See onerror in VFXFUNC.PRG |
| nformcount | 0 | Number of active forms opened using the runform method. |
| nhidewhenempty | 0 | Hide the edit pageframe when no records exist? |
| nidxcount | 0 | Specifies whether the application has currently open any temporary IDX files |
| nlastfilecount | 4 | Number of recently used file list to be made available. |
| nlastinuseerror | 0 | Property to customize the error handling behaviour. See also onerror() in VFXFUNC.PRG |
| nlastwinleft | 0 | Internally used property to store the position of the last opened form. |
| nlastwintop | 0 | Internally used property to store the position of the last opened form. |
| nonsearchusegrid | 0 | Defines whether the fields available on the grid define which fields are available for searching. 0=use form setting, 1=use fields from grid in all forms, 2=use all fields in all forms |
| nresizefont | 1 | Resize also the font. 0=use form setting, 1=yes in all forms, 2=no in all forms |
| nrollover | .f. | Value to be used as rollover (Y2K) . See VFP help SET CENTURY TO for explanation! |
| nshowgridline | .f. | Sho grid lines. 0=use form setting, 1=yes in all forms, 2=no in all forms |
| nshowgridordertype | 1 | Specifies how the grid order should be showed: 0 - None, 1 - FontUnderline, 2 - Color |
| nwinmnucount | 0 | Internally used property. |
| oconnmgr | .f. | Reference to the connection manager object. Preferrably used in VFXMAIN.PRG like this: goProgram.oConnMgr.setConnectionName("conXY"). See also VFXMAIN.PRG template code. |
| ointroform | .NULL. | Object reference to the intro form (also called splash screen) |
| olastformcreated | .NULL. | A Form object reference to the last form created using the runform command. Very usefull to reference the just created form to work with any property of this form like goprogram.olastformcreated.anypropertyormethod |
| usefull | .f. | in C/S! |
| winmnuname | Window | Menu pad name fopr the window menu |
| winmnuoffset | 1 | Offset within the menu popup in the windows menu |
LPARAMETERS tcformname, tccaption
LOCAL lnitem, lcexact
IF EMPTY(tcformname) .OR. EMPTY(tccaption)
RETURN .F.
ENDIF
IF EMPTY(THIS.cmainmenu)
RETURN .F.
ENDIF
lcexact = SET('EXACT')
SET EXACT ON
lnitem = ASCAN(THIS.alastform, tcformname)
IF lnitem <> 0
=ADEL(THIS.alastform, ASUBSCRIPT(THIS.alastform, lnitem, 1))
ENDIF
=AINS(THIS.alastform, 1)
THIS.alastform[1,1] = tcformname
THIS.alastform[1,2] = tccaption
THIS.viewlastfilemenu()
SET EXACT &lcexact
LPARAMETER tcclassname
LOCAL lnitem, lnstart, lnend, llnew
IF EMPTY(tcclassname)
RETURN .NULL.
ENDIF
IF TYPE("this.aToolBar[1,1]") <> "O"
DIMENSION THIS.atoolbar[1,5]
lnend = 0
ELSE
lnend = ALEN(THIS.atoolbar,1)
ENDIF
lnstart = 1
llnew = .T.
FOR lnitem = lnstart TO lnend
IF TYPE("this.aToolBar[lnItem,1]") = "O"
IF UPPER(THIS.atoolbar[lnItem,3]) == UPPER(tcclassname)
llnew = .F.
EXIT
ENDIF
ENDIF
NEXT
IF llnew
LOCAL oobject
oobject = CREATEOBJECT(tcclassname)
lnitem = lnend + 1
DIMENSION THIS.atoolbar[lnItem,5]
THIS.atoolbar[lnItem,5] = 1 && Instance Count
THIS.atoolbar[lnItem,1] = oobject
THIS.atoolbar[lnItem,2] = oobject.CAPTION
THIS.atoolbar[lnItem,3] = tcclassname
THIS.atoolbar[lnItem,4] = .T. && Visible Flag
ELSE
THIS.atoolbar[lnItem,5] = THIS.atoolbar[lnItem,5] + 1
ENDIF
RETURN THIS.atoolbar[lnItem,1]
LOCAL lnindex, lnmaxfield, lcfield, lcpublicname, lcoldarea
lcoldarea = ALIAS()
IF ADIR(ladummy,goprogram.cvfxdir+"vfxsys.dbf")#1
IF ADIR(ladummy,goprogram.cdatadir+"\vfxsys.dbf")#1
* Table not found. Create new table.
THIS.createtable(goprogram.cvfxdir+"vfxsys")
ENDIF
ENDIF
USE vfxsys IN 0 AGAIN SHARED ALIAS SYSTEM
SELECT SYSTEM
LOCATE
lnmaxfield = FCOUNT()
FOR lnindex = 1 TO lnmaxfield
lcfield = FIELD(lnindex)
lcpublicname = "gs_" + lcfield
PUBLIC (lcpublicname)
&lcpublicname = EVALUATE(lcfield)
NEXT
USE IN SYSTEM
IF !EMPTY(lcoldarea)
SELECT (lcoldarea)
ENDIF
IF VARTYPE(gu_lastfile)="N"
this.nlastfilecount=gu_lastfile
ENDIF
DIMENSION THIS.alastform[MAX(1,this.nlastfilecount),2]
LOCAL lnI
FOR lnI=1 TO this.nlastfilecount
THIS.alastform[lnI,1] = getarg(gu_lastsel, 2*lnI-1)
THIS.alastform[lnI,2] = getarg(gu_lastsel, 2*lnI)
ENDFOR
DO CASE
CASE THIS.naddusertocaption=1
_SCREEN.CAPTION=cap_application_title+" - "+TRIM(gu_user)
CASE THIS.naddusertocaption=2
IF !EMPTY(gu_user_name)
_SCREEN.CAPTION=cap_application_title+" - "+TRIM(gu_user_name)
ENDIF
ENDCASE
restorefavorites()
LOCAL lnform, loform
FOR lnform = _SCREEN.FORMCOUNT TO 1 STEP - 1
IF TYPE("_screen.Forms[lnForm]")="O" AND !ISNULL(_SCREEN.FORMS[lnForm])
IF !(UPPER(_SCREEN.FORMS[lnForm].CLASS) $ "CVFXTOOLBAR;MEMO;GENERAL";
OR UPPER(_SCREEN.FORMS[lnForm].BASECLASS) $ "TOOLBAR")
IF pemstatus(_SCREEN.FORMS[lnForm],'QueryUnload',5)
IF _SCREEN.FORMS[lnForm].QUERYUNLOAD()
_SCREEN.FORMS[lnForm].VISIBLE = .F.
_SCREEN.FORMS[lnForm].RELEASE()
ELSE
RETURN .F.
ENDIF
ELSE
loform = _SCREEN.FORMS[lnForm]
RELEASE loform
ENDIF
ENDIF
ENDIF
ENDFOR
THIS.removetoolbar("[ALL]")
_SCREEN.CAPTION = THIS.coldtitle
THIS.lcanclose = .T.
_SCREEN.MOUSEPOINTER = mouse_default
CLEAR EVENTS
IF !EMPTY(THIS.cmaintoolbar)
THIS.addtoolbar(THIS.cmaintoolbar)
ENDIF
LOCAL luretcode
luretcode = .F.
THIS.releaseintroform()
_SCREEN.WINDOWSTATE=2
IF THIS.onprelogin()
IF !EMPTY(THIS.cloginform)
IF THIS.ldebugmode
KEYBOARD CHR(13)
ENDIF
DO FORM (THIS.cloginform)
ENDIF
IF THIS.lloginfirst
luretcode = THIS.onpostlogin()
ENDIF
ENDIF
RETURN luretcode
LOCAL lnindex, lnmaxfield, lcfield, lcpublicname, lcoldarea
lcoldarea = ALIAS()
IF VARTYPE(GU_User)="U"
RETURN .F.
ENDIF
savefavorites()
IF ADIR(ladummy,goprogram.cvfxdir+"vfxusr.dbf")#1
IF ADIR(ladummy,goprogram.cdatadir+"\vfxusr.dbf")#1
* Table not found. Create new table.
THIS.createtable(goprogram.cvfxdir+"vfxusr")
ENDIF
ENDIF
USE vfxusr IN 0 AGAIN SHARED ALIAS USER ORDER TAG USER
SELECT USER
IF SEEK(UPPER(m.gu_user))
IF VARTYPE(gu_LastSel) = "C"
gu_lastsel = ""
LOCAL lnI
FOR lnI=1 TO this.nlastfilecount
gu_LastSel = gu_LastSel + This.aLastForm[lnI,1]+";"+This.aLastForm[lnI,2] + ;
iif(lnI = This.nLastFileCount, "", ";")
ENDFOR
ENDIF
lnmaxfield = FCOUNT()
FOR lnindex = 1 TO lnmaxfield
lcfield = FIELD(lnindex)
lcpublicname = "m.gu_" + lcfield
IF LOWER(lcpublicname)=="m.gu_lastfile"
gu_lastfile=gu_lastfile-4
ENDIF
IF RLOCK()
REPLACE (lcfield) WITH EVAL(lcpublicname)
ENDIF
UNLOCK
IF !THIS.luserlogged
RELEASE (lcpublicname)
ENDIF
NEXT
ENDIF
USE IN USER
IF !EMPTY(lcoldarea)
SELECT (lcoldarea)
ENDIF
LPARAMETERS tcexcl
LOCAL lcerror, lok, _vfx_error, laDummy[1]
lok = .T.
lcerror = ON('ERROR')
_vfx_error = .F.
ON ERROR _vfx_error = .T.
IF THIS.ldebugmode
SET ESCAPE ON
ON SHUTDOWN
ON ERROR
ENDIF
IF !EMPTY(THIS.cmaindatabase)
IF m.tcexcl
OPEN DATABASE (THIS.cdatadir+"\"+THIS.cmaindatabase) EXCLUSIVE
ELSE
OPEN DATABASE (THIS.cdatadir+"\"+THIS.cmaindatabase) SHARED
ENDIF
SET DATABASE TO (THIS.cdatadir+"\"+THIS.cmaindatabase)
ENDIF
IF _vfx_error
CLOSE DATA ALL
ENDIF
RELEASE _vfx_error
lok = !EMPTY(DBC())
IF !lok
=MESSAGEBOX(msg_database_not_found+CHR(13)+;
THIS.cdatadir+"\"+THIS.cmaindatabase,0+16,msg_fatal_error)
ELSE
IF ADIR(ladummy,goprogram.cvfxdir+"vfxusr.dbf")#1
IF ADIR(ladummy,goprogram.cdatadir+"\vfxusr.dbf")#1
* Table not found. Create new table.
THIS.createtable(goprogram.cvfxdir+"vfxusr")
ENDIF
ENDIF
IF ADIR(ladummy,THIS.cvfxdir+"vfxusr.dbf")#1
IF ADIR(ladummy,THIS.cdatadir+"\vfxusr.dbf")#1
THIS.createtable(THIS.cvfxdir+"vfxusr")
ENDIF
ENDIF
USE vfxusr SHARED AGAIN ORDER TAG USER
IF RECCOUNT() = 0
INSERT INTO vfxusr (USER, userlevel, user_name) ;
VALUE ("ADMIN", 1, "Administrator")
ENDIF
IF ADIR(ladummy,THIS.cvfxdir+"vfxsys.dbf")#1
IF ADIR(ladummy,THIS.cdatadir+"\vfxsys.dbf")#1
THIS.createtable(THIS.cvfxdir+"vfxsys")
ENDIF
ENDIF
USE vfxsys SHARED AGAIN
IF RECCOUNT() = 0
INSERT INTO vfxsys (magic_id) VALUE (_vfx_version)
ENDIF
USE
ENDIF
ON ERROR &lcerror
RETURN lok
IF THIS.lshowintroform
IF !EMPTY(THIS.cintroform)
THIS.ointroform = CREATEOBJECT(THIS.cintroform, THIS.cintrobitmap)
IF TYPE("this.oIntroForm")="O"
THIS.ointroform.SHOW()
=INKEY(3,'HM')
ENDIF
ENDIF
ENDIF
LOCAL lnitem, lnindex, lccommand, lnstart, lnend, k
IF EMPTY(THIS.cmainmenu)
RETURN .F.
ENDIF
lnstart = THIS.winmnuoffset+1
lnend = THIS.winmnuoffset+1+THIS.nwinmnucount
FOR lnitem = lnstart TO lnend
RELEASE BAR lnitem OF (THIS.winmnuname)
NEXT
IF THIS.nwinmnucount > 0
*-- Add separator
DEFINE BAR THIS.winmnuoffset+1 OF (THIS.winmnuname) PROMPT "\-"
lnitem = THIS.winmnuoffset+1
lnstart = 1
lnend = THIS.nformcount
k = 0
FOR lnindex = lnstart TO lnend
IF TYPE("this.aFormList[lnIndex,3]") = "O" AND !ISNULL(THIS.aformlist[lnIndex,3])
IF THIS.aformlist[lnIndex,3].lputinwindowmenu
lnitem = lnitem + 1
k = k + 1
DEFINE BAR lnitem OF (THIS.winmnuname) ;
PROMPT "\<"+ALLTRIM(STR(k))+ " " + THIS.aformlist[lnIndex,2]
lccommand = "ON SELECTION BAR " + STR(lnitem) + " OF "+THIS.winmnuname+;
" activate window '"+ALLTRIM(THIS.aformlist[lnIndex,1])+"'"
&lccommand
ENDIF
ENDIF
ENDFOR
IF k = 0
RELEASE BAR THIS.winmnuoffset+1 OF (THIS.winmnuname)
ENDIF
ENDIF
IF TYPE("this.oIntroForm")="O" AND !ISNULL(THIS.ointroform)
THIS.ointroform.RELEASE()
THIS.ointroform = .NULL.
ENDIF
LPARAMETER tcclassname
LOCAL lnitem, lnstart, lnend, oobject
IF EMPTY(tcclassname)
RETURN .F.
ENDIF
IF TYPE("this.aToolBar[1,1]") <> "O"
RETURN .F.
ENDIF
lnstart = 1
lnend = ALEN(THIS.atoolbar,1)
IF UPPER(tcclassname) == "[ALL]"
FOR lnitem = lnstart TO lnend
IF TYPE("this.aToolBar[lnItem,1]") = "O" AND !ISNUL(THIS.atoolbar[lnItem,1])
THIS.atoolbar[lnItem,1].RELEASE()
THIS.atoolbar[lnItem,1] = .NULL.
ENDIF
NEXT
DIMENSION THIS.atoolbar[1,5]
RETURN .T.
ENDIF
LOCAL lremoveit
lremoveit = .F.
FOR lnitem = lnstart TO lnend
IF TYPE("this.aToolBar[lnItem,1]") = "O" AND !ISNUL(THIS.atoolbar[lnItem,1])
IF UPPER(THIS.atoolbar[lnItem,3]) == UPPER(tcclassname)
IF THIS.atoolbar[lnItem,5] = 1
THIS.atoolbar[lnItem,1].RELEASE()
THIS.atoolbar[lnItem,1] = .NULL.
THIS.atoolbar[lnItem,2] = .F.
THIS.atoolbar[lnItem,3] = .F.
THIS.atoolbar[lnItem,4] = .F.
THIS.atoolbar[lnItem,5] = .F.
=ADEL(THIS.atoolbar,AELEMENT(THIS.atoolbar,lnitem))
lremoveit = .T.
ELSE
THIS.atoolbar[lnItem,5] = THIS.atoolbar[lnItem,5]- 1
ENDIF
ENDIF
ENDIF
NEXT
IF lremoveit AND lnend > 1
DIMENSION THIS.atoolbar[lnEnd-1,5]
ENDIF
LPARAMETERS tcformname, tcargument
LOCAL loform
tcformname = ALLTRIM(UPPER(tcformname))
FOR j = 1 TO _SCREEN.FORMCOUNT
IF TYPE("_screen.Forms[j]._VFXClassName")="C" AND TYPE("_screen.Forms[j].cSCXName")="C"
IF _SCREEN.FORMS[j].cscxname == tcformname+".SCX"
IF !_SCREEN.FORMS[j].lmultiinstance
ACTI WIND (_SCREEN.FORMS[j].NAME)
lmultiinstance = .F.
THIS.olastformcreated = _SCREEN.FORMS[j]
RETURN .T.
ENDIF
ENDIF
ENDIF
NEXT
IF THIS.ldebugmode
SET ESCAPE ON
ON SHUTDOWN
ON ERROR
ENDIF
IF VARTYPE(tcArgument) # "O" AND EMPTY(tcargument)
DO FORM (tcformname) NAME loform
ELSE
DO FORM (tcformname) WITH tcargument NAME loform
ENDIF
IF THIS.ldebugmode
SET ESCAPE ON
ON SHUTDOWN
ON ERROR
ENDIF
THIS.olastformcreated = loform
THIS.showtoolbar()
IF !EMPTY(THIS.cmainmenu)
DO (THIS.cmainmenu)
ENDIF
LPARAMETERS tlshowit
IF TYPE("this.aToolBar[1,1]")="O" AND !ISNULL(THIS.atoolbar[1,1])
THIS.atoolbar[1,1].REFRESH()
IF tlshowit
THIS.atoolbar[1,1].SHOW()
ENDIF
ENDIF
IF THIS.ldebugmode
SET ESCAPE ON
ON SHUTDOWN
ON ERROR
ELSE
SET ESCAPE OFF
ON SHUTDOWN DO onshutdown
ON ERROR DO onerror WITH ERROR(), PROGRAM(), LINENO(), MESSAGE()
ENDIF
THIS.viewlastfilemenu()
THIS.onsettoolbar()
THIS.showtoolbar(.T.)
THIS.drawbackground()
IF !EMPTY(THIS.cmainicon)
_SCREEN.ICON = THIS.cmainicon
ENDIF
_SCREEN.MOUSEPOINTER = mouse_default
THIS.startmainform()
IF !THIS.luserlogged
THIS.luserlogged = .T.
READ EVENTS
ENDIF
LOCAL lnitem, lccommand, lctitle, lnpos, llFound
IF EMPTY(THIS.cmainmenu)
RETURN .F.
ENDIF
FOR lnitem = 1 TO this.nlastfilecount+10
RELEASE BAR THIS.filemnuoffset+lnitem+1 OF (THIS.filemnuname)
ENDFOR
llFound=.F.
FOR lnitem = 1 TO this.nlastfilecount
IF !EMPTY(THIS.alastform[lnItem,1])
lctitle = THIS.alastform[lnItem,2]
llFound=.T.
lnpos = RAT(":",lctitle)
IF LEN(lctitle) > lnpos AND VAL(SUBSTR(lctitle,lnpos+1)) <> 0
lctitle = SUBSTR(lctitle,1,RAT(":",lctitle)-1)
ENDIF
DEFINE BAR THIS.filemnuoffset+lnitem+1 OF (THIS.filemnuname) ;
PROMPT "\<"+ALLTRIM(STR(lnitem))+ " " + lctitle ;
BEFORE THIS.filemnuoffset+1
lccommand = "ON SELECTION BAR " + STR(THIS.filemnuoffset+lnitem+1) + " OF "+THIS.filemnuname+;
" =goprogram.runform('"+ALLTRIM(THIS.alastform[lnItem,1])+"')"
&lccommand
ENDIF
NEXT
IF llFound
DEFINE BAR THIS.filemnuoffset+lnitem+1 OF (THIS.filemnuname) ;
PROMPT "\-" BEFORE THIS.filemnuoffset+1
ENDIF
IF !EMPTY(THIS.cmainform)
THIS.runform(THIS.cmainform)
ENDIF
IF !EMPTY(THIS.chelpfile) AND FILE(THIS.chelpfile)
SET HELP TO (THIS.chelpfile)
SET HELP ON
ENDIF
LOCAL lccommand
lccommand = THIS.cdateformat
IF !EMPTY(lccommand)
SET DATE TO (lccommand)
ENDIF
LOCAL lnform, lconerror, lerror
IF THIS.nidxcount > 0
lconerror = ON('ERROR')
ON ERROR lerror = .T.
IF THIS.ldebugmode
SET ESCAPE ON
ON SHUTDOWN
ON ERROR
ENDIF
IF THIS.lclearidxmsg
WAIT WINDOW msg_clear_idx NOWAIT
ENDIF
FOR lnform = 1 TO _SCREEN.FORMCOUNT
IF pemstatus(_SCREEN.FORMS[lnForm],'ClearIDX',5)
_SCREEN.FORMS[lnForm].clearidx()
ENDIF
NEXT
ON ERROR &lconerror
ENDIF
IF TYPE("_screen.ActiveForm") = "O"
SET MESSAGE TO _SCREEN.ACTIVEFORM.CAPTION
ELSE
SET MESSAGE TO ''
ENDIF
THIS.nidxcount = 0
LPARAMETERS tclanguage
IF EMPTY(tclanguage)
tclanguage = "ENG"
ENDIF
IF !(tclanguage $ "ENG;FRE;GER;ITA;ESP")
tclanguage = "USR"
ENDIF
THIS.clangid = tclanguage
RETURN THIS.clangid
LPARAMETERS tlmode
THIS.ldebugmode = tlmode
IF THIS.ldebugmode
DO MENU\DEBUG.mpr
WAIT WINDOW _SCREEN.CAPTION + CHR(13)+ "* DEBUG_MODE * " TIMEOUT 3
ELSE
SET SYSMENU TO
THIS.showmenu()
ENDIF
LPARAMETERS tcdatapath
LOCAL lcnewpath, lctmppath
IF EMPTY(tcdatapath)
lcnewpath = IIF(EMPTY(THIS.coriginalpath) OR ISNULL(THIS.coriginalpath), "", UPPER(TRIM(THIS.coriginalpath)))
lcnewpath = IIF(RIGHT(lcnewpath,1) == ",", lcnewpath, lcnewpath+",")
*-- add DataDir to the current path
IF !EMPTY(THIS.cdatadir) AND !ISNULL(THIS.cdatadir)
lctmppath = UPPER(TRIM(THIS.cdatadir))
IF RIGHT(lctmppath,1) == "\"
lctmppath = LEFT(lctmppath,LEN(lctmppath)-1)
ENDIF
IF !(lctmppath+"," $ lcnewpath)
lcnewpath = ALLTRIM(lctmppath+","+lcnewpath)
ENDIF
ENDIF
*-- add VFXDir to the path
IF !EMPTY(THIS.cvfxdir) AND !ISNULL(THIS.cvfxdir)
lctmppath = UPPER(TRIM(THIS.cvfxdir))
IF RIGHT(lctmppath,1) == "\"
lctmppath = LEFT(lctmppath,LEN(lctmppath)-1)
ENDIF
IF !(lctmppath+"," $ lcnewpath)
lcnewpath = ALLTRIM(lctmppath+","+lcnewpath)
ENDIF
ENDIF
*-- add report directory to the path
IF !EMPTY(THIS.creportdir) AND !ISNULL(THIS.creportdir)
lctmppath = UPPER(TRIM(THIS.creportdir))
IF RIGHT(lctmppath,1) == "\"
lctmppath = LEFT(lctmppath,LEN(lctmppath)-1)
ENDIF
IF !(lctmppath+"," $ lcnewpath)
lcnewpath = ALLTRIM(lctmppath+","+lcnewpath)
ENDIF
ENDIF
*-- add update directory to the path
IF !EMPTY(THIS.cupdatedir) AND !ISNULL(THIS.cupdatedir)
lctmppath = UPPER(TRIM(THIS.cupdatedir))
IF RIGHT(lctmppath,1) == "\"
lctmppath = LEFT(lctmppath,LEN(lctmppath)-1)
ENDIF
IF !(lctmppath+"," $ lcnewpath)
lcnewpath = ALLTRIM(lctmppath+","+lcnewpath)
ENDIF
ENDIF
*-- add import directory to the path
IF !EMPTY(THIS.cimportdir) AND !ISNULL(THIS.cimportdir)
lctmppath = UPPER(TRIM(THIS.cimportdir))
IF RIGHT(lctmppath,1) == "\"
lctmppath = LEFT(lctmppath,LEN(lctmppath)-1)
ENDIF
IF !(lctmppath+"," $ lcnewpath)
lcnewpath = ALLTRIM(lctmppath+","+lcnewpath)
ENDIF
ENDIF
*-- add export directory to the path
IF !EMPTY(THIS.cexportdir) AND !ISNULL(THIS.cexportdir)
lctmppath = UPPER(TRIM(THIS.cexportdir))
IF RIGHT(lctmppath,1) == "\"
lctmppath = LEFT(lctmppath,LEN(lctmppath)-1)
ENDIF
IF !(lctmppath+"," $ lcnewpath)
lcnewpath = ALLTRIM(lctmppath+","+lcnewpath)
ENDIF
ENDIF
ELSE
lcnewpath = IIF(EMPTY(NVL(SET("path"),"")), "", UPPER(TRIM(SET("path"))))
lcnewpath = IIF(RIGHT(lcnewpath,1) == ",", lcnewpath, lcnewpath+",")
tcdatapath = ALLTRIM(tcdatapath)
IF RIGHT(tcdatapath,1) == "\"
tcdatapath = LEFT(tcdatapath,LEN(tcdatapath)-1)
ENDIF
IF !(tcdatapath+"," $ lcnewpath)
lcnewpath = ALLTRIM(tcdatapath+","+lcnewpath)
ENDIF
ENDIF
lcnewpath = STRTRAN(lcnewpath,",,",",")
lcnewpath = IIF(LEFT(lcnewpath,1) = ",", SUBSTR(lcnewpath,2), lcnewpath)
lcnewpath = IIF(RIGHT(lcnewpath,1) = ",", LEFT(lcnewpath,LEN(lcnewpath)-1), lcnewpath)
SET PATH TO (lcnewpath)
LOCAL lautologin
lautologin = THIS.lautologin
THIS.lautologin = .F.
IF THIS.nformcount>0
=MESSAGEBOX(msg_windows_opened,48,_SCREEN.CAPTION)
ELSE
*!* Save current user variables
THIS.onuserlogout()
IF glclientsupport
IF THIS.setclient()
IF RIGHT(THIS.cdatadir,1) = '\'
THIS.cdatadir = LEFT(THIS.cdatadir,LEN(THIS.cdatadir)-1)
ENDIF
IF RIGHT(THIS.cvfxdir,1) # '\'
THIS.cvfxdir = THIS.cvfxdir+"\"
ENDIF
IF RIGHT(THIS.creportdir,1) # '\'
THIS.creportdir = THIS.creportdir+"\"
ENDIF
IF RIGHT(THIS.cupdatedir,1) # '\'
THIS.cupdatedir = THIS.cupdatedir+"\"
ENDIF
IF RIGHT(THIS.cimportdir,1) # '\'
THIS.cimportdir = THIS.cimportdir+"\"
ENDIF
IF RIGHT(THIS.cexportdir,1) # '\'
THIS.cexportdir = THIS.cexportdir+"\"
ENDIF
THIS.onsetdatapath()
THIS.opendatabase()
ELSE
IF THIS.lrelogonquit
THIS.onquit()
RETURN
ENDIF
ENDIF
ENDIF
IF THIS.onuserlogin()
THIS.START()
ELSE
IF THIS.lrelogonquit
THIS.onquit()
ENDIF
ENDIF
THIS.showtoolbar()
ENDIF
THIS.lautologin = lautologin
LOCAL lcerror,__vfx_error,lcMenu
__vfx_error = .F.
lcerror = ON('error')
ON ERROR __vfx_error = .T.
DECLARE INTEGER keybd_event IN win32api INTEGER a1,INTEGER a2,INTEGER a3,INTEGER a4
=keybd_event(44,0,0,0)
ON ERROR &lcerror
IF !__vfx_error
lnSelect=SELECT()
CREATE CURSOR hardcopy (picture G)
APPEND BLANK
DOEVENTS
lcMenu=STRTRAN(CAP_MENUVIEW,'"','')
DEFINE BAR 3 OF &lcMenu. PROMPT CAP_NEXTPAGE ;
KEY CTRL+PGUP, CAP_NEXTPAGEKEY ;
SKIP FOR OnSkipMenu("VIEW_NEXTPAGE") ;
MESSAGE CAP_NEXTPAGESTATUSBAR
DEFINE WINDOW _preview FROM -500,-500 TO -400,-400
ACTIVATE WINDOW _preview
KEYBOARD "{CTRL+PGDN}{CTRL+V}{CTRL+W}{CTRL+W}"
BROWSE IN _preview
RELEASE WINDOW _preview
DEFINE BAR 3 OF &lcMenu. PROMPT CAP_NEXTPAGE ;
KEY CTRL+PGDN, CAP_NEXTPAGEKEY ;
SKIP FOR OnSkipMenu("VIEW_NEXTPAGE") ;
MESSAGE CAP_NEXTPAGESTATUSBAR
REPORT FORM hardcopy NOCONSOLE TO PRINTER
*!* LOCAL owordobject
*!* owordobject = CREATEOBJECT("word")
*!* WITH owordobject
*!* IF .openword()
*!* .setvisible()
*!* .setwindowstate()
*!* .adddocument()
*!* .paste()
*!* .printdocument()
*!* .nsavechanges = 0
*!* .closedocument()
*!* ENDIF
*!* ENDWITH
*!* RELEASE owordobject
ENDIF
LPARAMETERS tablename
LOCAL z,justname
tablename=LOWER(ALLTRIM(m.tablename))
justname=JUSTFNAME(m.tablename)
DO WHILE .T.
z=askform("File not found: "+m.tablename,22,_SCREEN.CAPTION,"Create","Abort")
DO CASE
CASE m.z=1
DO CASE
CASE m.justname="vfxfopen"
CREATE TABLE (m.tablename) FREE;
(objectid c(10), objectno N(3), TITLE c(32),;
DESCR c(120), FORM c(32), PARAMETER m,;
viewlevel N(2), newlevel N(2), editlevel N(2), eraselevel N(2))
INDEX ON UPPER(objectid)+STR(objectno) TAG OBJECT
CASE m.justname="vfxlock"
CREATE TABLE (m.tablename) FREE;
(TABLE c(32), RECORD N(10), DATE d,;
TIME c(10), user_name c(32))
INDEX ON UPPER(TABLE)+STR(RECORD,10) TAG KEY
CASE m.justname="vfxlog"
CREATE TABLE (m.tablename) FREE;
(TYPE c(10), USER c(32), DATE d, TIME c(10), ERROR N(4),;
MESSAGE m, method m, TABLES m, CODE m, MEMORY m, STATUS m)
INDEX ON UPPER(USER) TAG OBJECT
CASE m.justname="vfxres"
CREATE TABLE (m.tablename) FREE;
(USER c(32), objname c(128), INDEX m, DESCENDING l,;
layout m, PAGE N(3), TOOLBAR l)
INDEX ON UPPER(USER)+UPPER(objname) TAG USER
CASE m.justname="vfxsys"
CREATE TABLE (m.tablename) FREE;
(magic_id c(15))
CASE m.justname="vfxsysid"
CREATE TABLE (m.tablename) FREE;
(keyname c(32), VALUE c(10), MAXLEN N(4))
INDEX ON UPPER(keyname) TAG KEY
CASE m.justname="vfxusr"
CREATE TABLE (m.tablename) FREE;
(USER c(32), PASSWORD c(32), user_name c(32),;
userlevel N(2), useraccess c(10), firstview N(1),;
lastsel m, formsize N(3,1), agent l, favorites M, lastfile N(2))
INDEX ON UPPER(USER) FOR NOT DELETED() TAG USER CANDIDATE
INDEX ON UPPER(user_name) TAG NAME
ENDCASE
USE
EXIT
OTHERWISE
*!* Quit application!
goprogram.onquit()
RETURN .F.
ENDCASE
ENDDO
CLOSE DATABASE ALL
CLOSE TABLES ALL
* Client selection
LOCAL actualclient
USE (THIS.cvfxpath) IN 0 SHARED ALIAS cvfxpath
SELECT cvfxpath
LOCAL lnreccount
COUNT ALL FOR !DELETED() TO lnreccount
LOCATE
DO CASE
CASE lnreccount > 1
DO FORM vfxclien TO actualclient
IF EMPTY(actualclient)
WAIT WINDOW msg_noclient
RETURN .F.
ENDIF
CASE lnreccount = 1
LOCATE
OTHERWISE
GO BOTTOM
ENDCASE
THIS.cdatadir=ALLTRIM(cvfxpath.datapath)
* Check if updates are neccessary.
THIS.cvfxdir=ALLTRIM(cvfxpath.vfxpath)
THIS.creportdir=ALLTRIM(cvfxpath.reportpath)
THIS.cupdatedir=ALLTRIM(cvfxpath.updatepath)
THIS.cimportdir=ALLTRIM(cvfxpath.importpath)
THIS.cexportdir=ALLTRIM(cvfxpath.exportpath)
USE IN cvfxpath
RETURN .T.
LPARAMETERS tcvfxtable
* tcVFXTable is the Name of the VFX Table WITHOUT path
LOCAL llretval
llretval = .F.
IF !( ISNULL(tcvfxtable) OR;
EMPTY(tcvfxtable) OR ;
(TYPE("tcVFXTable") # "C") )
IF !( ISNULL(THIS.cvfxdir) OR EMPTY(THIS.cvfxdir) )
LOCAL lafiles[1], lnfilecount
lnfilecount = ADIR(lafiles, THIS.cvfxdir + "*.DBF")
IF (lnfilecount > 0)
tcvfxtable = UPPER(ALLTRIM(JUSTFNAME(tcvfxtable)))
llretval = ASCAN(lafiles,tcvfxtable) > 0
ENDIF
ENDIF
ENDIF
RETURN llretval
LPARAMETER tcvfxtable, tcalias
* tcVFXTable is the Name of the VFX Table WITHOUT path
LOCAL llretval
llretval = .F.
IF !( ISNULL(tcvfxtable) OR;
EMPTY(tcvfxtable) OR ;
(TYPE("tcVFXTable") # "C") )
tcvfxtable = JUSTFNAME(tcvfxtable)
LOCAL lnpos
lnpos = AT(".",tcvfxtable)
tcvfxtable = IIF(lnpos = 0, tcvfxtable, LEFT(tcvfxtable,lnpos-1))
IF ( ISNULL(tcalias) OR EMPTY(tcalias))
tcalias = tcvfxtable
ENDIF
IF (THIS.isfreevfxtable(tcvfxtable))
USE (THIS.cvfxdir + tcvfxtable) IN 0 ALIAS (tcalias)
llretval = USED(tcalias)
ENDIF
ENDIF
RETURN llretval
LPARAMETERS tcmaintitle, tcmainmenu
SET ESCAPE OFF
SET SYSMENU OFF
IF THIS.lusedesktopcolor
DECLARE INTEGER GetSysColor IN Win32API INTEGER nColorIndex
_SCREEN.BACKCOLOR = getsyscolor(1)
ENDIF
THIS.luserlogged = .F.
THIS.coriginalpath = SET('path')
THIS.coldtitle = _SCREEN.CAPTION
IF !EMPTY(tcmaintitle)
THIS.cmaintitle = tcmaintitle
ENDIF
IF !EMPTY(tcmainmenu)
THIS.cmainmenu = tcmainmenu
ENDIF
_SCREEN.CAPTION = THIS.cmaintitle
IF !EMPTY(THIS.cmainicon)
_SCREEN.ICON = THIS.cmainicon
ENDIF
DIMENSION THIS.aformlist[1,4]
THIS.aformlist[1,1] = .F.
THIS.aformlist[1,2] = .F.
THIS.aformlist[1,3] = .F.
THIS.aformlist[1,4] = .NULL.
THIS.openintroform()
THIS.onsetenv()
#ifdef _stonefield
THIS.releaseintroform()
_VFP.VISIBLE = .T.
_SCREEN.WINDOWSTATE = 2
#ENDIF
IF UPPER(JUSTEXT(this.cmaindatabase))#"DBC"
this.cmaindatabase=this.cmaindatabase+".DBC"
ENDIF
* Create free table Vfxpath.dbf if necessary
LOCAL laDummy[1]
IF ADIR(ladummy,THIS.cdatadir+"\"+THIS.cmaindatabase)#1
glclientsupport=.T.
IF ADIR(ladummy,THIS.cvfxpath)#1
CREATE TABLE (THIS.cvfxpath) FREE;
(clientname c(20),;
datapath c(64),;
updatepath c(64),;
reportpath c(64),;
vfxpath c(64),;
exportpath c(64),;
importpath c(64))
INDEX ON DELETED() TAG deleted
INDEX ON UPPER(clientname) TAG clientname CANDIDATE
USE
ENDIF
ENDIF
IF EMPTY(THIS.cdatadir)
glclientsupport=.T.
_VFP.VISIBLE = .T.
_SCREEN.WINDOWSTATE = 2
*!* Client selection
IF !THIS.setclient()
RETURN .F.
ENDIF
ENDIF
IF EMPTY(THIS.cdatadir)
LOCAL lcPath
lcPath=GETFILE("DBC")
IF EMPTY(lcPath)
WAIT WINDOW msg_nodatapath
RETURN .F.
ENDIF
this.cdatadir=JUSTPATH(lcPath)
INSERT INTO (this.cvfxpath) (clientname,datapath,updatepath,reportpath,vfxpath) ;
VALUES (RIGHT(this.cdatadir,20),this.cdatadir,this.cdatadir+"\update","report",this.cdatadir)
ENDIF
IF EMPTY(THIS.cvfxdir)
THIS.cvfxdir=THIS.cdatadir
ENDIF
IF EMPTY(THIS.creportdir)
THIS.creportdir="report"
ENDIF
IF RIGHT(THIS.cdatadir,1) = '\'
THIS.cdatadir = LEFT(THIS.cdatadir,LEN(THIS.cdatadir)-1)
ENDIF
IF EMPTY(THIS.cupdatedir)
THIS.cupdatedir=THIS.cdatadir+"\update"
ENDIF
IF EMPTY(THIS.cimportdir)
THIS.cimportdir=THIS.cdatadir+"\import"
ENDIF
IF EMPTY(THIS.cexportdir)
THIS.cexportdir=THIS.cdatadir+"\export"
ENDIF
THIS.cvfxdir = ADDBS(THIS.cvfxdir)
THIS.creportdir = ADDBS(THIS.creportdir)
THIS.cupdatedir = ADDBS(THIS.cupdatedir)
THIS.cimportdir = ADDBS(THIS.cimportdir)
THIS.cexportdir = ADDBS(THIS.cexportdir)
THIS.onsetdatapath()
IF !THIS.opendatabase()
ON SHUTDOWN
ON ERROR
THIS.onquit()
THIS.removetoolbar("[ALL]")
_SCREEN.CAPTION = THIS.coldtitle
THIS.lcanclose = .T.
_SCREEN.MOUSEPOINTER = mouse_default
SET SYSMENU TO DEFAULT
RETURN .F.
ENDIF
THIS.showmenu()
SET MESSAGE TO ''
ON KEY LABEL F1 DO helpme
THIS.olastformcreated = .NULL.
IF TYPE("this.oConnMgr") = "O" AND !ISNULL(THIS.oconnmgr)
THIS.oconnmgr.DESTROY()
ENDIF
THIS.oconnmgr = .NULL.
ON SHUTDOWN
ON ERROR _vfx_error = .T.
IF THIS.ldebugmode
SET ESCAPE ON
ON SHUTDOWN
ON ERROR
ENDIF
IF !THIS.lcanclose
THIS.onquit()
ENDIF
THIS.onresetenv()
ON ERROR
CLOSE DATA ALL
CLEAR PROGRAM
SET SYSMENU TO DEFAULT
_VFP.VISIBLE = .T.
RELEASE THIS
DODEFAULT()
THIS.cmdexit.VISIBLE = .T.
***********************************************************
** Copyright © Devigus Engineering AG
LOCAL loform, lnew, lopen, lsave, lprint, lcut, lcopy, lpaste, lundo,;
lmore, LEDIT, lsearch, ldelete, ltop,lbottom,lnext,lprev,laudit,lrecordcopy
WITH THIS
.cmdhelp.ENABLED = .T.
.cmdscreenshot.ENABLED = .T.
.cmdexit.ENABLED = .F.
IF TYPE("goProgram") =="O"
lopen = goprogram.lopendialog
ENDIF
IF (TYPE("_screen.ActiveForm") == "O" AND !ISNULL(_SCREEN.ACTIVEFORM))
loform = _SCREEN.ACTIVEFORM
IF TYPE("loForm.WindowType") <> "U"
IF loform.WINDOWTYPE = 1
.SETALL('Enabled',.F.)
RETURN .T.
ENDIF
ENDIF
THIS.SETALL('Enabled',!lopen)
IF TYPE("loForm.lEmpty") == "L"
lnew = loform.lcaninsert
lrecordcopy = loform.lcancopy AND !loform.lempty
ltop = !loform.lempty
lbottom = !loform.lempty
lnext = !loform.lempty
lprev = !loform.lempty
IF !loform.lempty
laudit=loform.nformstatus = 0
lmore = loform.lmore AND loform.nformstatus = 0
LEDIT = loform.lcanedit AND loform.nformstatus = 0
lsearch = !loform.lempty AND loform.nformstatus = 0
ldelete = loform.lcandelete AND loform.nformstatus = 0
lprint = loform.nformstatus = 0
.cmdexit.ENABLED = loform.nformstatus = 0
ENDIF
lsave = loform.nformstatus # 0
lundo = loform.nformstatus # 0
lcopy = loform.nformstatus # 0
lcut = loform.nformstatus # 0
lpaste = loform.nformstatus # 0
ENDIF
ENDIF
.cmdnew.ENABLED = lnew
.cmdrecordcopy.ENABLED = lrecordcopy
.cmdopen.ENABLED = !lopen
.cmdsave.ENABLED = lsave
.cmdprint.ENABLED = lprint
.cmdpreview.ENABLED = lprint
.cmdcopy.ENABLED = lcopy
.cmdcut.ENABLED = lcut
.cmdpaste.ENABLED = lpaste
.cmdundo.ENABLED = lundo
.cmdmore.ENABLED = lmore
.cmdedit.ENABLED = LEDIT
.cmdsearch.ENABLED = lsearch
.cmddelete.ENABLED = ldelete
.cmdtop.ENABLED = ltop
.cmdprev.ENABLED = lprev
.cmdnext.ENABLED = lnext
.cmdbottom.ENABLED = lbottom
.cmdlogin.ENABLED = .T.
.cmdaudit.ENABLED = laudit
ENDWITH
**__VFX_WIZARD_HEADER - 21/07/96 07:55:43 PM
this.Caption = CAP_STANDARD
this.cmdnew.ToolTipText = TTT_CMDNEW
this.cmdrecordcopy.ToolTipText = TTT_CMDRECORDCOPY
this.cmdopen.ToolTipText = TTT_CMDOPEN
this.cmdsave.ToolTipText = TTT_CMDSAVE
this.cmdprint.ToolTipText = TTT_CMDPRINT
this.cmdpreview.ToolTipText = TTT_CMDPREVIEW
this.cmdcut.ToolTipText = TTT_CMDCUT
this.cmdcopy.ToolTipText = TTT_CMDCOPY
this.cmdpaste.ToolTipText = TTT_CMDPASTE
this.cmdundo.ToolTipText = TTT_CMDUNDO
this.cmdmore.ToolTipText = TTT_CMDMORE
this.cmdedit.ToolTipText = TTT_CMDEDIT
this.cmddelete.ToolTipText = TTT_CMDDELETE
this.cmdsearch.ToolTipText = TTT_CMDSEARCH
this.cmdexit.ToolTipText = TTT_CMDEXIT
this.cmdtop.ToolTipText = TTT_CMDTOP
this.cmdprev.ToolTipText = TTT_CMDPREV
this.cmdnext.ToolTipText = TTT_CMDNEXT
this.cmdbottom.ToolTipText = TTT_CMDBOTTOM
this.cmdhelp.ToolTipText = TTT_CMDHELP
this.cmdlogin.ToolTipText = TTT_CMDLOGIN
this.cmdaudit.ToolTipText = TTT_CMDAUDIT
this.cmdscreenshot.ToolTipText = TTT_CMDSCREENSHOT
return .T.
**__VFX_WIZARD_FOOTER
***********************************************************
| Name | Initial value |
|---|---|
| Picture | ..\bitmap\toolbar\bottom.bmp |
| TabIndex | 20 |
| ToolTipText | "Last Record" |
| ZOrderSet | 22 |
IF pemstatus(_SCREEN.ACTIVEFORM,'OnBottom',5)
_SCREEN.ACTIVEFORM.onbottom()
ENDIF
| Name | Initial value |
|---|---|
| Picture | ..\bitmap\toolbar\wzdelete.bmp |
| TabIndex | 15 |
| ToolTipText | "Delete current record" |
| ZOrderSet | 17 |
IF pemstatus(_SCREEN.ACTIVEFORM,'lCanDelete',5)
IF pemstatus(_SCREEN.ACTIVEFORM,'OnDelete',5)
_SCREEN.ACTIVEFORM.ondelete()
ENDIF
ENDIF
| Name | Initial value |
|---|---|
| Picture | ..\bitmap\toolbar\wzedit.bmp |
| TabIndex | 14 |
| ToolTipText | "Edit current record" |
| ZOrderSet | 16 |
IF pemstatus(_SCREEN.ACTIVEFORM,'lCanEdit',5)
IF pemstatus(_SCREEN.ACTIVEFORM,'OnEdit',5)
_SCREEN.ACTIVEFORM.onedit()
ENDIF
ENDIF
| Name | Initial value |
|---|---|
| Picture | ..\bitmap\toolbar\next.bmp |
| TabIndex | 19 |
| ToolTipText | "Next Record" |
| ZOrderSet | 21 |
IF pemstatus(_SCREEN.ACTIVEFORM,'OnNext',5)
_SCREEN.ACTIVEFORM.onnext()
ENDIF
| Name | Initial value |
|---|---|
| Picture | ..\bitmap\toolbar\prev.bmp |
| TabIndex | 18 |
| ToolTipText | "Previous Record" |
| ZOrderSet | 20 |
IF pemstatus(_SCREEN.ACTIVEFORM,'OnPrev',5)
_SCREEN.ACTIVEFORM.onprev()
ENDIF
| Name | Initial value |
|---|---|
| Picture | ..\bitmap\toolbar\wzfind.bmp |
| TabIndex | 16 |
| ToolTipText | "Search Dialog" |
| ZOrderSet | 18 |
IF pemstatus(_SCREEN.ACTIVEFORM,'OnSearch',5)
_SCREEN.ACTIVEFORM.onsearch()
ENDIF
| Name | Initial value |
|---|---|
| Picture | ..\bitmap\toolbar\top.bmp |
| TabIndex | 17 |
| ToolTipText | "First Record" |
| ZOrderSet | 19 |
IF pemstatus(_SCREEN.ACTIVEFORM,'OnTop',5)
_SCREEN.ACTIVEFORM.ontop()
ENDIF
| Name | Initial value |
|---|---|
| TabIndex | 12 |
| ZOrderSet | 13 |
| Name | Initial value |
|---|---|
| TabIndex | 8 |
| ZOrderSet | 8 |
| Name | Initial value |
|---|---|
| TabIndex | 7 |
| ZOrderSet | 7 |
| Name | Initial value |
|---|---|
| Picture | ..\bitmap\toolbar\close.bmp |
| TabIndex | 23 |
| ZOrderSet | 28 |
IF TYPE("_screen.ActiveForm")=="O"
IF pemstatus(_SCREEN.ACTIVEFORM,'QueryUnload',5)
IF _SCREEN.ACTIVEFORM.QUERYUNLOAD()
_SCREEN.ACTIVEFORM.RELEASE()
ENDIF
ENDIF
ELSE
goprogram.onquit()
ENDIF
| Name | Initial value |
|---|---|
| TabIndex | 21 |
| ZOrderSet | 26 |
| Name | Initial value |
|---|---|
| TabIndex | 22 |
| ZOrderSet | 27 |
| Name | Initial value |
|---|---|
| TabIndex | 11 |
| ZOrderSet | 12 |
| Name | Initial value |
|---|---|
| TabIndex | 1 |
| ZOrderSet | 0 |
| Name | Initial value |
|---|---|
| TabIndex | 3 |
| ZOrderSet | 2 |
| Name | Initial value |
|---|---|
| TabIndex | 9 |
| ZOrderSet | 9 |
| Name | Initial value |
|---|---|
| TabIndex | 6 |
| ZOrderSet | 5 |
| Name | Initial value |
|---|---|
| TabIndex | 5 |
| ZOrderSet | 4 |
| Name | Initial value |
|---|---|
| Enabled | .T. |
| TabIndex | 4 |
| ZOrderSet | 3 |
| Name | Initial value |
|---|---|
| TabIndex | 13 |
| ZOrderSet | 14 |
| Name | Initial value |
|---|---|
| TabIndex | 10 |
| ZOrderSet | 11 |
| Name | Initial value |
|---|---|
| TabIndex | 2 |
| ZOrderSet | 1 |
| Name | Initial value |
|---|---|
| Caption | "Standard" |
| lsaveposition | .F. |
**__VFX_WIZARD_HEADER - 21/07/96 07:57:10 PM
thisForm.Caption = CAP_STANDARD
this.cmdnew.ToolTipText = TTT_CMDNEW
this.cmdrecordcopy.ToolTipText = TTT_CMDRECORDCOPY
this.cmdopen.ToolTipText = TTT_CMDOPEN
this.cmdsave.ToolTipText = TTT_CMDSAVE
this.cmdprint.ToolTipText = TTT_CMDPRINT
this.cmdpreview.ToolTipText = TTT_CMDPREVIEW
this.cmdcut.ToolTipText = TTT_CMDCUT
this.cmdcopy.ToolTipText = TTT_CMDCOPY
this.cmdpaste.ToolTipText = TTT_CMDPASTE
this.cmdundo.ToolTipText = TTT_CMDUNDO
this.cmdexit.ToolTipText = TTT_CMDEXIT
this.cmdaudit.ToolTipText = TTT_CMDAUDIT
this.cmdscreenshot.ToolTipText = TTT_CMDSCREENSHOT
this.cmdhelp.ToolTipText = TTT_CMDHELP
this.cmdlogin.ToolTipText = TTT_CMDLOGIN
this.cmdmore.ToolTipText = TTT_CMDMORE
return .T.
**__VFX_WIZARD_FOOTER
***********************************************************
LOCAL loform, lnew, lopen, lsave, lprint, lcut, lcopy, lpaste, lundo,;
lmore, LEDIT, lsearch, ldelete, ltop,lbottom,lnext,lprev,laudit,lrecordcopy
WITH THIS
.cmdhelp.ENABLED = .T.
.cmdscreenshot.ENABLED = .T.
.cmdexit.ENABLED = .F.
IF VARTYPE(goprogram)="O"
lopen = goprogram.lopendialog
ENDIF
IF (TYPE("_screen.ActiveForm") == "O" AND !ISNULL(_SCREEN.ACTIVEFORM))
loform = _SCREEN.ACTIVEFORM
IF VARTYPE(loform.WINDOWTYPE) <> "U"
IF loform.WINDOWTYPE = 1
.SETALL('Enabled',.F.)
RETURN .T.
ENDIF
ENDIF
THIS.SETALL('Enabled',!lopen)
IF TYPE("loForm.lEmpty")=="L"
lnew = loform.lcaninsert
lrecordcopy = loform.lcancopy AND !loform.lempty
IF !loform.lempty
lmore = loform.lmore AND loform.nformstatus = 0
laudit = loform.nformstatus = 0
lsearch = !loform.lempty AND loform.nformstatus = 0
lprint = loform.nformstatus = 0
.cmdexit.ENABLED = .F.
ENDIF
lsave = loform.nformstatus # 0
lundo = loform.nformstatus # 0
lcopy = loform.nformstatus # 0
lcut = loform.nformstatus # 0
lpaste = loform.nformstatus # 0
ENDIF
ENDIF
.cmdnew.ENABLED = lnew
.cmdrecordcopy.ENABLED= lrecordcopy
.cmdopen.ENABLED = !lopen
.cmdsave.ENABLED = lsave
.cmdprint.ENABLED = lprint
.cmdpreview.ENABLED = lprint
.cmdcopy.ENABLED = lcopy
.cmdcut.ENABLED = lcut
.cmdpaste.ENABLED = lpaste
.cmdundo.ENABLED = lundo
.cmdmore.ENABLED = lmore
.cmdlogin.ENABLED = .T.
.cmdaudit.ENABLED = laudit
ENDWITH
IF VARTYPE(goprogram)="O"
IF EMPTY(goprogram.cmainmenu)
THIS.cmdexit.VISIBLE = .T.
THIS.cmdexit.ENABLED = .T.
ELSE
THIS.cmdexit.VISIBLE = .F.
THIS.cmdexit.ENABLED = .F.
ENDIF
ENDIF
THIS.SETALL('Enabled',.F.,'CommandButton')
RETURN DODEFAULT()
| Name | Initial value |
|---|---|
| Picture | ..\bitmap\toolbar\audit.bmp |
| TabIndex | 13 |
| ToolTipText | "Audit-Trail" |
| ZOrderSet | 16 |
IF pemstatus(_SCREEN.ACTIVEFORM,'lAudit',5)
IF pemstatus(_SCREEN.ACTIVEFORM,'OnAudit',5)
_SCREEN.ACTIVEFORM.onaudit()
ENDIF
ENDIF
| Name | Initial value |
|---|---|
| Picture | ..\bitmap\toolbar\copy.bmp |
| TabIndex | 8 |
| ToolTipText | "Copy (Ctrl+C)" |
| ZOrderSet | 9 |
KEYBOARD "{CTRL+C}"
| Name | Initial value |
|---|---|
| Picture | ..\bitmap\toolbar\cut.bmp |
| TabIndex | 7 |
| ToolTipText | "Cut (Ctrl+X)" |
| ZOrderSet | 8 |
KEYBOARD "{CTRL+X}"
| Name | Initial value |
|---|---|
| Picture | ..\bitmap\toolbar\wzclose.bmp |
| TabIndex | 11 |
| ToolTipText | "Close" |
| ZOrderSet | 13 |
goprogram.onquit()
| Name | Initial value |
|---|---|
| Enabled | .T. |
| Picture | ..\bitmap\toolbar\help.bmp |
| TabIndex | 16 |
| ToolTipText | "Help (F1)" |
| ZOrderSet | 21 |
KEYBOARD "{F1}"
| Name | Initial value |
|---|---|
| Enabled | .T. |
| Picture | ..\bitmap\toolbar\login.bmp |
| TabIndex | 15 |
| ToolTipText | "Login..." |
| ZOrderSet | 19 |
THIS.ENABLED = VARTYPE(goprogram)="O"
IF VARTYPE(goprogram)="O"
goprogram.relogon()
ENDIF
| Name | Initial value |
|---|---|
| Enabled | .T. |
| Picture | ..\bitmap\toolbar\more.bmp |
| TabIndex | 12 |
| ToolTipText | "More ... (F6)" |
| ZOrderSet | 15 |
IF TYPE("_screen.activeform") = "O"
IF pemstatus(_SCREEN.ACTIVEFORM,'lMore',5)
IF pemstatus(_SCREEN.ACTIVEFORM,'OnMore',5)
_SCREEN.ACTIVEFORM.onmore()
ENDIF
ENDIF
ENDIF
| Name | Initial value |
|---|---|
| Enabled | .T. |
| Picture | ..\bitmap\toolbar\new.bmp |
| TabIndex | 1 |
| ToolTipText | "New (Ctrl+N)" |
| ZOrderSet | 0 |
IF TYPE("_screen.activeform") = "O"
IF pemstatus(_SCREEN.ACTIVEFORM,'lCanInsert',5)
IF pemstatus(_SCREEN.ACTIVEFORM,'OnInsert',5)
_SCREEN.ACTIVEFORM.oninsert()
ENDIF
ENDIF
ENDIF
| Name | Initial value |
|---|---|
| Picture | ..\bitmap\toolbar\open.bmp |
| TabIndex | 3 |
| ToolTipText | "Open (Ctrl+O)" |
| ZOrderSet | 2 |
goprogram.runform("VFXOPEN")
| Name | Initial value |
|---|---|
| Enabled | .T. |
| Picture | ..\bitmap\toolbar\paste.bmp |
| TabIndex | 9 |
| ToolTipText | "Paste (Ctrl+V)" |
| ZOrderSet | 10 |
KEYBOARD "{CTRL+V}"
| Name | Initial value |
|---|---|
| Picture | ..\bitmap\toolbar\preview.bmp |
| TabIndex | 6 |
| ToolTipText | "Preview" |
| ZOrderSet | 6 |
IF TYPE("_screen.activeform") = "O"
IF pemstatus(_SCREEN.ACTIVEFORM,'lEmpty',5)
IF pemstatus(_SCREEN.ACTIVEFORM,'OnPrint',5)
_SCREEN.ACTIVEFORM.onprint(.T.)
ENDIF
ENDIF
ENDIF
| Name | Initial value |
|---|---|
| Picture | ..\bitmap\toolbar\print.bmp |
| TabIndex | 5 |
| ToolTipText | "Print..." |
| ZOrderSet | 5 |
IF TYPE("_screen.activeform") = "O"
IF pemstatus(_SCREEN.ACTIVEFORM,'lEmpty',5)
IF pemstatus(_SCREEN.ACTIVEFORM,'OnPrint',5)
_SCREEN.ACTIVEFORM.onprint()
ENDIF
ENDIF
ENDIF
| Name | Initial value |
|---|---|
| AutoSize | .F. |
| Picture | ..\bitmap\toolbar\save.bmp |
| TabIndex | 4 |
| ToolTipText | "Save (Ctrl+S)" |
| ZOrderSet | 3 |
IF TYPE("_screen.activeform") = "O"
IF pemstatus(_SCREEN.ACTIVEFORM,'OnSave',5)
_SCREEN.ACTIVEFORM.onsave()
ENDIF
ENDIF
| Name | Initial value |
|---|---|
| Picture | ..\bitmap\toolbar\prnscr.bmp |
| TabIndex | 14 |
| ToolTipText | "Screenshot" |
| ZOrderSet | 17 |
goprogram.printscreen()
| Name | Initial value |
|---|---|
| Enabled | .T. |
| Picture | ..\bitmap\toolbar\undo.bmp |
| TabIndex | 10 |
| ToolTipText | "Undo (Ctrl+Z)" |
| ZOrderSet | 12 |
IF TYPE("_screen.activeform") = "O"
IF pemstatus(_SCREEN.ACTIVEFORM,'lCanInsert',5)
IF pemstatus(_SCREEN.ACTIVEFORM,'OnUndo',5)
WITH _SCREEN.ACTIVEFORM
IF .lworkonview
.onwritebuffer()
ENDIF
.onundo()
ENDWITH
ENDIF
ENDIF
ENDIF
| Name | Initial value |
|---|---|
| Enabled | .T. |
| Picture | ..\bitmap\toolbar\copyreco.bmp |
| TabIndex | 2 |
| ToolTipText | "Copy Record" |
| ZOrderSet | 1 |
IF TYPE("_screen.activeform") = "O"
IF pemstatus(_SCREEN.ACTIVEFORM,'lCanInsert',5)
IF pemstatus(_SCREEN.ACTIVEFORM,'OnCopy',5)
_SCREEN.ACTIVEFORM.oncopy()
ENDIF
ENDIF
ENDIF
| Name | Initial value |
|---|---|
| BackColor | 192,192,192 |
| BorderWidth | 0 |
LPARAMETERS tctitle
THIS.olabel.CAPTION = ALLTRIM(tctitle)
THIS.olineup.WIDTH = THIS.WIDTH
THIS.olinedown.WIDTH = THIS.WIDTH
| Baseclass | Class | Object name |
|---|---|---|
| label | label | cstatusinfo.oLabel |
| line | line | cstatusinfo.oLineDown |
| cstatusinfo.oLineUp |
| Name | Initial value |
|---|---|
| AutoSize | .T. |
| BackStyle | 0 |
| Caption | "Label1" |
| FontSize | 18 |
| ForeColor | 0,0,255 |
| Name | Initial value |
|---|---|
| BorderColor | 255,255,255 |
| Name | Initial value |
|---|---|
| BorderColor | 128,128,128 |
| Name | Initial value |
|---|---|
| BorderWidth | 0 |
| Comment | " |
| TabStop | .F. |
LPARAMETERS plctitle
THIS.lbltitle.CAPTION = plctitle
LPARAMETERS tctext
tctext = NVL(tctext, "")
DO CASE
CASE THISFORM.nformstatus = 0
THIS.lbltitle.FORECOLOR = RGB(0, 0, 255)
IF TYPE("tcText")="C"
THIS.settitle(tctext)
ELSE
IF THIS.lbltitle.CAPTION=msg_editmode
THIS.settitle(SUBSTR(THIS.lbltitle.CAPTION,LEN(msg_editmode)+1))
ENDIF
ENDIF
CASE THISFORM.nformstatus = 1
THIS.lbltitle.FORECOLOR = RGB(255, 0, 0)
IF !(THIS.lbltitle.CAPTION=msg_editmode)
IF TYPE("tcText")="C"
THIS.settitle(msg_editmode + tctext)
ELSE
THIS.settitle(msg_editmode + THIS.lbltitle.CAPTION)
ENDIF
ENDIF
CASE THISFORM.nformstatus = 2
THIS.lbltitle.FORECOLOR = RGB(255, 0, 0)
THIS.settitle(LEFT(msg_insertmode,LEN(msg_insertmode)-2))
ENDCASE
| Baseclass | Class | Object name |
|---|---|---|
| label | clabel | ctitleinfo.lblTitle |
| Name | Initial value |
|---|---|
| Caption | "lblTitle" |
| FontBold | .F. |
| FontSize | 14 |
| FontUnderline | .T. |
| ForeColor | 0,0,255 |
| Name | Initial value | Comment |
|---|---|---|
| ^atoolbar[1,1] | .f. |
DIMENSION THIS.atoolbar[11,2]
DO CASE
CASE VERSION(3) = "33" && French
THIS.atoolbar[ 1,1] = "Generateur de formulaires"
THIS.atoolbar[ 2,1] = "Standard"
THIS.atoolbar[ 3,1] = "Mise en page"
THIS.atoolbar[ 4,1] = "Generateur de requetes"
THIS.atoolbar[ 5,1] = "Generateur de vues"
THIS.atoolbar[ 6,1] = "Palette des couleurs"
THIS.atoolbar[ 7,1] = "Controles de formulaire"
THIS.atoolbar[ 8,1] = "Generateur de bases de donnees"
THIS.atoolbar[ 9,1] = "Generateur d'etats"
THIS.atoolbar[10,1] = "Controles d'etat"
THIS.atoolbar[11,1] = "Apercu avant impression"
CASE VERSION(3) = "34" && Spanish
THIS.atoolbar[ 1,1] = "Generador de formularios"
THIS.atoolbar[ 2,1] = "Estándar"
THIS.atoolbar[ 3,1] = "Distribución"
THIS.atoolbar[ 4,1] = "Generador de consultas"
THIS.atoolbar[ 5,1] = "Generador de vistas"
THIS.atoolbar[ 6,1] = "Paleta de colores"
THIS.atoolbar[ 7,1] = "Controles de formularios"
THIS.atoolbar[ 8,1] = "Generador de bases de datos"
THIS.atoolbar[ 9,1] = "Generador de informes"
THIS.atoolbar[10,1] = "Controles de informes"
THIS.atoolbar[11,1] = "Presentación preliminar"
CASE VERSION(3) = "39" && Italian
THIS.atoolbar[ 1,1] = "Anteprima di stampa"
THIS.atoolbar[ 2,1] = "Controlli form"
THIS.atoolbar[ 3,1] = "Controlli report"
THIS.atoolbar[ 4,1] = "Editor di database"
THIS.atoolbar[ 5,1] = "Editor di form"
THIS.atoolbar[ 6,1] = "Editor di query"
THIS.atoolbar[ 7,1] = "Editor di report"
THIS.atoolbar[ 8,1] = "Editor di viste"
THIS.atoolbar[ 9,1] = "Layout"
THIS.atoolbar[10,1] = "Standard"
THIS.atoolbar[11,1] = "Tavolozza"
CASE VERSION(3) = "49" && German
THIS.atoolbar[ 1,1] = "Abfrage-Designer"
THIS.atoolbar[ 2,1] = "Ansichts-Designer"
THIS.atoolbar[ 3,1] = "Bericht-Steuerelemente"
THIS.atoolbar[ 4,1] = "Berichts-Designer"
THIS.atoolbar[ 5,1] = "Datenbank-Designer"
THIS.atoolbar[ 6,1] = "Farbpalette"
THIS.atoolbar[ 7,1] = "Formular-Designer"
THIS.atoolbar[ 8,1] = "Formular-Steuerelemente"
THIS.atoolbar[ 9,1] = "Layout"
THIS.atoolbar[10,1] = "Seitenansicht"
THIS.atoolbar[11,1] = "Standard"
OTHERWISE && English
THIS.atoolbar[ 1,1] = "Color Palette"
THIS.atoolbar[ 2,1] = "Database Designer"
THIS.atoolbar[ 3,1] = "Form Controls"
THIS.atoolbar[ 4,1] = "Form Designer"
THIS.atoolbar[ 5,1] = "Layout"
THIS.atoolbar[ 6,1] = "Print Preview"
THIS.atoolbar[ 7,1] = "Query Designer"
THIS.atoolbar[ 8,1] = "Report Controls"
THIS.atoolbar[ 9,1] = "Report Designer"
THIS.atoolbar[10,1] = "Standard"
THIS.atoolbar[11,1] = "View Designer"
ENDCASE
LOCAL j, lcerror, _vfx_error
lcerror = ON('ERROR')
_vfx_error = .F.
ON ERROR _vfx_error = .T.
FOR j = 1 TO ALEN(THIS.atoolbar, 1)
HIDE WINDOW (THIS.atoolbar[j,1])
* Save errors in the second dimension of the array.
THIS.atoolbar[j,2]=!_vfx_error
_vfx_error = .F.
ENDFOR
ON ERROR &lcerror
RELEASE _vfx_error
LOCAL j, lcerror, _vfx_error
lcerror = ON('ERROR')
_vfx_error = .F.
ON ERROR _vfx_error = .T.
FOR j = 1 TO ALEN(THIS.atoolbar, 1)
* If added to show only windows which were hided in the Init method.
IF THIS.atoolbar[j,2]
SHOW WINDOW (THIS.atoolbar[j,1])
ENDIF
ENDFOR
ON ERROR &lcerror
RELEASE _vfx_error