*--------------------------------------------------------------------------------------------------------------------------------------------------------
* (EN) AUTOGENERATED - ATTENTION!! - NOT INTENDED FOR EXECUTION!! USE ONLY FOR MERGING CHANGES AND STORING WITH SCM TOOLS!!
*--------------------------------------------------------------------------------------------------------------------------------------------------------
*< FOXBIN2PRG: Version="1.21" SourceFile="_webview.vcx" CPID="1252" /> (Solo para binarios VFP 9 / Only for VFP 9 binaries)
*
*
DEFINE CLASS _webbrowser3 AS olecontrol && Web browser control for Internet Explorer 3.0.
*< CLASSDATA: Baseclass="olecontrol" Timestamp="" Scale="Pixels" Uniqueid="" Nombre="_webbrowser3" Parent="" ObjName="_webbrowser3" OLEObject="" Value="0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAPgADAP7/CQAGAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAEAAAAgAAAAEAAAD+////AAAAAAAAAAD////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/////v////7////+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////1IAbwBvAHQAIABFAG4AdAByAHkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAUA//////////8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKDPNC8CDL0BAwAAAEABAAAAAAAAAwBPAGwAZQBPAGIAagBlAGMAdABEAGEAdABhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAgEDAAAAAgAAAP////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArAAAAAAAAAADAEEAYwBjAGUAcwBzAE8AYgBqAFMAaQB0AGUARABhAHQAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJgACAP///////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAA4AAAAAAAAAAMAQwBoAGEAbgBnAGUAZABQAHIAbwBwAHMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAIA////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAQAAAAAAAAAAwAAAP7////+////BAAAAP7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////DKrLqwTDPEafrAADAW64LTAAAAOwJAADsCQAAAQAAAAGCAAAAAAAAAAAAAAAAAAAAAAAATAAAAAAAAAAAAAAAOAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAA4NBXAHM1zxGuaQgAKy4SYggAAAAAAAAATAAAAAEUAgAAAAAAwAAAAAAAAEYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJjUkQAAAAAAgLWBAA==" />
*
*m: addprop && Add new property.
*m: beforenavigate && BeforeNavigate event.
*m: beforeretrieval && BeforeRetrieval event.
*m: browsetable && Browse active table based on cAlias.
*m: closetable && Close active table based on cAlias.
*m: commandstatechange && CommandStateChange event.
*m: downloadcomplete && DownloadComplete event.
*m: editscript && Edit specific VFP script.
*m: editstring && Edit string in window.
*m: erasetempfile && Erase current temporary file.
*m: filetostring && Returns string contents of file.
*m: framebeforenavigate && FrameBeforeNavigate event.
*m: gethtml && Returns HTML of current document.
*m: getsourcefile && Returns file name of current source document.
*m: getsourcehtml && Returns HTML of current source document.
*m: goback && Navigate back URL address.
*m: goforward && Navigate forward URL address.
*m: gohome && Navigate to home URL address.
*m: gosearch && Navigate to search URL address.
*m: msgbox && Message box wrapper method.
*m: navigate && Navigate to specific URL.
*m: navigatecomplete && NavigateComplete event.
*m: newwindow && NewWindow event.
*m: opentable && Open specified table and activate as current table by setting cAlias property.
*m: openvfpscript && Open VFP script table.
*m: parsesource && Parse source code of HTML document.
*m: refresh2 && Refresh2 method.
*m: refreshdeactivate && RefreshDeactivate method for use when losing focus of the web browser control.
*m: refreshmode && Set refresh mode.
*m: refreshsource && Refresh source.
*m: releasehost && Release host form.
*m: runaction && Run specific action which is a specific method of object referenced by the oAction property.
*m: runcode && Run specific block of VFP code without compilation.
*m: runscript && Run specific VFP script.
*m: setbusystate && Set busy state method.
*m: setparam && Set URL parameters method.
*m: skiprecord && Skip record of active table based on cAlias.
*m: statustextchange && StatusTextChange event.
*m: stringtofile && Saves string contents to file.
*m: trimext && Returns file name without extension of specified file name.
*m: trimfile && Returns path of specified file name.
*m: trimpath && Returns file name without path of specified file name.
*m: validateurl && Validates URL.
*m: validurl && Returns validated URL.
*m: vfps && Executes VFP script based on specified URL.
*m: vfpscript && Executes specific VFP script.
*m: viewsource && View source of current document.
*m: waitwindow && Wait window wrapper method.
*m: wildcardmatch && Returns .T. if wild card string is matched to specific string.
*p: calias && Returns table alias of active table set automatially when using the OpenTable method.
*p: cbeforeurl && Current URL before document is fully retrieved.
*p: cblankhtmlfile && Specifies blank HTM file.
*p: cdbf && Returns file name of active table set automatially when using the OpenTable method.
*p: cdbfpath && Returns path of active table set automatially when using the OpenTable method.
*p: cfilename && Returns file name of current document.
*p: cfilepath && Returns path of current document.
*p: clasturl && Last URL.
*p: cnewurl && URL before document is fully retrieved.
*p: cparam && URL parameter string.
*p: cparamdelimiter && URL parameter delimiter character.
*p: cparsefileext && File extension list of file to parse in pre-processing mode.
*p: cprogrampath && Web browser control class path.
*p: csourcefile && File name of current document.
*p: csourcefilename && File name of current source document.
*p: csourcefilepath && Path of current source document.
*p: csourcehtml && HTML source of current document.
*p: csourceurl && URL of current source document.
*p: ctempfilename && File name of temporary file document.
*p: ctempfileprefix && Prefix used for file name of temporary file document.
*p: curl && Current URL.
*p: cuserid && User ID - user defined - not used internally.
*p: cusername && User name - user defined - not used internally.
*p: cversion && Version of web browser control subclass.
*p: cvfpscript && VFP script program file name.
*p: cvfpscripttable && VFP script table file name.
*p: cvfpsprotocol && Default VFP script protocol string.
*p: lblankhtmlstartup && Enables blank startup web page.
*p: lbusy && Web browser busy mode.
*p: ldebug && Debug mode.
*p: ldesign && Design mode.
*p: ldhtml && Returns .T. if web browser supports dynamic HTML.
*p: lhistoryenabled && URL history tracking enabled.
*p: lignoreerrors
*p: lparsesource && Enables parse document source mode.
*p: lrefresh && Determines if the control is refreshed with the Refresh method is executed.
*p: lrefreshdeactivate && Enabled auto execution of RefreshDeactivate method for LostFocus.
*p: lrefreshmode && Refresh document mode.
*p: lrelease && Indicates the object's Release method has been executed and the object is in the process of being released from memory.
*p: lruncodemode && Run code mode.
*p: lvfpscript && Enables VFP script mode.
*p: lviewsourcemode && View source mode.
*p: ndatasessionid && Returns data session of table alias of active table set automatially when using the OpenTable method.
*p: nhistorycount && Returns length of URL history array.
*p: nparamcount && Returns length of URL parameter array.
*p: nrecno && Returns current record number of active table set automatially when using the OpenTable method.
*p: nscriptcount && Returns length of VFP script array.
*p: nuserlevel && User level - user defined - not used internally.
*p: oaction && User action object - user defined - not used internally.
*p: ohost && Host form - same as THISFORM.
*p: osource && Source object - user defined - not used internally.
*p: ouser && User object - user defined - not used internally.
*p: uresult && Variant result value.
*p: ureturn && Variant return value.
*p: uvalue && Variant value - user defined - not used internally.
*a: ahistory[1,2] && URL address history array.
*a: aparam[1,0] && URL parameters array.
*a: ascripts[1,0] && VFP scripts array.
*
*
calias =
cbeforeurl =
cblankhtmlfile = Blank.htm
cdbf =
cdbfpath =
cfilename =
cfilepath =
clasturl =
cnewurl =
cparam =
cparamdelimiter = &
cparsefileext = htm;html;asp
cprogrampath =
csourcefile =
csourcefilename =
csourcefilepath =
csourcehtml =
csourceurl =
ctempfilename =
ctempfileprefix = _temp
curl =
cuserid =
cusername =
cversion = Web Browser 03.01.0016
cvfpscript =
cvfpscripttable =
cvfpsprotocol = vfps:
Height = 100
Name = "_webbrowser3"
ndatasessionid = 0
nhistorycount = 0
nrecno = 0
nscriptcount = 0
nuserlevel = 0
oaction = .NULL.
ohost = .NULL.
osource = .NULL.
ouser = .NULL.
TabStop = .F.
uresult = .T.
ureturn = .T.
uvalue = .T.
Width = 100
*
PROCEDURE addprop && Add new property.
LPARAMETERS toObject,tcProperty,tuValue
LOCAL lcFileName,llAddPropLibSet,lvResult
lcFileName=this.cProgramPath+"AddProp5.fll"
IF NOT FILE(lcFileName)
RETURN .F.
ENDIF
llAddPropLibSet=(ATC(lcFileName,SET("LIBRARY"))>0)
IF NOT llAddPropLibSet
SET LIBRARY TO (lcFileName) ADDITIVE
ENDIF
lvResult=AddProp(toObject,tcProperty,tuValue)
IF NOT llAddPropLibSet
RELEASE LIBRARY (lcFileName)
ENDIF
RETURN lvResult
ENDPROC
PROCEDURE beforenavigate && BeforeNavigate event.
*** OLE Control Event ***
PARAMETERS url, flags, targetframename, postdata, headers, cancel
LOCAL lcURL,lcNewURL,lcSource,llJump,llMailTo,lcFileExt,lnAtPos,lnHistory
IF this.lRelease OR this.lBusy
cancel=.T.
RETURN .F.
ENDIF
this.SetBusyState(.T.)
IF this.lDebug
ACTIVATE SCREEN
? PROGRAM()
? "URL: "+url
IF NOT EMPTY(targetframename)
?? " Frame: "+targetframename
ENDIF
ENDIF
lcURL=ALLTRIM(url)
this.SetParam(lcURL)
llVisible=this.Visible
llMailTo=(LOWER(LEFT(lcURL,7))=="mailto:")
IF NOT llMailTo
this.cBeforeURL=lcURL
ENDIF
lnAtPos=RAT(".",lcURL)
lcFileExt=IIF(lnAtPos=0,CHR(0),ALLTRIM(SUBSTR(lcURL,lnAtPos+1)))
IF NOT this.lParseSource OR ATC(";"+lcFileExt+";",";"+this.cParseFileExt+";")=0 OR ;
NOT FILE(lcURL)
IF NOT this.lParseSource
this.cFileName=""
ENDIF
this.cSourceURL=""
this.BeforeRetrieval(@url,@flags,@targetframename,@postdata, ;
@headers,@cancel)
IF NOT cancel
this.cFileName=""
this.cSourceFile=""
this.cSourceFileName=""
this.cSourceHTML=""
ENDIF
this.SetBusyState(.F.)
RETURN
ENDIF
IF NOT this.BeforeRetrieval(@url,@flags,@targetframename,@postdata, ;
@headers,@cancel) OR cancel
IF NOT cancel
this.cSourceURL=""
this.cSourceFile=""
this.cSourceHTML=""
ENDIF
this.SetBusyState(.F.)
RETURN .F.
ENDIF
IF llMailTo OR (NOT EMPTY(this.cTempFileName) AND LOWER(url)==LOWER(this.cTempFileName))
this.SetBusyState(.F.)
RETURN .F.
ENDIF
IF NOT cancel
this.cSourceFile=""
this.cSourceHTML=""
ENDIF
IF NOT this.ParseSource(lcURL) OR EMPTY(this.cNewURL)
this.SetBusyState(.F.)
RETURN
ENDIF
cancel=.T.
this.cSourceFile=""
this.cSourceHTML=""
this.Navigate(this.cNewURL+SPACE(16),@flags,@targetframename)
this.SetBusyState(.F.)
ENDPROC
PROCEDURE beforeretrieval && BeforeRetrieval event.
PARAMETERS url, flags, targetframename, postdata, headers, cancel
LOCAL lcURL,lcLowerURL,lcNewURL,lnAtPos,lnLastSelect
IF TYPE("this.oHost")#"O" OR ISNULL(this.oHost)
RETURN .F.
ENDIF
SET DATASESSION TO (this.oHost.DataSessionID)
lcURL=ALLTRIM(url)
this.uResult=.T.
IF this.lRelease OR NOT this.Enabled
cancel=.T.
RETURN .F.
ENDIF
lnAtPos=AT("?",lcURL)
IF lnAtPos>0
lcURL=ALLTRIM(LEFT(lcURL,lnAtPos-1))
ENDIF
this.cLastURL=this.cURL
lcLowerURL=LOWER(lcURL)
IF LOWER(LEFT(lcLowerURL,LEN(this.cVFPSProtocol)))==LOWER(this.cVFPSProtocol)
cancel=.T.
this.VFPS(lcURL)
RETURN .F.
ENDIF
lnLastSelect=SELECT()
IF NOT this.lVFPScript OR NOT this.OpenVFPScript()
IF USED("vfpscript")
USE IN vfpscript
ENDIF
SELECT (lnLastSelect)
RETURN
ENDIF
this.Enabled=.F.
SELECT vfpscript
SCAN ALL FOR BeforeNav
IF NOT EMPTY(URLMatch) AND NOT this.WildCardMatch(ALLTRIM(MLINE(URLMatch,1)),lcURL)
LOOP
ENDIF
IF NOT EMPTY(URLEval) AND (TYPE(URLEval)#"L" OR NOT EVALUATE(URLEval))
LOOP
ENDIF
IF URLCancel
cancel=.T.
ENDIF
IF NOT EMPTY(Script)
this.RunScript(ALLTRIM(Name))
ENDIF
IF NOT USED("vfpscript")
EXIT
ENDIF
SELECT vfpscript
IF NOT EMPTY(URLJump)
lcNewURL=ALLTRIM(URLJump)
this.cURL=LOWER(this.ValidURL(lcNewURL))
cancel=.T.
this.Navigate(lcNewURL,@flags,@targetframename,@postdata,@headers)
ENDIF
IF NOT Continue
EXIT
ENDIF
ENDSCAN
SELECT (lnLastSelect)
this.Enabled=.T.
ENDPROC
PROCEDURE browsetable && Browse active table based on cAlias.
LPARAMETERS tcAlias,tcClauses
LOCAL lcAlias,lnLastSelect,lcCommand
lcAlias=IIF(EMPTY(tcAlias),this.cAlias,ALLTRIM(tcAlias))
IF EMPTY(lcAlias) OR NOT USED(lcAlias)
RETURN .F.
ENDIF
lnLastSelect=SELECT()
SELECT (lcAlias)
IF BETWEEN(this.nRecNo,1,RECCOUNT())
GO this.nRecNo
ELSE
LOCATE
ENDIF
ACTIVATE SCREEN
lcCommand="BROWSE"
IF NOT EMPTY(tcClauses)
lcCommand=lcCommand+" "+tcClauses
ENDIF
&lcCommand
SELECT (lnLastSelect)
ENDPROC
PROCEDURE closetable && Close active table based on cAlias.
LPARAMETERS tcAlias
LOCAL lcAlias
SET DATASESSION TO (this.nDataSessionID)
lcAlias=IIF(EMPTY(tcAlias),this.cAlias,ALLTRIM(tcAlias))
IF NOT EMPTY(lcAlias) AND USED(lcAlias)
USE IN (lcAlias)
ENDIF
SET DATASESSION TO (this.oHost.DataSessionID)
ENDPROC
PROCEDURE commandstatechange && CommandStateChange event.
*** OLE Control Event ***
LPARAMETERS command, enable
LOCAL llEnabled
IF this.lRelease
RETURN .F.
ENDIF
IF this.lDebug
ACTIVATE SCREEN
? PROGRAM()
? "Command: "+ALLTRIM(STR(command))
? "Enable: "+IIF(enable,"ON","OFF")
ENDIF
llEnable=enable
DO CASE
CASE command=1
IF TYPE("thisform.cmdGoForward")=="O"
thisform.cmdGoForward.Enabled=llEnable
ENDIF
CASE command=2
IF this.nHistoryCount=0
llEnable=.F.
ENDIF
IF TYPE("thisform.cmdGoBack")=="O"
thisform.cmdGoBack.Enabled=llEnable
ENDIF
ENDCASE
ENDPROC
PROCEDURE Destroy
this.EraseTempFile
this.lRelease=.T.
this.cSourceFile=""
this.cSourceHTML=""
this.oAction=.NULL.
this.oSource=.NULL.
this.oUser=.NULL.
this.oHost=.NULL.
IF USED("vfpscript")
USE IN vfpscript
ENDIF
ENDPROC
PROCEDURE downloadcomplete && DownloadComplete event.
*** OLE Control Event ***
IF this.lDebug
ACTIVATE SCREEN
? PROGRAM()
ENDIF
IF TYPE("this.LocationURL")=="C"
this.cURL=LOWER(this.ValidURL(this.LocationURL))
ENDIF
this.NavigateComplete(this.cURL)
this.RunScript("OnLoad")
ENDPROC
PROCEDURE editscript && Edit specific VFP script.
LPARAMETERS tcScriptName
LOCAL lcScriptName,lcOldScriptCode,lcNewScriptCode,lnScriptNum,lcScriptNameSearch
LOCAL lcFileName,lcOldHTML,lcNewHTML,llResult,llMatch,llNoEdit,lcCR_LF
#DEFINE SCRIPT_LOC "Script"
#DEFINE NOT_FOUND_IN_FILE_LOC "not found in file"
#DEFINE IN_FILE_LOC "in file"
#DEFINE UPDATED_LOC "updated"
#DEFINE UNABLE_TO_UPDATE_SCRIPT_LOC "Unable to update script"
IF EMPTY(tcScriptName)
RETURN .F.
ENDIF
lcCR_LF=CHR(13)+CHR(10)
lcScriptName=ALLTRIM(tcScriptName)
lcFileName=this.cFileName
llMatch=.F.
FOR lnScriptNum = 1 TO this.nScriptCount
IF LOWER(lcScriptName)==LOWER(this.aScripts[lnScriptNum,1])
lcScriptName=this.aScripts[lnScriptNum,1]
lcOldScriptCode=this.aScripts[lnScriptNum,3]
llMatch=.T.
EXIT
ENDIF
ENDFOR
IF NOT llMatch
this.MsgBox(SCRIPT_LOC+[ (]+lcScriptName+[) ]+NOT_FOUND_IN_FILE_LOC+[ "]+lcFileName+[".],16)
RETURN .F.
ENDIF
lcScriptNameSearch=" "+lcScriptName+lcCR_LF
lcOldHTML=this.FileToString(lcFileName)
llNoEdit=(NOT lcScriptNameSearch$lcOldHTML)
lcNewScriptCode=this.EditString(lcOldScriptCode,lcScriptName,llNoEdit)
IF llNoEdit OR lcOldScriptCode==lcNewScriptCode
RETURN
ENDIF
IF NOT RIGHT(lcNewScriptCode,2)==lcCR_LF
lcNewScriptCode=lcNewScriptCode+lcCR_LF
ENDIF
this.aScripts[lnScriptNum,3]=lcNewScriptCode
lcNewHTML=STRTRAN(lcOldHTML,lcScriptNameSearch+lcOldScriptCode, ;
lcScriptNameSearch+lcNewScriptCode)
IF lcOldHTML==lcNewHTML
llResult=.F.
ELSE
llResult=this.StringToFile(lcNewHTML,lcFileName)
ENDIF
IF NOT llResult
this.MsgBox(UNABLE_TO_UPDATE_SCRIPT_LOC+[ (]+lcScriptName+[) ]+IN_FILE_LOC+[ "]+lcFileName+[".],16)
RETURN .F.
ENDIF
this.WaitWindow(SCRIPT_LOC+[ (]+lcScriptName+[) ]+IN_FILE_LOC+[ "]+lcFileName+[" ]+UPDATED_LOC+[.])
ENDPROC
PROCEDURE editstring && Edit string in window.
LPARAMETERS tcString,tcTitle,tlNoEdit
LOCAL lcString,lcTitle,lcTempFileName
lcString=IIF(TYPE("tcString")=="C",tcString,"")
lcTitle=IIF(TYPE("tcTitle")=="C",ALLTRIM(tcTitle),LOWER(SYS(2015)))
lcTempFileName=SYS(2023)+"\"+"~_ "+lcTitle+".htm"
IF NOT this.StringToFile(lcString,lcTempFileName)
RETURN .F.
ENDIF
ACTIVATE SCREEN
IF tlNoEdit
MODIFY FILE (lcTempFileName) NOEDIT RANGE 1,1
ELSE
MODIFY FILE (lcTempFileName) RANGE 1,1
lcString=this.FileToString(lcTempFileName)
ENDIF
ERASE (lcTempFileName)
RETURN lcString
ENDPROC
PROCEDURE erasetempfile && Erase current temporary file.
IF NOT EMPTY(this.cTempFileName)
ERASE (this.cTempFileName)
this.cTempFileName=""
ENDIF
ENDPROC
PROCEDURE Error
LPARAMETERS nError, cMethod, nLine
LOCAL lcMessage,lcMethod,lcErrorMsg,lcCodeLineMsg
#DEFINE RUNCODE_RUNTIME_ERROR_LOC "RunCode Runtime Error"
#DEFINE TAB CHR(9)
#DEFINE LF CHR(10)
#DEFINE CR CHR(13)
#DEFINE CR_LF CR+LF
IF this.lIgnoreErrors OR INLIST(nError,1113,1426,1429,2012)
RETURN
ENDIF
IF NOT EMPTY(GETPEM(thisform,"Error"))
RETURN thisform.Error(nError,cMethod,nLine)
ENDIF
lcMethod=LOWER(ALLTRIM(cMethod))
IF INLIST(LOWER(lcMethod),"goback","gofoward") OR RIGHT(lcMethod,9)==".navigate"
RETURN
ENDIF
lcErrorMsg=MESSAGE()+CR+CR+thisform.Caption+": "+this.Name+CR+ ;
"Object: "+this.Name+CR+ ;
"Error: "+ALLTRIM(STR(nError))+CR+ ;
"Method: "+lcMethod
lcCodeLineMsg=MESSAGE(1)
IF BETWEEN(nLine,1,10000) AND NOT lcCodeLineMsg="..."
lcErrorMsg=lcErrorMsg+CR+"Line: "+ALLTRIM(STR(nLine))
IF NOT EMPTY(lcCodeLineMsg)
lcErrorMsg=lcErrorMsg+CR+CR+lcCodeLineMsg
ENDIF
ENDIF
IF this.Msgbox(lcErrorMsg,17)#1
this.ReleaseHost
ENDIF
ENDPROC
PROCEDURE filetostring && Returns string contents of file.
LPARAMETERS tcFileName
LOCAL lcFileName,lnLastSelect,lcAlias,lcText
IF PARAMETERS()#1 OR TYPE("tcFileName")#"C" OR EMPTY(tcFileName)
RETURN ""
ENDIF
lcFileName=ALLTRIM(tcFileName)
IF NOT "."$lcFileName
lcFileName=lcFileName+".txt"
ENDIF
lnLastSelect=SELECT()
lcAlias=LOWER(SYS(2015))
CREATE CURSOR (lcAlias) (Text M)
APPEND BLANK
APPEND MEMO Text FROM (tcFileName) OVERWRITE
lcText=Text
USE IN (lcAlias)
SELECT (lnLastSelect)
RETURN lcText
ENDPROC
PROCEDURE framebeforenavigate && FrameBeforeNavigate event.
*** OLE Control Event ***
LPARAMETERS url, flags, targetframename, postdata, headers, cancel
IF TYPE("url")#"C"
RETURN
ENDIF
IF this.lDebug
ACTIVATE SCREEN
? PROGRAM()
? "URL: "+url
IF NOT EMPTY(targetframename)
?? " Frame: "+targetframename
ENDIF
ENDIF
this.BeforeNavigate(@url,flags,@targetframename,@postdata,@headers,@cancel)
ENDPROC
PROCEDURE gethtml && Returns HTML of current document.
LPARAMETERS tcName,tcAlias
LOCAL lcHTML,llResult
IF this.lDebug
ACTIVATE SCREEN
? PROGRAM()
? "Name: "+tcName
ENDIF
lcHTML=this.VFPScript(tcName,tcAlias,1)
llResult=(TYPE("lcHTML")=="C")
IF NOT llResult
lcHTML=""
ENDIF
IF this.lDebug AND NOT llResult
ACTIVATE SCREEN
? "Name: "+tcName+" (not found)"
ENDIF
RETURN lcHTML
ENDPROC
PROCEDURE getsourcefile && Returns file name of current source document.
IF this.lRelease
RETURN .F.
ENDIF
IF EMPTY(this.cSourceFile)
this.RefreshSource
ENDIF
RETURN this.cSourceFile
ENDPROC
PROCEDURE getsourcehtml && Returns HTML of current source document.
IF this.lRelease
RETURN .F.
ENDIF
IF EMPTY(this.cSourceHTML)
this.RefreshSource
ENDIF
RETURN this.cSourceHTML
ENDPROC
PROCEDURE goback && Navigate back URL address.
*** OLE Control Method ***
LOCAL lcURL,lcSourceFileName
IF this.nHistoryCount<2
NODEFAULT
RETURN .F.
ENDIF
lcURL=this.aHistory[this.nHistoryCount-1,1]
lcSourceFileName=this.aHistory[this.nHistoryCount-1,2]
this.nHistoryCount=this.nHistoryCount-1
IF this.nHistoryCount>0
DIMENSION this.aHistory[this.nHistoryCount,2]
ELSE
this.aHistory=""
ENDIF
this.lHistoryEnabled=.F.
IF NOT EMPTY(lcSourceFileName)
NODEFAULT
this.Navigate(lcSourceFileName)
RETURN .F.
ENDIF
IF NOT EMPTY(lcURL) AND NOT EMPTY(this.cSourceFileName) AND NOT lcURL==lcSourceFileName
NODEFAULT
this.Navigate(lcURL)
RETURN .F.
ENDIF
ENDPROC
PROCEDURE goforward && Navigate forward URL address.
*** OLE Control Method ***
DOEVENTS
ENDPROC
PROCEDURE gohome && Navigate to home URL address.
*** OLE Control Method ***
DOEVENTS
ENDPROC
PROCEDURE gosearch && Navigate to search URL address.
*** OLE Control Method ***
DOEVENTS
ENDPROC
PROCEDURE Init
LPARAMETERS tcVFPScript
DIMENSION this.aHistory[1,2]
this.aHistory=""
this.oHost=thisform
this.oUser=CREATEOBJECT("Custom")
this.oUser.Name="oCustom"
this.nDataSessionID=thisform.DataSessionID
this.cProgramPath=IIF(TYPE("this.oHost.cProgramPath")=="C",this.oHost.cProgramPath, ;
this.ClassLibrary)
IF NOT "\"$this.cBlankHTMLFile AND NOT ":"$this.cBlankHTMLFile
this.cBlankHTMLFile=LOWER(this.cProgramPath+this.cBlankHTMLFile)
ENDIF
DO CASE
CASE ISNULL(tcVFPScript)
this.cVFPScript=""
CASE EMPTY(tcVFPScript) OR TYPE("tcVFPScript")#"C"
this.cVFPScript=LOWER(FULLPATH(this.cVFPScriptTable,this.cProgramPath))
OTHERWISE
this.cVFPScript=LOWER(ALLTRIM(tcVFPScript))
ENDCASE
IF EMPTY(this.cVFPScript)
this.lVFPScript=.F.
ENDIF
this.OpenVFPScript
SELECT 0
IF this.lBlankHTMLStartup AND NOT EMPTY(this.cBlankHTMLFile) AND FILE(this.cBlankHTMLFile)
this.Navigate(this.cBlankHTMLFile)
ENDIF
SELECT 0
ENDPROC
PROCEDURE LostFocus
IF this.lDebug
ACTIVATE SCREEN
? PROGRAM()
ENDIF
this.RefreshDeactivate
ENDPROC
PROCEDURE msgbox && Message box wrapper method.
LPARAMETERS tcMessage,tnType,tcTitle
LOCAL lcMessage,lnType,lcTitle,lnResult
lcMessage=IIF(TYPE("tcMessage")#"C","",tcMessage)
lnType=IIF(TYPE("tnType")#"N",48,tnType)
lcTitle=IIF(TYPE("tcTitle")#"C",thisform.Caption,tcTitle)
ACTIVATE SCREEN
lnResult=MESSAGEBOX(lcMessage,lnType,lcTitle)
RETURN lnResult
ENDPROC
PROCEDURE navigate && Navigate to specific URL.
*** OLE Control Method ***
LPARAMETERS url, flags, targetframename, postdata, headers
LOCAL lcURL,lcNewURL
IF TYPE("url")#"C"
RETURN
ENDIF
IF this.lRelease
NODEFAULT
url=""
RETURN .F.
ENDIF
IF this.lDebug
ACTIVATE SCREEN
? PROGRAM()
? "URL: "+url
IF NOT EMPTY(targetframename)
?? " Frame: "+targetframename
ENDIF
ENDIF
lcURL=ALLTRIM(url)
IF LEFT(lcURL,LEN(this.cVFPSProtocol))==LOWER(this.cVFPSProtocol)
NODEFAULT
RETURN this.BeforeNavigate(@url,@flags,@targetframename,@postdata,@headers)
ENDIF
IF RIGHT(url,16)==SPACE(16)
this.cBeforeURL=ALLTRIM(lcURL)
this.cSourceFile=""
this.cSourceHTML=""
RETURN
ENDIF
IF NOT this.ParseSource(lcURL) OR EMPTY(this.cNewURL)
RETURN
ENDIF
NODEFAULT
url=""
RETURN this.Navigate(this.cNewURL+SPACE(16),@flags,@targetframename)
ENDPROC
PROCEDURE navigatecomplete && NavigateComplete event.
*** OLE Control Event ***
LPARAMETERS url
LOCAL lcURL,lcLocationURL,lcSourceFileName
IF TYPE("url")#"C"
RETURN
ENDIF
lcSourceFileName=this.cSourceFileName
IF this.lDebug
ACTIVATE SCREEN
? PROGRAM()
? "URL: "+url
? "Location URL: "+this.LocationURL
? "Source file name: "+lcSourceFileName
ENDIF
IF EMPTY(lcSourceFileName)
lcURL=LOWER(ALLTRIM(url))
ELSE
lcURL=lcSourceFileName
ENDIF
IF EMPTY(lcURL) OR (SUBSTR(lcURL,5,1)==":" AND NOT LEFT(lcURL,5)=="file:" AND ;
NOT LEFT(lcURL,4)=="http") OR RIGHT(lcURL,11)=="about:blank"
RETURN
ENDIF
this.cLastURL=this.cURL
this.cURL=LOWER(this.ValidURL(lcURL))
lcLocationURL=LOWER(this.ValidURL(this.LocationURL))
IF this.lRefreshMode
this.lRefreshMode=.F.
this.lHistoryEnabled=.T.
RETURN
ENDIF
IF NOT this.lHistoryEnabled
this.lHistoryEnabled=.T.
RETURN
ENDIF
lcURL=lcLocationURL
IF this.nHistoryCount>0 AND (this.aHistory[this.nHistoryCount,1]==lcURL OR ;
(NOT EMPTY(lcSourceFileName) AND this.aHistory[this.nHistoryCount,2]==lcSourceFileName))
RETURN
ENDIF
this.nHistoryCount=this.nHistoryCount+1
DIMENSION this.aHistory[this.nHistoryCount,2]
this.aHistory[this.nHistoryCount,1]=lcURL
this.aHistory[this.nHistoryCount,2]=lcSourceFileName
ENDPROC
PROCEDURE newwindow && NewWindow event.
*** OLE Control Event ***
LPARAMETERS url, flags, targetframename, postdata, headers, processed
IF TYPE("url")#"C"
RETURN
ENDIF
IF this.lDebug
ACTIVATE SCREEN
? PROGRAM()
? "URL: "+url
IF NOT EMPTY(targetframename)
?? " Frame: "+targetframename
ENDIF
ENDIF
processed=.T.
this.Navigate(@url,@flags,@targetframename,@postdata,@headers)
ENDPROC
PROCEDURE opentable && Open specified table and activate as current table by setting cAlias property.
LPARAMETERS tcFileName,tcAlias,tlExclusive,tcFilter
LOCAL lcFileName,lcAlias,lnLastSelect
this.nRecNo=0
this.cAlias=""
this.cDBF=""
this.cDBFPath=""
IF EMPTY(tcFileName)
RETURN .F.
ENDIF
lcFileName=ALLTRIM(tcFileName)
IF NOT "."$lcFileName
lcFileName=lcFileName+".dbf"
ENDIF
IF NOT FILE(lcFileName)
RETURN .F.
ENDIF
SET DATASESSION TO (this.nDataSessionID)
lcAlias=STRTRAN(IIF(EMPTY(tcAlias),this.TrimPath(lcFileName,.T.),ALLTRIM(tcAlias))," ","_")
this.cAlias=lcAlias
IF USED(lcAlias)
this.nRecNo=RECNO(lcAlias)
this.cDBF=LOWER(DBF(lcAlias))
this.cDBFPath=this.TrimFile(this.cDBF)
SET DATASESSION TO (this.oHost.DataSessionID)
RETURN
ENDIF
lnLastSelect=SELECT()
SELECT 0
IF tlExclusive
USE (lcFileName) EXCLUSIVE ALIAS (lcAlias)
ELSE
USE (lcFileName) AGAIN SHARED ALIAS (lcAlias)
ENDIF
IF NOT USED(lcAlias)
this.nRecNo=0
this.cAlias=""
this.cDBF=""
this.cDBFPath=""
SELECT (lnLastSelect)
RETURN .F.
ENDIF
this.cDBF=LOWER(DBF(lcAlias))
this.cDBFPath=this.TrimFile(this.cDBF)
IF NOT EMPTY(tcFilter)
SET FILTER TO &tcFilter
ENDIF
LOCATE
SELECT (lnLastSelect)
SET DATASESSION TO (this.oHost.DataSessionID)
ENDPROC
PROCEDURE openvfpscript && Open VFP script table.
LOCAL lcFileName,lnLastSelect,lcLastSetSafety
SET DATASESSION TO (this.oHost.DataSessionID)
IF USED("vfpscript")
RETURN
ENDIF
IF this.lRelease OR NOT this.lVFPScript OR EMPTY(this.cVFPScript)
RETURN .F.
ENDIF
lcLastSetSafety=SET("SAFETY")
SET SAFETY OFF
lnLastSelect=SELECT()
lcFileName=this.cVFPScript
IF NOT EMPTY(SYS(2000,lcFileName))
SELECT 0
USE (lcFileName) SHARED ALIAS vfpscript AGAIN
IF NOT USED()
SELECT (lnLastSelect)
IF lcLastSetSafety=="ON"
SET SAFETY ON
ELSE
SET SAFETY OFF
ENDIF
RETURN .F.
ENDIF
IF FCOUNT()<9
USE
ERASE (lcFileName)
ENDIF
ENDIF
IF EMPTY(SYS(2000,lcFileName)) OR TYPE("BeforeNav")#"L"
IF USED("vfpscript")
USE IN vfpscript
ENDIF
ERASE (lcFileName)
SELECT 0
CREATE TABLE (lcFileName) ;
(IndexValue C(10), Name C(24), HTML M, Script M, BeforeNav L, URLMatch M, ;
URLEval M, URLJump M, URLCancel L, ;
Continue L, Comment M, LastAccess T, ExecCount N(8))
USE (lcFileName) SHARED ALIAS vfpscript AGAIN
ENDIF
IF TYPE("LastAccess")#"T" OR TYPE("ExecCount")#"N"
IF USED("vfpscript")
USE IN vfpscript
ENDIF
SELECT 0
USE (lcFileName) EXCLUSIVE ALIAS vfpscript
IF NOT USED()
SELECT (lnLastSelect)
IF lcLastSetSafety=="ON"
SET SAFETY ON
ELSE
SET SAFETY OFF
ENDIF
RETURN .F.
ENDIF
IF TYPE("LastAccess")#"T"
ALTER TABLE (lcFileName) ADD COLUMN LastAccess T NULL
ENDIF
IF TYPE("ExecCount")#"N"
ALTER TABLE (lcFileName) ADD COLUMN ExecCount N(8) NULL
ENDIF
USE (lcFileName) SHARED ALIAS vfpscript AGAIN
ENDIF
IF NOT USED("vfpscript")
SELECT (lnLastSelect)
IF lcLastSetSafety=="ON"
SET SAFETY ON
ELSE
SET SAFETY OFF
ENDIF
RETURN .F.
ENDIF
SELECT vfpscript
IF KEY(1)=="INDEXVALUE"
SET ORDER TO IndexValue
ELSE
INDEX ON IndexValue TAG IndexValue ASCENDING ADDITIVE
ENDIF
SET FILTER TO NOT DELETED()
LOCATE
SELECT 0
ENDPROC
PROCEDURE parsesource && Parse source code of HTML document.
*** OLE Control Event ***
PARAMETERS url, flags, targetframename, postdata, headers, cancel
PRIVATE oTHIS
LOCAL lcURL,lcSource,lcNewURL,lcFileName,lnAtPos,llHTMLFile,llBusy
EXTERNAL ARRAY VFPScrpt
IF this.lRelease OR NOT this.lParseSource OR TYPE("url")#"C" OR EMPTY(url)
RETURN .F.
ENDIF
lcURL=ALLTRIM(url)
lcFileName=STRTRAN(lcURL,"/","\")
lnAtPos=RAT("\",lcFileName)
IF lnAtPos>0 AND LOWER(SUBSTR(lcFileName,lnAtPos+1, ;
LEN(this.cTempFilePrefix)))==this.cTempFilePrefix
RETURN .F.
ENDIF
this.cFileName=""
this.cFilePath=""
this.cSourceURL=""
this.cSourceFileName=""
llHTMLFile=.F.
lnAtPos=RAT(".",lcURL)
llHTMLFile=(lnAtPos>0 AND INLIST(LOWER(ALLTRIM(SUBSTR(lcURL,lnAtPos+1))), ;
"htm","html","asp"))
IF NOT llHTMLFile OR LOWER(lcFileName)==LOWER(this.cTempFileName) OR ;
LOWER(ALLTRIM(lcFileName))==LOWER(ALLTRIM(this.cBlankHTMLFile))
this.cFileName=lcFileName
this.cFilePath=this.TrimFile(this.cFileName)
RETURN .F.
ENDIF
lnAtPos=RAT(":",lcFileName)
IF lnAtPos#2
RETURN .F.
ENDIF
IF lnAtPos>2
lcFileName=ALLTRIM(SUBSTR(lcFileName,lnAtPos-1))
ENDIF
IF EMPTY(SYS(2000,lcFileName))
RETURN .F.
ENDIF
IF this.lDebug
ACTIVATE SCREEN
? PROGRAM()
? "URL: "+lcURL
ENDIF
llBusy=this.lBusy
this.SetBusyState(.T.)
IF NOT ":"$lcURL OR AT(":",lcURL)=2
lcURL="file://"+STRTRAN(STRTRAN(STRTRAN(lcURL,"\","/"),"///","//"),"//","/")
ENDIF
lcNewURL=""
oTHIS=this
this.cSourceURL=lcURL
this.cFileName=LOWER(lcFileName)
this.cFilePath=this.TrimFile(this.cFileName)
this.cSourceFileName=this.cFileName
this.cSourceFilePath=this.TrimFile(this.cFileName)
IF VFPScrpt(this)
lcNewURL=this.cTempFileName
ELSE
this.cSourceURL=""
this.cSourceFileName=""
this.cSourceFilePath=""
ENDIF
oTHIS=.NULL.
this.SetBusyState(llBusy)
IF TYPE("this.oHost.lRelease")=="L" AND this.oHost.lRelease
this.Visible=.F.
RETURN .F.
ENDIF
this.cURL=LOWER(this.ValidURL(lcURL))
this.cNewURL=lcNewURL
ENDPROC
PROCEDURE Refresh
*** OLE Control Method ***
IF this.lDebug
ACTIVATE SCREEN
? PROGRAM()
ENDIF
IF this.lRefresh AND NOT this.lDesign
this.RunScript("OnRefresh")
ENDIF
this.lRefresh=.T.
NODEFAULT
ENDPROC
PROCEDURE refresh2 && Refresh2 method.
*** OLE Control Method ***
LPARAMETERS level
IF this.lRelease OR NOT this.lRefresh
NODEFAULT
RETURN .F.
ENDIF
IF NOT EMPTY(this.cSourceFileName)
RETURN this.RefreshMode()
ENDIF
ENDPROC
PROCEDURE refreshdeactivate && RefreshDeactivate method for use when losing focus of the web browser control.
IF this.lRelease OR NOT this.Visible
RETURN
ENDIF
IF this.lRefreshDeactivate
this.Visible=.F.
this.Visible=.T.
RETURN
ENDIF
ENDPROC
PROCEDURE refreshmode && Set refresh mode.
LOCAL llBusy
IF this.lRelease OR EMPTY(this.cSourceFileName)
this.lRefreshMode=.F.
RETURN .F.
ENDIF
llBusy=this.lBusy
this.SetBusyState(.T.)
this.lRefreshMode=.T.
this.lHistoryEnabled=.F.
this.Navigate(this.cSourceFileName)
this.SetBusyState(llBusy)
ENDPROC
PROCEDURE refreshsource && Refresh source.
LOCAL lcFileName,lcFileName2,lnLastSelect,lcSource,lcAlias
IF this.lRelease
RETURN .F.
ENDIF
this.cSourceFile=""
this.cSourceHTML=""
IF EMPTY(this.cFileName)
RETURN .F.
ENDIF
lcFileName=this.cFileName
IF EMPTY(SYS(2000,lcFileName))
RETURN .F.
ENDIF
lcFileName2=this.TrimPath(lcFileName)
IF WEXIST(lcFileName2)
RELEASE WINDOW (lcFileName2)
ENDIF
lnLastSelect=SELECT()
lcAlias=LOWER(SYS(2015))
CREATE CURSOR (lcAlias) (Source M)
APPEND BLANK
APPEND MEMO Source FROM (lcFileName) OVERWRITE
lcSource=Source
USE
SELECT (lnLastSelect)
this.cSourceFile=lcFileName
this.cSourceHTML=lcSource
ENDPROC
PROCEDURE releasehost && Release host form.
IF this.lRelease
RETURN .F.
ENDIF
IF TYPE("this.oHost.tmrHost")#"O"
RETURN .F.
ENDIF
this.oHost.tmrHost.RunCode("oTHIS.oHost.Release")
ENDPROC
PROCEDURE runaction && Run specific action which is a specific method of object referenced by the oAction property.
LPARAMETERS tcMethod
LOCAL lcMethod,llResult,llBusy
this.uResult=.T.
IF this.lRelease OR EMPTY(tcMethod) OR TYPE("this.oAction")#"O" OR ISNULL(this.oAction)
RETURN .F.
ENDIF
lcMethod=LOWER(ALLTRIM(tcMethod))
IF EMPTY(lcMethod) OR NOT PEMSTATUS(this.oAction,lcMethod,5) OR ;
PEMSTATUS(this.oAction,lcMethod,2) OR ;
NOT PEMSTATUS(this.oAction,lcMethod,3)=="Method"
RETURN .F.
ENDIF
llBusy=this.lBusy
this.SetBusyState(.T.)
llResult=EVALUATE("this.oAction."+lcMethod+"()")
llBusy=this.lBusy
this.SetBusyState(llBusy)
RETURN llResult
ENDPROC
PROCEDURE runcode && Run specific block of VFP code without compilation.
LPARAMETERS tcCode
PRIVATE oTHIS
LOCAL lnDataSessionID,lnLastSelect,llBusy
IF this.lRelease OR EMPTY(tcCode) OR TYPE("tcCode")#"C" OR ISNULL(tcCode)
RETURN .F.
ENDIF
IF this.lDebug
ACTIVATE SCREEN
? PROGRAM()
ENDIF
llBusy=this.lBusy
this.SetBusyState(.T.)
lnLastSelect=SELECT()
lnDataSessionID=this.oHost.DataSessionID
SET DATASESSION TO (lnDataSessionID)
ACTIVATE SCREEN
oTHIS=this
this.lRunCodeMode=.T.
DO RunCode WITH (tcCode)
this.lRunCodeMode=.F.
oTHIS=.NULL.
SET DATASESSION TO (lnDataSessionID)
SELECT (lnLastSelect)
this.SetBusyState(llBusy)
ENDPROC
PROCEDURE runscript && Run specific VFP script.
LPARAMETERS tcScript,tcAlias
LOCAL llResult
IF this.lRelease OR EMPTY(tcScript)
RETURN .F.
ENDIF
IF this.lDebug
ACTIVATE SCREEN
? PROGRAM()
? "Script: "+tcScript
ENDIF
llResult=this.VFPScript(tcScript,tcAlias,0)
IF this.lDebug AND NOT llResult
ACTIVATE SCREEN
? "Script: "+tcScript+" (not found)"
ENDIF
RETURN llResult
ENDPROC
PROCEDURE setbusystate && Set busy state method.
LPARAMETERS tlBusy
IF this.lBusy=tlBusy
RETURN
ENDIF
this.lBusy=tlBusy
ENDPROC
PROCEDURE setparam && Set URL parameters method.
LPARAMETERS tcParam
LOCAL lcParam,lcParameter,lcParamDelimiter,lnParamTotal,lnCount,lnAtPos
lcParam=IIF(EMPTY(tcParam),"",ALLTRIM(tcParam))
lnAtPos=AT("?",lcParam)
IF lnAtPos=0
lcParam=""
ELSE
lcParam=ALLTRIM(SUBSTR(lcParam,lnAtPos+1))
ENDIF
this.nParamCount=0
DIMENSION this.aParam[128]
this.aParam=.F.
IF EMPTY(lcParam)
this.cParam=""
RETURN
ENDIF
IF RIGHT(lcParam,1)=="/"
lcParam=ALLTRIM(LEFT(lcParam,LEN(lcParam)-1))
ENDIF
this.cParam=lcParam
lcParamDelimiter=this.cParamDelimiter
lnParamTotal=MIN(OCCURS(lcParamDelimiter,lcParam)+1,128)
FOR lnCount = 1 TO lnParamTotal
this.nParamCount=this.nParamCount+1
lnAtPos=AT(lcParamDelimiter,lcParam)
IF lnAtPos=0
lcParameter=ALLTRIM(lcParam)
ELSE
lcParameter=ALLTRIM(LEFT(lcParam,lnAtPos-1))
lcParam=ALLTRIM(SUBSTR(lcParam,lnAtPos+1))
ENDIF
this.aParam[lnCount]=lcParameter
ENDFOR
ENDPROC
PROCEDURE skiprecord && Skip record of active table based on cAlias.
LPARAMETERS tnRecords
LOCAL lnRecords,lcAlias,lnRecNo,lnLastSelect,lnLastRecNo
SET DATASESSION TO (this.nDataSessionID)
lcAlias=this.cAlias
IF EMPTY(lcAlias) OR NOT USED(lcAlias)
SET DATASESSION TO (this.oHost.DataSessionID)
RETURN .F.
ENDIF
lnRecords=IIF(EMPTY(tnRecords),0,tnRecords)
lnLastSelect=SELECT()
SELECT (lcAlias)
IF EOF()
GO BOTTOM
ENDIF
lnLastRecNo=RECNO()
lnRecNo=IIF(this.nRecNo>0,this.nRecNo,RECNO())
GO lnRecNo
SKIP lnRecords
IF BOF()
GO TOP
ENDIF
IF EOF()
GO BOTTOM
ENDIF
this.nRecNo=RECNO()
GO lnLastRecNo
SELECT (lnLastSelect)
SET DATASESSION TO (this.oHost.DataSessionID)
this.RunScript("RefreshData")
ENDPROC
PROCEDURE statustextchange && StatusTextChange event.
*** OLE Control Event ***
LPARAMETERS text
IF this.lRelease OR this.lBusy OR NOT this.oHost.Visible
RETURN .F.
ENDIF
IF TYPE("text")=="C" AND NOT EMPTY(text)
SET MESSAGE TO LEFT(text,254)
ELSE
SET MESSAGE TO
ENDIF
ENDPROC
PROCEDURE stringtofile && Saves string contents to file.
LPARAMETERS tcText,tcFileName
LOCAL lcFileName,lnLastSelect,lcAlias
IF PARAMETERS()#2 OR TYPE("tcText")#"C" OR TYPE("tcFileName")#"C" OR EMPTY(tcFileName)
RETURN .F.
ENDIF
lcFileName=ALLTRIM(tcFileName)
IF NOT "."$lcFileName
lcFileName=lcFileName+".txt"
ENDIF
lnLastSelect=SELECT()
lcAlias=LOWER(SYS(2015))
CREATE CURSOR (lcAlias) (Text M)
INSERT INTO (lcAlias) (Text) VALUES (tcText)
COPY MEMO Text TO (tcFileName)
USE IN (lcAlias)
SELECT (lnLastSelect)
ENDPROC
PROCEDURE trimext && Returns file name without extension of specified file name.
LPARAMETERS tcFileName,tlPlatformType
LOCAL lcFileName,lnAtPos,lnAtPos2
lcFileName=tcFileName
lnAtPos=RAT(".",lcFileName)
IF lnAtPos>0
lnAtPos2=RAT(":",lcFileName)
IF lnAtPos>lnAtPos2
lcFileName=LEFT(lcFileName,lnAtPos-1)
ENDIF
ENDIF
IF tlPlatformType
lcFileName=IIF(_dos OR _unix,UPPER(lcFileName),LOWER(lcFileName))
ENDIF
RETURN ALLTRIM(lcFileName)
ENDPROC
PROCEDURE trimfile && Returns path of specified file name.
LPARAMETERS tcFileName,lPlatType
LOCAL lcFileName,lnAtPos
lnAtPos=RAT("\",tcFileName)
lcFileName=ALLTRIM(IIF(lnAtPos=0,tcFileName,LEFT(tcFileName,lnAtPos)))
IF lPlatType
lcFileName=IIF(_dos OR _unix,UPPER(lcFileName),LOWER(lcFileName))
ENDIF
RETURN lcFileName
ENDPROC
PROCEDURE trimpath && Returns file name without path of specified file name.
LPARAMETERS tcFileName,tlTrimExt,tlPlatformType
LOCAL lcFileName,lnAtPos
IF EMPTY(tcFileName)
RETURN ""
ENDIF
lcFileName=tcFileName
lnAtPos=AT(":",lcFileName)
IF lnAtPos>0
lcFileName=SUBSTR(lcFileName,lnAtPos+1)
ENDIF
IF tlTrimExt
lcFileName=this.TrimExt(lcFileName)
ENDIF
IF tlPlatformType
lcFileName=IIF(_dos OR _unix,UPPER(lcFileName),LOWER(lcFileName))
ENDIF
lcFileName=ALLTRIM(SUBSTR(lcFileName,AT("\",lcFileName,;
MAX(OCCURS("\",lcFileName),1))+1))
DO WHILE LEFT(lcFileName,1)=="."
lcFileName=ALLTRIM(SUBSTR(lcFileName,2))
ENDDO
DO WHILE RIGHT(lcFileName,1)=="."
lcFileName=ALLTRIM(LEFT(lcFileName,LEN(lcFileName)-1))
ENDDO
RETURN lcFileName
ENDPROC
PROCEDURE validateurl && Validates URL.
LPARAMETERS tcURL
LOCAL lcURL,lnLastSelect
lcURL=ALLTRIM(tcURL)
IF this.lRelease OR lcURL==this.cLastURL OR ;
LOWER(lcURL)==LOWER(ALLTRIM(this.cBlankHTMLFile))
RETURN
ENDIF
SET DATASESSION TO (this.oHost.DataSessionID)
lnLastSelect=SELECT()
IF NOT this.OpenVFPScript()
SELECT (lnLastSelect)
RETURN
ENDIF
SELECT vfpscript
SCAN ALL FOR BeforeNav AND URLCancel
IF NOT EMPTY(URLMatch) AND NOT this.WildCardMatch(ALLTRIM(MLINE(URLMatch,1)),lcURL)
LOOP
ENDIF
IF NOT EMPTY(URLEval) AND (TYPE(URLEval)#"L" OR NOT EVALUATE(URLEval))
LOOP
ENDIF
this.cURL=this.this.cLastURL
SELECT (lnLastSelect)
RETURN .F.
ENDSCAN
SELECT (lnLastSelect)
ENDPROC
PROCEDURE validurl && Returns validated URL.
LPARAMETERS tcURL
LOCAL lcURL
IF EMPTY(tcURL)
RETURN ""
ENDIF
lcURL=ALLTRIM(tcURL)
IF NOT ":"$lcURL AND NOT LOWER(LEFT(lcURL,4))=="http" AND ;
NOT LOWER(LEFT(lcURL,5))=="file:" AND (LOWER(LEFT(lcURL,4))=="www." OR ;
INLIST(LOWER(RIGHT(lcURL,4)),".com",".gov",".net") OR ;
(NOT SUBSTR(lcURL,2,1)==":" AND NOT LEFT(lcURL,2)=="\\"))
lcURL="http://"+lcURL
ENDIF
IF SUBSTR(PADR(lcURL,5),5,1)==":"
lcURL=STRTRAN(STRTRAN(lcURl,"\","/"),"///","//")
ELSE
IF NOT ":"$lcURL OR AT(":",lcURL)=2
lcURL="file://"+STRTRAN(STRTRAN(STRTRAN(lcURL,"\","/"),"///","//"),"//","/")
ENDIF
ENDIF
RETURN lcURL
ENDPROC
PROCEDURE vfps && Executes VFP script based on specified URL.
LPARAMETERS tcCommand
LOCAL lcCommand,lcParam1,lcParameter,lcAlias,lcVFPSProtocol,lnVFPSProtocolLen
LOCAL lcVariable,lcCode,lnCount,lnAtPos,llEnabled,luResult,llBusy
IF this.lRelease OR EMPTY(tcCommand) OR TYPE("this.oHost")#"O" OR ISNULL(this.oHost)
RETURN .F.
ENDIF
llBusy=this.lBusy
this.SetBusyState(.T.)
llEnabled=this.Enabled
IF this.oHost.Visible
this.Enabled=.F.
ENDIF
lcCommand=LOWER(ALLTRIM(tcCommand))
lcVFPSProtocol=LOWER(this.cVFPSProtocol)
lnVFPSProtocolLen=LEN(lcVFPSProtocol)
IF LEFT(lcCommand,lnVFPSProtocolLen)==lcVFPSProtocol
lcCommand=ALLTRIM(SUBSTR(lcCommand,lnVFPSProtocolLen+1))
ENDIF
DO WHILE LEFT(lcCommand,1)=="/"
lcCommand=ALLTRIM(SUBSTR(lcCommand,2))
ENDDO
DO WHILE RIGHT(lcCommand,1)=="/"
lcCommand=ALLTRIM(LEFT(lcCommand,LEN(lcCommand)-1))
ENDDO
lnAtPos=AT("?",lcCommand)
IF lnAtPos>0
this.SetParam(lcCommand)
lcCommand=ALLTRIM(LEFT(lcCommand,lnAtPos-1))
ENDIF
FOR lnCount = 1 TO this.nParamCount
lcParameter=this.aParam[lnCount]
lnAtPos=AT("=",lcParameter)
IF lnAtPos=0
lcVariable=""
ELSE
lcVariable=ALLTRIM(LEFT(lcParameter,lnAtPos-1))
lcParameter=ALLTRIM(SUBSTR(lcParameter,lnAtPos+1))
ENDIF
IF LEFT(lcParameter,1)=="(" AND RIGHT(lcParameter,1)==")"
IF STRTRAN(STRTRAN(lcParameter,CHR(9),"")," ","")=="()"
this.aParam[lnCount]=""
ELSE
this.aParam[lnCount]=EVALUATE(lcParameter)
ENDIF
ELSE
this.aParam[lnCount]=lcParameter
ENDIF
IF NOT EMPTY(lcVariable) AND NOT LEFT(lcVariable,1)==";"
lcParameter=this.aParam[lnCount]
IF NOT "."$lcVariable
PRIVATE (lcVariable)
ENDIF
lcCode=lcVariable+"=lcParameter"
&lcCode
ENDIF
ENDFOR
lcParam1=this.aParam[1]
IF this.lDebug
ACTIVATE SCREEN
? PROGRAM()
? "Command: "+lcCommand+" Param: "+this.cParam
ENDIF
DO CASE
CASE lcCommand=="refresh"
luResult=this.Refresh2()
CASE lcCommand=="releasehost"
luResult=this.ReleaseHost()
CASE lcCommand=="runaction"
luResult=this.RunAction(lcParam1)
CASE lcCommand=="runmethod"
lcParam1=this.cParam
IF NOT RIGHT(lcParam1,1)==")"
lcParam1=lcParam1+"()"
ENDIF
luResult=this.&lcParam1
CASE lcCommand=="runcode"
luResult=this.RunCode(lcParam1)
CASE lcCommand=="runscript"
lcAlias=""
lnAtPos=AT("::",lcParam1)
IF lnAtPos>0
lcAlias=ALLTRIM(LEFT(lcParam1,lnAtPos-1))
lcParam1=ALLTRIM(SUBSTR(lcParam1,lnAtPos+2))
ENDIF
luResult=this.RunScript(lcParam1,lcAlias)
CASE lcCommand=="viewsource"
luResult=this.ViewSource()
OTHERWISE
luResult=.F.
ENDCASE
this.Enabled=llEnabled
this.SetBusyState(llBusy)
RETURN luResult
ENDPROC
PROCEDURE vfpscript && Executes specific VFP script.
LPARAMETERS tcName,tcAlias,tnCode
LOCAL lcName,lcAlias,lnLastSelect,lnRecNo,ltDateTime,llMatch
LOCAL llMatch,lcScriptCode,lcHTML
IF TYPE("this.oHost")#"O" OR ISNULL(this.oHost)
RETURN .F.
ENDIF
SET DATASESSION TO (this.oHost.DataSessionID)
this.uResult=.T.
IF this.lRelease OR EMPTY(tcName) OR TYPE("tnCode")#"N"
RETURN .F.
ENDIF
ltDateTime=DATETIME()
lcName=LOWER(ALLTRIM(tcName))
lcAlias=IIF(EMPTY(tcAlias),"vfpscript",LOWER(ALLTRIM(tcAlias)))
lnLastSelect=SELECT()
llMatch=.F.
lcScriptCode=""
lcHTML=""
FOR lnCount = 1 TO this.nScriptCount
IF NOT LOWER(this.aScripts[lnCount,1])==lcName
LOOP
ENDIF
llMatch=.T.
lcScriptCode=this.aScripts[lnCount,2]
lcHTML=lcScriptCode
ENDFOR
IF NOT llMatch
IF EMPTY(tcAlias) AND NOT this.OpenVFPScript()
SELECT (lnLastSelect)
RETURN .F.
ENDIF
IF NOT USED(lcAlias)
SELECT (lnLastSelect)
RETURN .F.
ENDIF
SELECT (lcAlias)
lnRecNo=IIF(EOF() OR RECNO()>RECCOUNT(),0,RECNO())
IF NOT LOWER(ALLTRIM(Name))==lcName
LOCATE FOR LOWER(ALLTRIM(Name))==lcName
ENDIF
llMatch=(NOT EMPTY(Name))
IF llMatch
IF TYPE("LastAccess")=="T"
REPLACE LastAccess WITH ltDateTime, ExecCount WITH ExecCount+1
ENDIF
lcScriptCode=Script
lcHTML=HTML
ENDIF
IF lnRecNo=0
GO BOTTOM
ELSE
GO lnRecNo
ENDIF
ENDIF
SELECT (lnLastSelect)
DO CASE
CASE tnCode=0
IF this.lDesign
this.EditScript(lcName)
RETURN
ENDIF
RETURN this.RunCode(lcScriptCode)
CASE tnCode=1
RETURN lcHTML
ENDCASE
RETURN .F.
ENDPROC
PROCEDURE viewsource && View source of current document.
LPARAMETERS tlNoWait,tlNoEdit
LOCAL lcFileName
#DEFINE HTML_SOURCE_NOT_AVAILABLE_LOC "HTML source not available"
IF this.lRelease
RETURN .F.
ENDIF
this.lViewSourceMode=.F.
this.GetSourceHTML()
lcFileName=this.GetSourceFile()
IF EMPTY(lcFileName) OR EMPTY(SYS(2000,lcFileName))
this.WaitWindow(HTML_SOURCE_NOT_AVAILABLE_LOC)
RETURN .F.
ENDIF
IF tlNoWait
IF tlNoEdit
MODIFY FILE (lcFileName) NOEDIT NOWAIT
ELSE
MODIFY FILE (lcFileName) NOWAIT
ENDIF
RETURN
ENDIF
this.lViewSourceMode=.T.
IF tlNoEdit
MODIFY FILE (lcFileName) NOEDIT
ELSE
MODIFY FILE (lcFileName)
IF LASTKEY()#27
this.lHistoryEnabled=.F.
this.Navigate(lcFileName)
ENDIF
ENDIF
this.lViewSourceMode=.F.
ENDPROC
PROCEDURE waitwindow && Wait window wrapper method.
LPARAMETERS tcText,tlWait
LOCAL lcText
WAIT CLEAR
IF EMPTY(tcText)
RETURN
ENDIF
lcText=LEFT(tcText,254)
DO CASE
CASE TYPE("tlWait")=="L"
IF tlWait
WAIT WINDOW tcText
ELSE
WAIT WINDOW tcText NOWAIT
ENDIF
CASE TYPE("tlWait")=="N"
WAIT WINDOW tcText TIMEOUT (tlWait)
OTHERWISE
RETURN .F.
ENDCASE
ENDPROC
PROCEDURE wildcardmatch && Returns .T. if wild card string is matched to specific string.
LPARAMETERS tcMatchExpList,tcExpressionSearched,tlMatchAsIs
LOCAL lcMatchExpList,lcExpressionSearched,llMatchAsIs,lcMatchExpList2
LOCAL lnMatchLen,lnExpressionLen,lnMatchCount,lnCount,lnCount2,lnSpaceCount
LOCAL lcMatchExp,lcMatchType,lnMatchType,lnAtPos,lnAtPos2
LOCAL llMatch,llMatch2
IF EMPTY(tcExpressionSearched)
IF EMPTY(tcMatchExpList) OR ALLTRIM(tcMatchExpList)=="*"
RETURN
ENDIF
RETURN .F.
ENDIF
lcMatchExpList=LOWER(ALLTRIM(STRTRAN(tcMatchExpList,TAB," ")))
lcExpressionSearched=LOWER(ALLTRIM(STRTRAN(tcExpressionSearched,TAB," ")))
lnExpressionLen=LEN(lcExpressionSearched)
IF lcExpressionSearched==lcMatchExpList
RETURN
ENDIF
llMatchAsIs=tlMatchAsIs
IF LEFT(lcMatchExpList,1)==["] AND RIGHT(lcMatchExpList,1)==["]
llMatchAsIs=.T.
lcMatchExpList=ALLTRIM(SUBSTR(lcMatchExpList,2,LEN(lcMatchExpList)-2))
ENDIF
IF NOT llMatchAsIs AND " "$lcMatchExpList
llMatch=.F.
lnSpaceCount=OCCURS(" ",lcMatchExpList)
lcMatchExpList2=lcMatchExpList
lnCount=0
DO WHILE .T.
lnAtPos=AT(" ",lcMatchExpList2)
IF lnAtPos=0
lcMatchExp=ALLTRIM(lcMatchExpList2)
lcMatchExpList2=""
ELSE
lnAtPos2=AT(["],lcMatchExpList2)
IF lnAtPos2lnAtPos
lnAtPos=lnAtPos2
ENDIF
ENDIF
lcMatchExp=ALLTRIM(LEFT(lcMatchExpList2,lnAtPos))
lcMatchExpList2=ALLTRIM(SUBSTR(lcMatchExpList2,lnAtPos+1))
ENDIF
IF EMPTY(lcMatchExp)
EXIT
ENDIF
lcMatchType=LEFT(lcMatchExp,1)
DO CASE
CASE lcMatchType=="+"
lnMatchType=1
CASE lcMatchType=="-"
lnMatchType=-1
OTHERWISE
lnMatchType=0
ENDCASE
IF lnMatchType#0
lcMatchExp=ALLTRIM(SUBSTR(lcMatchExp,2))
ENDIF
llMatch2=this.WildCardMatch(lcMatchExp,lcExpressionSearched,.T.)
IF (lnMatchType=1 AND NOT llMatch2) OR (lnMatchType=-1 AND llMatch2)
RETURN .F.
ENDIF
llMatch=(llMatch OR llMatch2)
IF lnAtPos=0
EXIT
ENDIF
ENDDO
RETURN llMatch
ELSE
IF LEFT(lcMatchExpList,1)=="~"
RETURN (DIFFERENCE(ALLTRIM(SUBSTR(lcMatchExpList,2)),lcExpressionSearched)>=3)
ENDIF
ENDIF
lnMatchCount=OCCURS(",",lcMatchExpList)+1
IF lnMatchCount>1
lcMatchExpList=","+ALLTRIM(lcMatchExpList)+","
ENDIF
FOR lnCount = 1 TO lnMatchCount
IF lnMatchCount=1
lcMatchExp=LOWER(ALLTRIM(lcMatchExpList))
lnMatchLen=LEN(lcMatchExp)
ELSE
lnAtPos=AT(",",lcMatchExpList,lnCount)
lnMatchLen=AT(",",lcMatchExpList,lnCount+1)-lnAtPos-1
lcMatchExp=LOWER(ALLTRIM(SUBSTR(lcMatchExpList,lnAtPos+1,lnMatchLen)))
ENDIF
FOR lnCount2 = 1 TO OCCURS("?",lcMatchExp)
lnAtPos=AT("?",lcMatchExp)
IF lnAtPos>lnExpressionLen
IF (lnAtPos-1)=lnExpressionLen
lcExpressionSearched=lcExpressionSearched+"?"
ENDIF
EXIT
ENDIF
lcMatchExp=STUFF(lcMatchExp,lnAtPos,1,SUBSTR(lcExpressionSearched,lnAtPos,1))
ENDFOR
IF EMPTY(lcMatchExp) OR lcExpressionSearched==lcMatchExp OR ;
lcMatchExp=="*" OR lcMatchExp=="?" OR lcMatchExp=="%%"
RETURN
ENDIF
IF LEFT(lcMatchExp,1)=="*"
RETURN (SUBSTR(lcMatchExp,2)==RIGHT(lcExpressionSearched,LEN(lcMatchExp)-1))
ENDIF
IF LEFT(lcMatchExp,1)=="%" AND RIGHT(lcMatchExp,1)=="%" AND ;
SUBSTR(lcMatchExp,2,lnMatchLen-2)$lcExpressionSearched
RETURN
ENDIF
lnAtPos=AT("*",lcMatchExp)
IF lnAtPos>0 AND (lnAtPos-1)<=lnExpressionLen AND ;
LEFT(lcExpressionSearched,lnAtPos-1)==LEFT(lcMatchExp,lnAtPos-1)
RETURN
ENDIF
ENDFOR
RETURN .F.
ENDPROC
ENDDEFINE
DEFINE CLASS _webbrowser4 AS olecontrol && Web browser control for Internet Explorer 4.0.
*< CLASSDATA: Baseclass="olecontrol" Timestamp="" Scale="Pixels" Uniqueid="" Nombre="_webbrowser4" Parent="" ObjName="_webbrowser4" OLEObject="C:\WINNT\System32\shdocvw.dll" Value="0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAPgADAP7/CQAGAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAEAAAAgAAAAEAAAD+////AAAAAAAAAAD////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/////v////7////+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////1IAbwBvAHQAIABFAG4AdAByAHkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAUA//////////8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIBPrHeVmb0BAwAAAEABAAAAAAAAAwBPAGwAZQBPAGIAagBlAGMAdABEAGEAdABhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAgEDAAAAAgAAAP////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqAAAAAAAAAADAEEAYwBjAGUAcwBzAE8AYgBqAFMAaQB0AGUARABhAHQAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJgACAP///////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAA4AAAAAAAAAAMAQwBoAGEAbgBnAGUAZABQAHIAbwBwAHMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAIA////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAQAAAAAAAAAAwAAAP7////+////BAAAAP7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9h+VaICjTQEalrAMBP1wWiTAAAAFYKAABWCgAAAQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAATAAAAAAAAAAAAAAAOAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAA4NBXAHM1zxGuaQgAKy4SYggAAAAAAAAATAAAAAEUAgAAAAAAwAAAAAAAAEaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==" />
*
*m: addprop && Add new property.
*m: beforenavigate && BeforeNavigate event.
*m: beforeretrieval && BeforeRetrieval event.
*m: browsetable && Browse active table based on cAlias.
*m: closetable && Close active table based on cAlias.
*m: editscript && Edit specific VFP script.
*m: editstring && Edit string in window.
*m: erasetempfile && Erase current temporary file.
*m: filetostring && Returns string contents of file.
*m: framebeforenavigate && FrameBeforeNavigate event.
*m: gethtml && Returns HTML of current document.
*m: getsourcefile && Returns file name of current source document.
*m: getsourcehtml && Returns HTML of current source document.
*m: msgbox && Message box wrapper method.
*m: navigatecomplete && NavigateComplete event.
*m: newwindow && NewWindow event.
*m: opentable && Open specified table and activate as current table by setting cAlias property.
*m: openvfpscript && Open VFP script table.
*m: parsesource && Parse source code of HTML document.
*m: refreshdeactivate && RefreshDeactivate method for use when losing focus of the web browser control.
*m: refreshmode && Set refresh mode.
*m: refreshsource && Refresh source.
*m: releasehost && Release host form.
*m: runaction && Run specific action which is a specific method of object referenced by the oAction property.
*m: runcode && Run specific block of VFP code without compilation.
*m: runscript && Run specific VFP script.
*m: setbusystate && Set busy state method.
*m: setparam && Set URL parameters method.
*m: skiprecord && Skip record of active table based on cAlias.
*m: stringtofile && Saves string contents to file.
*m: trimext && Returns file name without extension of specified file name.
*m: trimfile && Returns path of specified file name.
*m: trimpath && Returns file name without path of specified file name.
*m: validateurl && Validates URL.
*m: validurl && Returns validated URL.
*m: vfps && Executes VFP script based on specified URL.
*m: vfpscript && Executes specific VFP script.
*m: viewsource && View source of current document.
*m: waitwindow && Wait window wrapper method.
*m: wildcardmatch && Returns .T. if wild card string is matched to specific string.
*p: calias && Returns table alias of active table set automatially when using the OpenTable method.
*p: cbeforeurl && Current URL before document is fully retrieved.
*p: cblankhtmlfile && Specifies blank HTM file.
*p: cdbf && Returns file name of active table set automatially when using the OpenTable method.
*p: cdbfpath && Returns path of active table set automatially when using the OpenTable method.
*p: cfilename && Returns file name of current document.
*p: cfilepath && Returns path of current document.
*p: clasturl && Last URL.
*p: cnewurl && URL before document is fully retrieved.
*p: cparam && URL parameter string.
*p: cparamdelimiter && URL parameter delimiter character.
*p: cparsefileext && File extension list of file to parse in pre-processing mode.
*p: cprogrampath && Web browser control class path.
*p: csourcefile && File name of current document.
*p: csourcefilename && File name of current source document.
*p: csourcefilepath && Path of current source document.
*p: csourcehtml && HTML of current source document.
*p: csourceurl && URL of current source document.
*p: ctempfilename && File name of temporary file document.
*p: ctempfileprefix && Prefix used for file name of temporary file document.
*p: curl && Current URL.
*p: cuserid && User ID - user defined - not used internally.
*p: cusername && User name - user defined - not used internally.
*p: cversion && Version of web browser control subclass.
*p: cvfpscript && VFP script program file name.
*p: cvfpscripttable && VFP script table file name.
*p: cvfpsprotocol && Default VFP script protocol string.
*p: lblankhtmlstartup && Enables blank startup web page.
*p: lbusy && Web browser busy mode.
*p: ldebug && Debug mode.
*p: ldesign && Design mode.
*p: ldhtml && Returns .T. if web browser supports dynamic HTML.
*p: lhistoryenabled && URL history tracking enabled.
*p: lignoreerrors
*p: lparsesource && Enables parse document source mode.
*p: lrefresh && Determines if the control is refreshed with the Refresh method is executed.
*p: lrefreshdeactivate && Enabled auto execution of RefreshDeactivate method for LostFocus.
*p: lrefreshmode && Refresh document mode.
*p: lrelease && Indicates the object's Release method has been executed and the object is in the process of being released from memory.
*p: lruncodemode && Run code mode.
*p: lvfpscript && Enables VFP script mode.
*p: lviewsourcemode && View source mode.
*p: ndatasessionid && Returns data session of table alias of active table set automatially when using the OpenTable method.
*p: nhistorycount && Returns length of URL history array.
*p: nparamcount && Returns length of URL parameter array.
*p: nrecno && Returns current record number of active table set automatially when using the OpenTable method.
*p: nscriptcount && Returns length of VFP script array.
*p: nuserlevel && User level - user defined - not used internally.
*p: oaction && User action object - user defined - not used internally.
*p: ohost && Host form - same as THISFORM.
*p: osource && Source object - user defined - not used internally.
*p: ouser && User object - user defined - not used internally.
*p: uresult && Variant result value.
*p: ureturn && Variant return value.
*p: uvalue && Variant value - user defined - not used internally.
*a: ahistory[1,2] && URL address history array.
*a: aparam[1,0] && URL parameters array.
*a: ascripts[1,0] && VFP scripts array.
*
*
calias =
cbeforeurl =
cblankhtmlfile = Blank.htm
cdbf =
cdbfpath =
cfilename =
cfilepath =
clasturl =
cnewurl =
cparam =
cparamdelimiter = &
cparsefileext = htm;html;asp
cprogrampath =
csourcefile =
csourcefilename =
csourcefilepath =
csourcehtml =
csourceurl =
ctempfilename =
ctempfileprefix = _temp
curl =
cuserid =
cusername =
cversion = Web Browser 04.01.0016
cvfpscript =
cvfpscripttable =
cvfpsprotocol = vfps:
Height = 100
ldhtml = .T.
Name = "_webbrowser4"
ndatasessionid = 0
nhistorycount = 0
nrecno = 0
nscriptcount = 0
nuserlevel = 0
oaction = .NULL.
ohost = .NULL.
osource = .NULL.
ouser = .NULL.
TabStop = .F.
uresult = .T.
ureturn = .T.
uvalue = .T.
Width = 100
*
PROCEDURE addprop && Add new property.
LPARAMETERS toObject,tcProperty,tuValue
LOCAL lcFileName,llAddPropLibSet,lvResult
lcFileName=this.cProgramPath+"AddProp5.fll"
IF NOT FILE(lcFileName)
RETURN .F.
ENDIF
llAddPropLibSet=(ATC(lcFileName,SET("LIBRARY"))>0)
IF NOT llAddPropLibSet
SET LIBRARY TO (lcFileName) ADDITIVE
ENDIF
lvResult=AddProp(toObject,tcProperty,tuValue)
IF NOT llAddPropLibSet
RELEASE LIBRARY (lcFileName)
ENDIF
RETURN lvResult
ENDPROC
PROCEDURE beforenavigate && BeforeNavigate event.
*** OLE Control Event ***
PARAMETERS url, flags, targetframename, postdata, headers, cancel
LOCAL lcURL,lcNewURL,lcSource,llJump,llMailTo,lcFileExt,lnAtPos,lnHistory
IF this.lRelease OR this.lBusy
ACTIVATE SCREEN
? PROGRAM()
? "Busy"
? "URL: "+url
IF NOT EMPTY(targetframename)
?? " Frame: "+targetframename
ENDIF
cancel=.T.
RETURN .F.
ENDIF
this.SetBusyState(.T.)
IF this.lDebug
ACTIVATE SCREEN
? PROGRAM()
? "URL: "+url
IF NOT EMPTY(targetframename)
?? " Frame: "+targetframename
ENDIF
ENDIF
lcURL=ALLTRIM(url)
this.SetParam(lcURL)
llVisible=this.Visible
llMailTo=(LOWER(LEFT(lcURL,7))=="mailto:")
IF NOT llMailTo
this.cBeforeURL=lcURL
ENDIF
lnAtPos=RAT(".",lcURL)
lcFileExt=IIF(lnAtPos=0,CHR(0),ALLTRIM(SUBSTR(lcURL,lnAtPos+1)))
IF NOT this.lParseSource OR ATC(";"+lcFileExt+";",";"+this.cParseFileExt+";")=0 OR ;
CHR(1)$lcURL OR NOT FILE(lcURL)
IF NOT this.lParseSource
this.cFileName=""
ENDIF
this.cSourceURL=""
this.BeforeRetrieval(@url,@flags,@targetframename,@postdata, ;
@headers,@cancel)
IF NOT cancel
this.cFileName=""
this.cSourceFile=""
this.cSourceFileName=""
this.cSourceHTML=""
ENDIF
this.SetBusyState(.F.)
RETURN
ENDIF
IF NOT this.BeforeRetrieval(@url,@flags,@targetframename,@postdata, ;
@headers,@cancel) OR cancel
IF NOT cancel
this.cSourceURL=""
this.cSourceFile=""
this.cSourceHTML=""
ENDIF
this.SetBusyState(.F.)
RETURN .F.
ENDIF
IF llMailTo OR (NOT EMPTY(this.cTempFileName) AND LOWER(url)==LOWER(this.cTempFileName))
this.SetBusyState(.F.)
RETURN .F.
ENDIF
IF NOT cancel
this.cSourceFile=""
this.cSourceHTML=""
ENDIF
IF NOT this.ParseSource(lcURL) OR EMPTY(this.cNewURL)
this.SetBusyState(.F.)
RETURN
ENDIF
cancel=.T.
this.cSourceFile=""
this.cSourceHTML=""
this.Navigate(this.cNewURL,12,@targetframename)
this.SetBusyState(.F.)
ENDPROC
PROCEDURE BeforeNavigate2
*** OLE Control Event ***
LPARAMETERS pdisp, url, flags, targetframename, postdata, headers, cancel
RETURN this.BeforeNavigate(@url,@flags,@targetframename,@postdata,@headers,@cancel)
ENDPROC
PROCEDURE beforeretrieval && BeforeRetrieval event.
PARAMETERS url, flags, targetframename, postdata, headers, cancel
LOCAL lcURL,lcLowerURL,lcNewURL,lnAtPos,lnLastSelect
IF TYPE("this.oHost")#"O" OR ISNULL(this.oHost)
RETURN .F.
ENDIF
SET DATASESSION TO (this.oHost.DataSessionID)
lcURL=ALLTRIM(url)
this.uResult=.T.
IF this.lRelease OR NOT this.Enabled
cancel=.T.
RETURN .F.
ENDIF
lnAtPos=AT("?",lcURL)
IF lnAtPos>0
lcURL=ALLTRIM(LEFT(lcURL,lnAtPos-1))
ENDIF
this.cLastURL=this.cURL
lcLowerURL=LOWER(lcURL)
IF LOWER(LEFT(lcLowerURL,LEN(this.cVFPSProtocol)))==LOWER(this.cVFPSProtocol)
cancel=.T.
this.VFPS(lcURL)
RETURN .F.
ENDIF
lnLastSelect=SELECT()
IF NOT this.lVFPScript OR NOT this.OpenVFPScript()
IF USED("vfpscript")
USE IN vfpscript
ENDIF
SELECT (lnLastSelect)
RETURN
ENDIF
this.Enabled=.F.
SELECT vfpscript
SCAN ALL FOR BeforeNav
IF NOT EMPTY(URLMatch) AND NOT this.WildCardMatch(ALLTRIM(MLINE(URLMatch,1)),lcURL)
LOOP
ENDIF
IF NOT EMPTY(URLEval) AND (TYPE(URLEval)#"L" OR NOT EVALUATE(URLEval))
LOOP
ENDIF
IF URLCancel
cancel=.T.
ENDIF
IF NOT EMPTY(Script)
this.RunScript(ALLTRIM(Name))
ENDIF
IF NOT USED("vfpscript")
EXIT
ENDIF
SELECT vfpscript
IF NOT EMPTY(URLJump)
lcNewURL=ALLTRIM(URLJump)
this.cURL=LOWER(this.ValidURL(lcNewURL))
cancel=.T.
this.Navigate(lcNewURL,@flags,@targetframename,@postdata,@headers)
ENDIF
IF NOT Continue
EXIT
ENDIF
ENDSCAN
SELECT (lnLastSelect)
this.Enabled=.T.
ENDPROC
PROCEDURE browsetable && Browse active table based on cAlias.
LPARAMETERS tcAlias,tcClauses
LOCAL lcAlias,lnLastSelect,lcCommand
lcAlias=IIF(EMPTY(tcAlias),this.cAlias,ALLTRIM(tcAlias))
IF EMPTY(lcAlias) OR NOT USED(lcAlias)
RETURN .F.
ENDIF
lnLastSelect=SELECT()
SELECT (lcAlias)
IF BETWEEN(this.nRecNo,1,RECCOUNT())
GO this.nRecNo
ELSE
LOCATE
ENDIF
ACTIVATE SCREEN
lcCommand="BROWSE"
IF NOT EMPTY(tcClauses)
lcCommand=lcCommand+" "+tcClauses
ENDIF
&lcCommand
SELECT (lnLastSelect)
ENDPROC
PROCEDURE closetable && Close active table based on cAlias.
LPARAMETERS tcAlias
LOCAL lcAlias
SET DATASESSION TO (this.nDataSessionID)
lcAlias=IIF(EMPTY(tcAlias),this.cAlias,ALLTRIM(tcAlias))
IF NOT EMPTY(lcAlias) AND USED(lcAlias)
USE IN (lcAlias)
ENDIF
SET DATASESSION TO (this.oHost.DataSessionID)
ENDPROC
PROCEDURE Commandstatechange
*** OLE Control Event ***
LPARAMETERS command, enable
LOCAL llEnabled
IF this.lRelease
RETURN .F.
ENDIF
IF this.lDebug
ACTIVATE SCREEN
? PROGRAM()
? "Command: "+ALLTRIM(STR(command))
? "Enable: "+IIF(enable,"ON","OFF")
ENDIF
llEnable=enable
DO CASE
CASE command=1
IF TYPE("thisform.cmdGoForward")=="O"
thisform.cmdGoForward.Enabled=llEnable
ENDIF
CASE command=2
IF this.nHistoryCount=0
llEnable=.F.
ENDIF
IF TYPE("thisform.cmdGoBack")=="O"
thisform.cmdGoBack.Enabled=llEnable
ENDIF
ENDCASE
ENDPROC
PROCEDURE Destroy
this.EraseTempFile
this.lRelease=.T.
this.cSourceFile=""
this.cSourceHTML=""
this.oAction=.NULL.
this.oSource=.NULL.
this.oUser=.NULL.
this.oHost=.NULL.
IF USED("vfpscript")
USE IN vfpscript
ENDIF
ENDPROC
PROCEDURE Downloadcomplete
*** OLE Control Event ***
IF this.lDebug
ACTIVATE SCREEN
? PROGRAM()
ENDIF
IF TYPE("this.LocationURL")=="C"
this.cURL=LOWER(this.ValidURL(this.LocationURL))
ENDIF
this.NavigateComplete(this.cURL)
this.RunScript("OnLoad")
ENDPROC
PROCEDURE editscript && Edit specific VFP script.
LPARAMETERS tcScriptName
LOCAL lcScriptName,lcOldScriptCode,lcNewScriptCode,lnScriptNum,lcScriptNameSearch
LOCAL lcFileName,lcOldHTML,lcNewHTML,llResult,llMatch,llNoEdit,lcCR_LF
#DEFINE SCRIPT_LOC "Script"
#DEFINE NOT_FOUND_IN_FILE_LOC "not found in file"
#DEFINE IN_FILE_LOC "in file"
#DEFINE UPDATED_LOC "updated"
#DEFINE UNABLE_TO_UPDATE_SCRIPT_LOC "Unable to update script"
IF EMPTY(tcScriptName)
RETURN .F.
ENDIF
lcCR_LF=CHR(13)+CHR(10)
lcScriptName=ALLTRIM(tcScriptName)
lcFileName=this.cFileName
llMatch=.F.
FOR lnScriptNum = 1 TO this.nScriptCount
IF LOWER(lcScriptName)==LOWER(this.aScripts[lnScriptNum,1])
lcScriptName=this.aScripts[lnScriptNum,1]
lcOldScriptCode=this.aScripts[lnScriptNum,3]
llMatch=.T.
EXIT
ENDIF
ENDFOR
IF NOT llMatch
this.MsgBox(SCRIPT_LOC+[ (]+lcScriptName+[) ]+NOT_FOUND_IN_FILE_LOC+[ "]+lcFileName+[".],16)
RETURN .F.
ENDIF
lcScriptNameSearch=" "+lcScriptName+lcCR_LF
lcOldHTML=this.FileToString(lcFileName)
llNoEdit=(NOT lcScriptNameSearch$lcOldHTML)
lcNewScriptCode=this.EditString(lcOldScriptCode,lcScriptName,llNoEdit)
IF llNoEdit OR lcOldScriptCode==lcNewScriptCode
RETURN
ENDIF
IF NOT RIGHT(lcNewScriptCode,2)==lcCR_LF
lcNewScriptCode=lcNewScriptCode+lcCR_LF
ENDIF
this.aScripts[lnScriptNum,3]=lcNewScriptCode
lcNewHTML=STRTRAN(lcOldHTML,lcScriptNameSearch+lcOldScriptCode, ;
lcScriptNameSearch+lcNewScriptCode)
IF lcOldHTML==lcNewHTML
llResult=.F.
ELSE
llResult=this.StringToFile(lcNewHTML,lcFileName)
ENDIF
IF NOT llResult
this.MsgBox(UNABLE_TO_UPDATE_SCRIPT_LOC+[ (]+lcScriptName+[) ]+IN_FILE_LOC+[ "]+lcFileName+[".],16)
RETURN .F.
ENDIF
this.WaitWindow(SCRIPT_LOC+[ (]+lcScriptName+[) ]+IN_FILE_LOC+[ "]+lcFileName+[" ]+UPDATED_LOC+[.])
ENDPROC
PROCEDURE editstring && Edit string in window.
LPARAMETERS tcString,tcTitle,tlNoEdit
LOCAL lcString,lcTitle,lcTempFileName
lcString=IIF(TYPE("tcString")=="C",tcString,"")
lcTitle=IIF(TYPE("tcTitle")=="C",ALLTRIM(tcTitle),LOWER(SYS(2015)))
lcTempFileName=SYS(2023)+"\"+"~_ "+lcTitle+".htm"
IF NOT this.StringToFile(lcString,lcTempFileName)
RETURN .F.
ENDIF
ACTIVATE SCREEN
IF tlNoEdit
MODIFY FILE (lcTempFileName) NOEDIT RANGE 1,1
ELSE
MODIFY FILE (lcTempFileName) RANGE 1,1
lcString=this.FileToString(lcTempFileName)
ENDIF
ERASE (lcTempFileName)
RETURN lcString
ENDPROC
PROCEDURE erasetempfile && Erase current temporary file.
IF NOT EMPTY(this.cTempFileName)
ERASE (this.cTempFileName)
this.cTempFileName=""
ENDIF
ENDPROC
PROCEDURE Error
LPARAMETERS nError, cMethod, nLine
LOCAL lcMessage,lcMethod,lcErrorMsg,lcCodeLineMsg
#DEFINE RUNCODE_RUNTIME_ERROR_LOC "RunCode Runtime Error"
#DEFINE TAB CHR(9)
#DEFINE LF CHR(10)
#DEFINE CR CHR(13)
#DEFINE CR_LF CR+LF
IF this.lIgnoreErrors OR INLIST(nError,1113,1426,1429,2012)
RETURN
ENDIF
IF NOT EMPTY(GETPEM(thisform,"Error"))
RETURN thisform.Error(nError,cMethod,nLine)
ENDIF
lcMethod=LOWER(ALLTRIM(cMethod))
IF INLIST(LOWER(lcMethod),"goback","gofoward") OR RIGHT(lcMethod,9)==".navigate"
RETURN
ENDIF
lcErrorMsg=MESSAGE()+CR+CR+thisform.Caption+": "+this.Name+CR+ ;
"Object: "+this.Name+CR+ ;
"Error: "+ALLTRIM(STR(nError))+CR+ ;
"Method: "+lcMethod
lcCodeLineMsg=MESSAGE(1)
IF BETWEEN(nLine,1,10000) AND NOT lcCodeLineMsg="..."
lcErrorMsg=lcErrorMsg+CR+"Line: "+ALLTRIM(STR(nLine))
IF NOT EMPTY(lcCodeLineMsg)
lcErrorMsg=lcErrorMsg+CR+CR+lcCodeLineMsg
ENDIF
ENDIF
IF this.Msgbox(lcErrorMsg,17)#1
this.ReleaseHost
ENDIF
ENDPROC
PROCEDURE filetostring && Returns string contents of file.
LPARAMETERS tcFileName
LOCAL lcFileName,lnLastSelect,lcAlias,lcText
IF PARAMETERS()#1 OR TYPE("tcFileName")#"C" OR EMPTY(tcFileName)
RETURN ""
ENDIF
lcFileName=ALLTRIM(tcFileName)
IF NOT "."$lcFileName
lcFileName=lcFileName+".txt"
ENDIF
lnLastSelect=SELECT()
lcAlias=LOWER(SYS(2015))
CREATE CURSOR (lcAlias) (Text M)
APPEND BLANK
APPEND MEMO Text FROM (tcFileName) OVERWRITE
lcText=Text
USE IN (lcAlias)
SELECT (lnLastSelect)
RETURN lcText
ENDPROC
PROCEDURE framebeforenavigate && FrameBeforeNavigate event.
*** OLE Control Event ***
LPARAMETERS url, flags, targetframename, postdata, headers, cancel
IF TYPE("url")#"C"
RETURN
ENDIF
IF this.lDebug
ACTIVATE SCREEN
? PROGRAM()
? "URL: "+url
IF NOT EMPTY(targetframename)
?? " Frame: "+targetframename
ENDIF
ENDIF
this.BeforeNavigate(@url,flags,@targetframename,@postdata,@headers,@cancel)
ENDPROC
PROCEDURE gethtml && Returns HTML of current document.
LPARAMETERS tcName,tcAlias
LOCAL lcHTML,llResult
IF this.lDebug
ACTIVATE SCREEN
? PROGRAM()
? "Name: "+tcName
ENDIF
lcHTML=this.VFPScript(tcName,tcAlias,1)
llResult=(TYPE("lcHTML")=="C")
IF NOT llResult
lcHTML=""
ENDIF
IF this.lDebug AND NOT llResult
ACTIVATE SCREEN
? "Name: "+tcName+" (not found)"
ENDIF
RETURN lcHTML
ENDPROC
PROCEDURE getsourcefile && Returns file name of current source document.
IF this.lRelease
RETURN .F.
ENDIF
IF EMPTY(this.cSourceFile)
this.RefreshSource
ENDIF
RETURN this.cSourceFile
ENDPROC
PROCEDURE getsourcehtml && Returns HTML of current source document.
IF this.lRelease
RETURN .F.
ENDIF
IF EMPTY(this.cSourceHTML)
this.RefreshSource
ENDIF
RETURN this.cSourceHTML
ENDPROC
PROCEDURE GoBack
*** OLE Control Method ***
LOCAL lcURL,lcSourceFileName
IF this.nHistoryCount<2
NODEFAULT
RETURN .F.
ENDIF
lcURL=this.aHistory[this.nHistoryCount-1,1]
lcSourceFileName=this.aHistory[this.nHistoryCount-1,2]
this.nHistoryCount=this.nHistoryCount-1
IF this.nHistoryCount>0
DIMENSION this.aHistory[this.nHistoryCount,2]
ELSE
this.aHistory=""
ENDIF
this.lHistoryEnabled=.F.
IF NOT EMPTY(lcSourceFileName)
NODEFAULT
this.Navigate(lcSourceFileName)
RETURN .F.
ENDIF
IF NOT EMPTY(lcURL) AND NOT EMPTY(this.cSourceFileName) AND NOT lcURL==lcSourceFileName
NODEFAULT
this.Navigate(lcURL)
RETURN .F.
ENDIF
ENDPROC
PROCEDURE GoForward
*** OLE Control Method ***
DOEVENTS
ENDPROC
PROCEDURE GOHOME
*** OLE Control Method ***
DOEVENTS
ENDPROC
PROCEDURE Gosearch
*** OLE Control Method ***
DOEVENTS
ENDPROC
PROCEDURE Init
LPARAMETERS tcVFPScript
DIMENSION this.aHistory[1,2]
this.aHistory=""
this.oHost=thisform
this.oUser=CREATEOBJECT("Custom")
this.oUser.Name="oCustom"
this.nDataSessionID=thisform.DataSessionID
this.cProgramPath=IIF(TYPE("this.oHost.cProgramPath")=="C",this.oHost.cProgramPath, ;
this.ClassLibrary)
IF NOT "\"$this.cBlankHTMLFile AND NOT ":"$this.cBlankHTMLFile
this.cBlankHTMLFile=LOWER(this.cProgramPath+this.cBlankHTMLFile)
ENDIF
DO CASE
CASE ISNULL(tcVFPScript)
this.cVFPScript=""
CASE EMPTY(tcVFPScript) OR TYPE("tcVFPScript")#"C"
this.cVFPScript=LOWER(FULLPATH(this.cVFPScriptTable,this.cProgramPath))
OTHERWISE
this.cVFPScript=LOWER(ALLTRIM(tcVFPScript))
ENDCASE
IF EMPTY(this.cVFPScript)
this.lVFPScript=.F.
ENDIF
this.OpenVFPScript
SELECT 0
IF this.lBlankHTMLStartup AND NOT EMPTY(this.cBlankHTMLFile) AND FILE(this.cBlankHTMLFile)
this.Navigate(this.cBlankHTMLFile)
ENDIF
SELECT 0
ENDPROC
PROCEDURE LostFocus
IF this.lDebug
ACTIVATE SCREEN
? PROGRAM()
ENDIF
this.RefreshDeactivate
ENDPROC
PROCEDURE msgbox && Message box wrapper method.
LPARAMETERS tcMessage,tnType,tcTitle
LOCAL lcMessage,lnType,lcTitle,lnResult
lcMessage=IIF(TYPE("tcMessage")#"C","",tcMessage)
lnType=IIF(TYPE("tnType")#"N",48,tnType)
lcTitle=IIF(TYPE("tcTitle")#"C",thisform.Caption,tcTitle)
ACTIVATE SCREEN
lnResult=MESSAGEBOX(lcMessage,lnType,lcTitle)
RETURN lnResult
ENDPROC
PROCEDURE Navigate
*** OLE Control Method ***
LPARAMETERS url, flags, targetframename, postdata, headers
LOCAL lcURL,lcNewURL
IF this.lRelease
NODEFAULT
url=""
RETURN .F.
ENDIF
IF TYPE("url")#"C"
RETURN
ENDIF
IF this.lDebug
ACTIVATE SCREEN
? PROGRAM()
? "URL: "+url
IF NOT EMPTY(targetframename)
?? " Frame: "+targetframename
ENDIF
ENDIF
lcURL=ALLTRIM(url)
IF LEFT(lcURL,LEN(this.cVFPSProtocol))==LOWER(this.cVFPSProtocol)
NODEFAULT
RETURN this.BeforeNavigate(@url,@flags,@targetframename,@postdata,@headers)
ENDIF
IF RIGHT(url,16)==SPACE(16)
this.cBeforeURL=ALLTRIM(lcURL)
this.cSourceFile=""
this.cSourceHTML=""
RETURN
ENDIF
IF NOT this.ParseSource(lcURL) OR EMPTY(this.cNewURL)
RETURN
ENDIF
NODEFAULT
url=""
RETURN this.Navigate(this.cNewURL,12,@targetframename)
ENDPROC
PROCEDURE Navigate2
*** OLE Control Method ***
LPARAMETERS url, flags, targetframename, postdata, headers
NODEFAULT
RETURN this.Navigate(@url,@flags,@targetframename,@postdata,@headers)
ENDPROC
PROCEDURE navigatecomplete && NavigateComplete event.
*** OLE Control Event ***
LPARAMETERS url
LOCAL lcURL,lcLocationURL,lcSourceFileName
IF TYPE("url")#"C"
RETURN
ENDIF
lcSourceFileName=this.cSourceFileName
IF this.lDebug
ACTIVATE SCREEN
? PROGRAM()
? "URL: "+url
? "Location URL: "+this.LocationURL
? "Source file name: "+lcSourceFileName
ENDIF
IF EMPTY(lcSourceFileName)
lcURL=LOWER(ALLTRIM(url))
ELSE
lcURL=lcSourceFileName
ENDIF
IF EMPTY(lcURL) OR (SUBSTR(lcURL,5,1)==":" AND NOT LEFT(lcURL,5)=="file:" AND ;
NOT LEFT(lcURL,4)=="http") OR RIGHT(lcURL,11)=="about:blank"
RETURN
ENDIF
this.cLastURL=this.cURL
this.cURL=LOWER(this.ValidURL(lcURL))
lcLocationURL=LOWER(this.ValidURL(this.LocationURL))
IF this.lRefreshMode
this.lRefreshMode=.F.
this.lHistoryEnabled=.T.
RETURN
ENDIF
IF NOT this.lHistoryEnabled
this.lHistoryEnabled=.T.
RETURN
ENDIF
lcURL=lcLocationURL
IF this.nHistoryCount>0 AND (this.aHistory[this.nHistoryCount,1]==lcURL OR ;
(NOT EMPTY(lcSourceFileName) AND this.aHistory[this.nHistoryCount,2]==lcSourceFileName))
RETURN
ENDIF
this.nHistoryCount=this.nHistoryCount+1
DIMENSION this.aHistory[this.nHistoryCount,2]
this.aHistory[this.nHistoryCount,1]=lcURL
this.aHistory[this.nHistoryCount,2]=lcSourceFileName
ENDPROC
PROCEDURE NavigateComplete2
*** OLE Control Event ***
LPARAMETERS pdisp, url
RETURN this.NavigateComplete(url)
ENDPROC
PROCEDURE newwindow && NewWindow event.
*** OLE Control Event ***
LPARAMETERS url, flags, targetframename, postdata, headers, processed
IF TYPE("url")#"C"
RETURN
ENDIF
IF this.lDebug
ACTIVATE SCREEN
? PROGRAM()
? "URL: "+url
IF NOT EMPTY(targetframename)
?? " Frame: "+targetframename
ENDIF
ENDIF
processed=.T.
this.Navigate(@url,@flags,@targetframename,@postdata,@headers)
ENDPROC
PROCEDURE NewWindow2
*** OLE Control Event ***
LPARAMETERS ppdisp, cancel
RETURN this.NewWindow(@cancel)
ENDPROC
PROCEDURE opentable && Open specified table and activate as current table by setting cAlias property.
LPARAMETERS tcFileName,tcAlias,tlExclusive,tcFilter
LOCAL lcFileName,lcAlias,lnLastSelect
this.nRecNo=0
this.cAlias=""
this.cDBF=""
this.cDBFPath=""
IF EMPTY(tcFileName)
RETURN .F.
ENDIF
lcFileName=ALLTRIM(tcFileName)
IF NOT "."$lcFileName
lcFileName=lcFileName+".dbf"
ENDIF
IF NOT FILE(lcFileName)
RETURN .F.
ENDIF
SET DATASESSION TO (this.nDataSessionID)
lcAlias=STRTRAN(IIF(EMPTY(tcAlias),this.TrimPath(lcFileName,.T.),ALLTRIM(tcAlias))," ","_")
this.cAlias=lcAlias
IF USED(lcAlias)
this.nRecNo=RECNO(lcAlias)
this.cDBF=LOWER(DBF(lcAlias))
this.cDBFPath=this.TrimFile(this.cDBF)
SET DATASESSION TO (this.oHost.DataSessionID)
RETURN
ENDIF
lnLastSelect=SELECT()
SELECT 0
IF tlExclusive
USE (lcFileName) EXCLUSIVE ALIAS (lcAlias)
ELSE
USE (lcFileName) AGAIN SHARED ALIAS (lcAlias)
ENDIF
IF NOT USED(lcAlias)
this.nRecNo=0
this.cAlias=""
this.cDBF=""
this.cDBFPath=""
SELECT (lnLastSelect)
RETURN .F.
ENDIF
this.cDBF=LOWER(DBF(lcAlias))
this.cDBFPath=this.TrimFile(this.cDBF)
IF NOT EMPTY(tcFilter)
SET FILTER TO &tcFilter
ENDIF
LOCATE
SELECT (lnLastSelect)
SET DATASESSION TO (this.oHost.DataSessionID)
ENDPROC
PROCEDURE openvfpscript && Open VFP script table.
LOCAL lcFileName,lnLastSelect,lcLastSetSafety
SET DATASESSION TO (this.oHost.DataSessionID)
IF USED("vfpscript")
RETURN
ENDIF
IF this.lRelease OR NOT this.lVFPScript OR EMPTY(this.cVFPScript)
RETURN .F.
ENDIF
lcLastSetSafety=SET("SAFETY")
SET SAFETY OFF
lnLastSelect=SELECT()
lcFileName=this.cVFPScript
IF NOT EMPTY(SYS(2000,lcFileName))
SELECT 0
USE (lcFileName) SHARED ALIAS vfpscript AGAIN
IF NOT USED()
SELECT (lnLastSelect)
IF lcLastSetSafety=="ON"
SET SAFETY ON
ELSE
SET SAFETY OFF
ENDIF
RETURN .F.
ENDIF
IF FCOUNT()<9
USE
ERASE (lcFileName)
ENDIF
ENDIF
IF EMPTY(SYS(2000,lcFileName)) OR TYPE("BeforeNav")#"L"
IF USED("vfpscript")
USE IN vfpscript
ENDIF
ERASE (lcFileName)
SELECT 0
CREATE TABLE (lcFileName) ;
(IndexValue C(10), Name C(24), HTML M, Script M, BeforeNav L, URLMatch M, ;
URLEval M, URLJump M, URLCancel L, ;
Continue L, Comment M, LastAccess T, ExecCount N(8))
USE (lcFileName) SHARED ALIAS vfpscript AGAIN
ENDIF
IF TYPE("LastAccess")#"T" OR TYPE("ExecCount")#"N"
IF USED("vfpscript")
USE IN vfpscript
ENDIF
SELECT 0
USE (lcFileName) EXCLUSIVE ALIAS vfpscript
IF NOT USED()
SELECT (lnLastSelect)
IF lcLastSetSafety=="ON"
SET SAFETY ON
ELSE
SET SAFETY OFF
ENDIF
RETURN .F.
ENDIF
IF TYPE("LastAccess")#"T"
ALTER TABLE (lcFileName) ADD COLUMN LastAccess T NULL
ENDIF
IF TYPE("ExecCount")#"N"
ALTER TABLE (lcFileName) ADD COLUMN ExecCount N(8) NULL
ENDIF
USE (lcFileName) SHARED ALIAS vfpscript AGAIN
ENDIF
IF NOT USED("vfpscript")
SELECT (lnLastSelect)
IF lcLastSetSafety=="ON"
SET SAFETY ON
ELSE
SET SAFETY OFF
ENDIF
RETURN .F.
ENDIF
SELECT vfpscript
IF KEY(1)=="INDEXVALUE"
SET ORDER TO IndexValue
ELSE
INDEX ON IndexValue TAG IndexValue ASCENDING ADDITIVE
ENDIF
SET FILTER TO NOT DELETED()
LOCATE
SELECT 0
ENDPROC
PROCEDURE parsesource && Parse source code of HTML document.
*** OLE Control Event ***
PARAMETERS url, flags, targetframename, postdata, headers, cancel
PRIVATE oTHIS
LOCAL lcURL,lcSource,lcNewURL,lcFileName,lnAtPos,llHTMLFile,llBusy
EXTERNAL ARRAY VFPScrpt
IF this.lRelease OR NOT this.lParseSource OR TYPE("url")#"C" OR EMPTY(url)
RETURN .F.
ENDIF
lcURL=ALLTRIM(url)
lcFileName=STRTRAN(lcURL,"/","\")
lnAtPos=RAT("\",lcFileName)
IF lnAtPos>0 AND LOWER(SUBSTR(lcFileName,lnAtPos+1, ;
LEN(this.cTempFilePrefix)))==this.cTempFilePrefix
RETURN .F.
ENDIF
this.cFileName=""
this.cFilePath=""
this.cSourceURL=""
this.cSourceFileName=""
llHTMLFile=.F.
lnAtPos=RAT(".",lcURL)
llHTMLFile=(lnAtPos>0 AND INLIST(LOWER(ALLTRIM(SUBSTR(lcURL,lnAtPos+1))), ;
"htm","html","asp"))
IF NOT llHTMLFile OR LOWER(lcFileName)==LOWER(this.cTempFileName) OR ;
LOWER(ALLTRIM(lcFileName))==LOWER(ALLTRIM(this.cBlankHTMLFile))
this.cFileName=lcFileName
this.cFilePath=this.TrimFile(this.cFileName)
RETURN .F.
ENDIF
lnAtPos=RAT(":",lcFileName)
IF lnAtPos#2
RETURN .F.
ENDIF
IF lnAtPos>2
lcFileName=ALLTRIM(SUBSTR(lcFileName,lnAtPos-1))
ENDIF
IF EMPTY(SYS(2000,lcFileName))
RETURN .F.
ENDIF
IF this.lDebug
ACTIVATE SCREEN
? PROGRAM()
? "URL: "+lcURL
ENDIF
llBusy=this.lBusy
this.SetBusyState(.T.)
IF NOT ":"$lcURL OR AT(":",lcURL)=2
lcURL="file://"+STRTRAN(STRTRAN(STRTRAN(lcURL,"\","/"),"///","//"),"//","/")
ENDIF
lcNewURL=""
oTHIS=this
this.cSourceURL=lcURL
this.cFileName=LOWER(lcFileName)
this.cFilePath=this.TrimFile(this.cFileName)
this.cSourceFileName=this.cFileName
this.cSourceFilePath=this.TrimFile(this.cFileName)
IF VFPScrpt(this)
lcNewURL=this.cTempFileName
ELSE
this.cSourceURL=""
this.cSourceFileName=""
this.cSourceFilePath=""
ENDIF
oTHIS=.NULL.
this.SetBusyState(llBusy)
IF TYPE("this.oHost.lRelease")=="L" AND this.oHost.lRelease
this.Visible=.F.
RETURN .F.
ENDIF
this.cURL=LOWER(this.ValidURL(lcURL))
this.cNewURL=lcNewURL
ENDPROC
PROCEDURE Refresh
*** OLE Control Method ***
IF this.lDebug
ACTIVATE SCREEN
? PROGRAM()
ENDIF
IF this.lRefresh AND NOT this.lDesign
this.RunScript("OnRefresh")
ENDIF
this.lRefresh=.T.
NODEFAULT
ENDPROC
PROCEDURE Refresh2
*** OLE Control Method ***
LPARAMETERS level
IF this.lRelease OR NOT this.lRefresh
NODEFAULT
RETURN .F.
ENDIF
IF NOT EMPTY(this.cSourceFileName)
RETURN this.RefreshMode()
ENDIF
ENDPROC
PROCEDURE refreshdeactivate && RefreshDeactivate method for use when losing focus of the web browser control.
IF this.lRelease OR NOT this.Visible
RETURN
ENDIF
IF this.lRefreshDeactivate
this.Visible=.F.
this.Visible=.T.
RETURN
ENDIF
ENDPROC
PROCEDURE refreshmode && Set refresh mode.
LOCAL llBusy
IF this.lRelease OR EMPTY(this.cSourceFileName)
this.lRefreshMode=.F.
RETURN .F.
ENDIF
llBusy=this.lBusy
this.SetBusyState(.T.)
this.lRefreshMode=.T.
this.lHistoryEnabled=.F.
this.Navigate(this.cSourceFileName)
this.SetBusyState(llBusy)
ENDPROC
PROCEDURE refreshsource && Refresh source.
LOCAL lcFileName,lcFileName2,lnLastSelect,lcSource,lcAlias
IF this.lRelease
RETURN .F.
ENDIF
this.cSourceFile=""
this.cSourceHTML=""
IF EMPTY(this.cFileName)
RETURN .F.
ENDIF
lcFileName=this.cFileName
IF EMPTY(SYS(2000,lcFileName))
RETURN .F.
ENDIF
lcFileName2=this.TrimPath(lcFileName)
IF WEXIST(lcFileName2)
RELEASE WINDOW (lcFileName2)
ENDIF
lnLastSelect=SELECT()
lcAlias=LOWER(SYS(2015))
CREATE CURSOR (lcAlias) (Source M)
APPEND BLANK
APPEND MEMO Source FROM (lcFileName) OVERWRITE
lcSource=Source
USE
SELECT (lnLastSelect)
this.cSourceFile=lcFileName
this.cSourceHTML=lcSource
ENDPROC
PROCEDURE releasehost && Release host form.
IF this.lRelease
RETURN .F.
ENDIF
IF TYPE("this.oHost.tmrHost")#"O"
RETURN .F.
ENDIF
this.oHost.tmrHost.RunCode("oTHIS.oHost.Release")
ENDPROC
PROCEDURE runaction && Run specific action which is a specific method of object referenced by the oAction property.
LPARAMETERS tcMethod
LOCAL lcMethod,llResult,llBusy
this.uResult=.T.
IF this.lRelease OR EMPTY(tcMethod) OR TYPE("this.oAction")#"O" OR ISNULL(this.oAction)
RETURN .F.
ENDIF
lcMethod=LOWER(ALLTRIM(tcMethod))
IF EMPTY(lcMethod) OR NOT PEMSTATUS(this.oAction,lcMethod,5) OR ;
PEMSTATUS(this.oAction,lcMethod,2) OR ;
NOT PEMSTATUS(this.oAction,lcMethod,3)=="Method"
RETURN .F.
ENDIF
llBusy=this.lBusy
this.SetBusyState(.T.)
llResult=EVALUATE("this.oAction."+lcMethod+"()")
llBusy=this.lBusy
this.SetBusyState(llBusy)
RETURN llResult
ENDPROC
PROCEDURE runcode && Run specific block of VFP code without compilation.
LPARAMETERS tcCode
PRIVATE oTHIS
LOCAL lnDataSessionID,lnLastSelect,llBusy
IF this.lRelease OR EMPTY(tcCode) OR TYPE("tcCode")#"C" OR ISNULL(tcCode)
RETURN .F.
ENDIF
IF this.lDebug
ACTIVATE SCREEN
? PROGRAM()
ENDIF
llBusy=this.lBusy
this.SetBusyState(.T.)
lnLastSelect=SELECT()
lnDataSessionID=this.oHost.DataSessionID
SET DATASESSION TO (lnDataSessionID)
ACTIVATE SCREEN
oTHIS=this
this.lRunCodeMode=.T.
DO RunCode WITH (tcCode)
this.lRunCodeMode=.F.
oTHIS=.NULL.
SET DATASESSION TO (lnDataSessionID)
SELECT (lnLastSelect)
this.SetBusyState(llBusy)
ENDPROC
PROCEDURE runscript && Run specific VFP script.
LPARAMETERS tcScript,tcAlias
LOCAL llResult
IF this.lRelease OR EMPTY(tcScript)
RETURN .F.
ENDIF
IF this.lDebug
ACTIVATE SCREEN
? PROGRAM()
? "Script: "+tcScript
ENDIF
llResult=this.VFPScript(tcScript,tcAlias,0)
IF this.lDebug AND NOT llResult
ACTIVATE SCREEN
? "Script: "+tcScript+" (not found)"
ENDIF
RETURN llResult
ENDPROC
PROCEDURE setbusystate && Set busy state method.
LPARAMETERS tlBusy
IF this.lBusy=tlBusy
RETURN
ENDIF
this.lBusy=tlBusy
ENDPROC
PROCEDURE setparam && Set URL parameters method.
LPARAMETERS tcParam
LOCAL lcParam,lcParameter,lcParamDelimiter,lnParamTotal,lnCount,lnAtPos
lcParam=IIF(EMPTY(tcParam),"",ALLTRIM(tcParam))
lnAtPos=AT("?",lcParam)
IF lnAtPos=0
lcParam=""
ELSE
lcParam=ALLTRIM(SUBSTR(lcParam,lnAtPos+1))
ENDIF
this.nParamCount=0
DIMENSION this.aParam[128]
this.aParam=.F.
IF EMPTY(lcParam)
this.cParam=""
RETURN
ENDIF
IF RIGHT(lcParam,1)=="/"
lcParam=ALLTRIM(LEFT(lcParam,LEN(lcParam)-1))
ENDIF
lcParam=STRTRAN(lcParam,"%20"," ")
this.cParam=lcParam
lcParamDelimiter=this.cParamDelimiter
lnParamTotal=MIN(OCCURS(lcParamDelimiter,lcParam)+1,128)
FOR lnCount = 1 TO lnParamTotal
this.nParamCount=this.nParamCount+1
lnAtPos=AT(lcParamDelimiter,lcParam)
IF lnAtPos=0
lcParameter=ALLTRIM(lcParam)
ELSE
lcParameter=ALLTRIM(LEFT(lcParam,lnAtPos-1))
lcParam=ALLTRIM(SUBSTR(lcParam,lnAtPos+1))
ENDIF
this.aParam[lnCount]=lcParameter
ENDFOR
ENDPROC
PROCEDURE skiprecord && Skip record of active table based on cAlias.
LPARAMETERS tnRecords
LOCAL lnRecords,lcAlias,lnRecNo,lnLastSelect,lnLastRecNo
SET DATASESSION TO (this.nDataSessionID)
lcAlias=this.cAlias
IF EMPTY(lcAlias) OR NOT USED(lcAlias)
SET DATASESSION TO (this.oHost.DataSessionID)
RETURN .F.
ENDIF
lnRecords=IIF(EMPTY(tnRecords),0,tnRecords)
lnLastSelect=SELECT()
SELECT (lcAlias)
IF EOF()
GO BOTTOM
ENDIF
lnLastRecNo=RECNO()
lnRecNo=IIF(this.nRecNo>0,this.nRecNo,RECNO())
GO lnRecNo
SKIP lnRecords
IF BOF()
GO TOP
ENDIF
IF EOF()
GO BOTTOM
ENDIF
this.nRecNo=RECNO()
GO lnLastRecNo
SELECT (lnLastSelect)
SET DATASESSION TO (this.oHost.DataSessionID)
this.RunScript("RefreshData")
ENDPROC
PROCEDURE Statustextchange
*** OLE Control Event ***
LPARAMETERS text
IF this.lRelease OR this.lBusy OR NOT this.oHost.Visible
RETURN .F.
ENDIF
IF TYPE("text")=="C" AND NOT EMPTY(text)
SET MESSAGE TO LEFT(text,254)
ELSE
SET MESSAGE TO
ENDIF
ENDPROC
PROCEDURE stringtofile && Saves string contents to file.
LPARAMETERS tcText,tcFileName
LOCAL lcFileName,lnLastSelect,lcAlias
IF PARAMETERS()#2 OR TYPE("tcText")#"C" OR TYPE("tcFileName")#"C" OR EMPTY(tcFileName)
RETURN .F.
ENDIF
lcFileName=ALLTRIM(tcFileName)
IF NOT "."$lcFileName
lcFileName=lcFileName+".txt"
ENDIF
lnLastSelect=SELECT()
lcAlias=LOWER(SYS(2015))
CREATE CURSOR (lcAlias) (Text M)
INSERT INTO (lcAlias) (Text) VALUES (tcText)
COPY MEMO Text TO (tcFileName)
USE IN (lcAlias)
SELECT (lnLastSelect)
ENDPROC
PROCEDURE trimext && Returns file name without extension of specified file name.
LPARAMETERS tcFileName,tlPlatformType
LOCAL lcFileName,lnAtPos,lnAtPos2
lcFileName=tcFileName
lnAtPos=RAT(".",lcFileName)
IF lnAtPos>0
lnAtPos2=RAT(":",lcFileName)
IF lnAtPos>lnAtPos2
lcFileName=LEFT(lcFileName,lnAtPos-1)
ENDIF
ENDIF
IF tlPlatformType
lcFileName=IIF(_dos OR _unix,UPPER(lcFileName),LOWER(lcFileName))
ENDIF
RETURN ALLTRIM(lcFileName)
ENDPROC
PROCEDURE trimfile && Returns path of specified file name.
LPARAMETERS tcFileName,lPlatType
LOCAL lcFileName,lnAtPos
lnAtPos=RAT("\",tcFileName)
lcFileName=ALLTRIM(IIF(lnAtPos=0,tcFileName,LEFT(tcFileName,lnAtPos)))
IF lPlatType
lcFileName=IIF(_dos OR _unix,UPPER(lcFileName),LOWER(lcFileName))
ENDIF
RETURN lcFileName
ENDPROC
PROCEDURE trimpath && Returns file name without path of specified file name.
LPARAMETERS tcFileName,tlTrimExt,tlPlatformType
LOCAL lcFileName,lnAtPos
IF EMPTY(tcFileName)
RETURN ""
ENDIF
lcFileName=tcFileName
lnAtPos=AT(":",lcFileName)
IF lnAtPos>0
lcFileName=SUBSTR(lcFileName,lnAtPos+1)
ENDIF
IF tlTrimExt
lcFileName=this.TrimExt(lcFileName)
ENDIF
IF tlPlatformType
lcFileName=IIF(_dos OR _unix,UPPER(lcFileName),LOWER(lcFileName))
ENDIF
lcFileName=ALLTRIM(SUBSTR(lcFileName,AT("\",lcFileName,;
MAX(OCCURS("\",lcFileName),1))+1))
DO WHILE LEFT(lcFileName,1)=="."
lcFileName=ALLTRIM(SUBSTR(lcFileName,2))
ENDDO
DO WHILE RIGHT(lcFileName,1)=="."
lcFileName=ALLTRIM(LEFT(lcFileName,LEN(lcFileName)-1))
ENDDO
RETURN lcFileName
ENDPROC
PROCEDURE validateurl && Validates URL.
LPARAMETERS tcURL
LOCAL lcURL,lnLastSelect
lcURL=ALLTRIM(tcURL)
IF this.lRelease OR lcURL==this.cLastURL OR ;
LOWER(lcURL)==LOWER(ALLTRIM(this.cBlankHTMLFile))
RETURN
ENDIF
SET DATASESSION TO (this.oHost.DataSessionID)
lnLastSelect=SELECT()
IF NOT this.OpenVFPScript()
SELECT (lnLastSelect)
RETURN
ENDIF
SELECT vfpscript
SCAN ALL FOR BeforeNav AND URLCancel
IF NOT EMPTY(URLMatch) AND NOT this.WildCardMatch(ALLTRIM(MLINE(URLMatch,1)),lcURL)
LOOP
ENDIF
IF NOT EMPTY(URLEval) AND (TYPE(URLEval)#"L" OR NOT EVALUATE(URLEval))
LOOP
ENDIF
this.cURL=LOWER(this.ValidURL(this.cLastURL))
SELECT (lnLastSelect)
RETURN .F.
ENDSCAN
SELECT (lnLastSelect)
ENDPROC
PROCEDURE validurl && Returns validated URL.
LPARAMETERS tcURL
LOCAL lcURL
IF EMPTY(tcURL)
RETURN ""
ENDIF
lcURL=ALLTRIM(tcURL)
IF NOT ":"$lcURL AND NOT LOWER(LEFT(lcURL,4))=="http" AND ;
NOT LOWER(LEFT(lcURL,5))=="file:" AND (LOWER(LEFT(lcURL,4))=="www." OR ;
INLIST(LOWER(RIGHT(lcURL,4)),".com",".gov",".net") OR ;
(NOT SUBSTR(lcURL,2,1)==":" AND NOT LEFT(lcURL,2)=="\\"))
lcURL="http://"+lcURL
ENDIF
IF SUBSTR(PADR(lcURL,5),5,1)==":"
lcURL=STRTRAN(STRTRAN(lcURl,"\","/"),"///","//")
ELSE
IF NOT ":"$lcURL OR AT(":",lcURL)=2
lcURL="file://"+STRTRAN(STRTRAN(STRTRAN(lcURL,"\","/"),"///","//"),"//","/")
ENDIF
ENDIF
RETURN lcURL
ENDPROC
PROCEDURE vfps && Executes VFP script based on specified URL.
LPARAMETERS tcCommand
LOCAL lcCommand,lcParam1,lcParameter,lcAlias,lcVFPSProtocol,lnVFPSProtocolLen
LOCAL lcVariable,lcCode,lnCount,lnAtPos,llEnabled,luResult,llBusy
IF this.lRelease OR EMPTY(tcCommand) OR TYPE("this.oHost")#"O" OR ISNULL(this.oHost)
RETURN .F.
ENDIF
llBusy=this.lBusy
this.SetBusyState(.T.)
llEnabled=this.Enabled
IF this.oHost.Visible
this.Enabled=.F.
ENDIF
lcCommand=LOWER(ALLTRIM(tcCommand))
lcVFPSProtocol=LOWER(this.cVFPSProtocol)
lnVFPSProtocolLen=LEN(lcVFPSProtocol)
IF LEFT(lcCommand,lnVFPSProtocolLen)==lcVFPSProtocol
lcCommand=ALLTRIM(SUBSTR(lcCommand,lnVFPSProtocolLen+1))
ENDIF
DO WHILE LEFT(lcCommand,1)=="/"
lcCommand=ALLTRIM(SUBSTR(lcCommand,2))
ENDDO
DO WHILE RIGHT(lcCommand,1)=="/"
lcCommand=ALLTRIM(LEFT(lcCommand,LEN(lcCommand)-1))
ENDDO
lnAtPos=AT("?",lcCommand)
IF lnAtPos>0
this.SetParam(lcCommand)
lcCommand=ALLTRIM(LEFT(lcCommand,lnAtPos-1))
ENDIF
lcCommand=STRTRAN(lcCommand,"%20"," ")
FOR lnCount = 1 TO this.nParamCount
lcParameter=this.aParam[lnCount]
lnAtPos=AT("=",lcParameter)
IF lnAtPos=0
lcVariable=""
ELSE
lcVariable=ALLTRIM(LEFT(lcParameter,lnAtPos-1))
lcParameter=ALLTRIM(SUBSTR(lcParameter,lnAtPos+1))
ENDIF
IF LEFT(lcParameter,1)=="(" AND RIGHT(lcParameter,1)==")"
IF STRTRAN(STRTRAN(lcParameter,CHR(9),"")," ","")=="()"
this.aParam[lnCount]=""
ELSE
this.aParam[lnCount]=EVALUATE(lcParameter)
ENDIF
ELSE
this.aParam[lnCount]=lcParameter
ENDIF
IF NOT EMPTY(lcVariable) AND NOT LEFT(lcVariable,1)==";"
lcParameter=this.aParam[lnCount]
IF NOT "."$lcVariable
PRIVATE (lcVariable)
ENDIF
lcCode=lcVariable+"=lcParameter"
&lcCode
ENDIF
ENDFOR
lcParam1=this.aParam[1]
IF this.lDebug
ACTIVATE SCREEN
? PROGRAM()
? "Command: "+lcCommand+" Param: "+this.cParam
ENDIF
DO CASE
CASE lcCommand=="refresh"
luResult=this.Refresh2()
CASE lcCommand=="releasehost"
luResult=this.ReleaseHost()
CASE lcCommand=="runaction"
luResult=this.RunAction(lcParam1)
CASE lcCommand=="runmethod"
lcParam1=this.cParam
IF NOT RIGHT(lcParam1,1)==")"
lcParam1=lcParam1+"()"
ENDIF
luResult=this.&lcParam1
CASE lcCommand=="runcode"
luResult=this.RunCode(lcParam1)
CASE lcCommand=="runscript"
lcAlias=""
lnAtPos=AT("::",lcParam1)
IF lnAtPos>0
lcAlias=ALLTRIM(LEFT(lcParam1,lnAtPos-1))
lcParam1=ALLTRIM(SUBSTR(lcParam1,lnAtPos+2))
ENDIF
luResult=this.RunScript(lcParam1,lcAlias)
CASE lcCommand=="viewsource"
luResult=this.ViewSource()
OTHERWISE
luResult=.F.
ENDCASE
this.Enabled=llEnabled
this.SetBusyState(llBusy)
RETURN luResult
ENDPROC
PROCEDURE vfpscript && Executes specific VFP script.
LPARAMETERS tcName,tcAlias,tnCode
LOCAL lcName,lcAlias,lnLastSelect,lnRecNo,ltDateTime,llMatch
LOCAL llMatch,lcScriptCode,lcHTML
IF TYPE("this.oHost")#"O" OR ISNULL(this.oHost)
RETURN .F.
ENDIF
SET DATASESSION TO (this.oHost.DataSessionID)
this.uResult=.T.
IF this.lRelease OR EMPTY(tcName) OR TYPE("tnCode")#"N"
RETURN .F.
ENDIF
ltDateTime=DATETIME()
lcName=LOWER(ALLTRIM(tcName))
lcAlias=IIF(EMPTY(tcAlias),"vfpscript",LOWER(ALLTRIM(tcAlias)))
lnLastSelect=SELECT()
llMatch=.F.
lcScriptCode=""
lcHTML=""
FOR lnCount = 1 TO this.nScriptCount
IF NOT LOWER(this.aScripts[lnCount,1])==lcName
LOOP
ENDIF
llMatch=.T.
lcScriptCode=this.aScripts[lnCount,2]
lcHTML=lcScriptCode
ENDFOR
IF NOT llMatch
IF EMPTY(tcAlias) AND NOT this.OpenVFPScript()
SELECT (lnLastSelect)
RETURN .F.
ENDIF
IF NOT USED(lcAlias)
SELECT (lnLastSelect)
RETURN .F.
ENDIF
SELECT (lcAlias)
lnRecNo=IIF(EOF() OR RECNO()>RECCOUNT(),0,RECNO())
IF NOT LOWER(ALLTRIM(Name))==lcName
LOCATE FOR LOWER(ALLTRIM(Name))==lcName
ENDIF
llMatch=(NOT EMPTY(Name))
IF llMatch
IF TYPE("LastAccess")=="T"
REPLACE LastAccess WITH ltDateTime, ExecCount WITH ExecCount+1
ENDIF
lcScriptCode=Script
lcHTML=HTML
ENDIF
IF lnRecNo=0
GO BOTTOM
ELSE
GO lnRecNo
ENDIF
ENDIF
SELECT (lnLastSelect)
DO CASE
CASE tnCode=0
IF this.lDesign
this.EditScript(lcName)
RETURN
ENDIF
RETURN this.RunCode(lcScriptCode)
CASE tnCode=1
RETURN lcHTML
ENDCASE
RETURN .F.
ENDPROC
PROCEDURE viewsource && View source of current document.
LPARAMETERS tlNoWait,tlNoEdit
LOCAL lcFileName
#DEFINE HTML_SOURCE_NOT_AVAILABLE_LOC "HTML source not available"
IF this.lRelease
RETURN .F.
ENDIF
this.lViewSourceMode=.F.
this.GetSourceHTML()
lcFileName=this.GetSourceFile()
IF EMPTY(lcFileName) OR EMPTY(SYS(2000,lcFileName))
this.WaitWindow(HTML_SOURCE_NOT_AVAILABLE_LOC)
RETURN .F.
ENDIF
IF tlNoWait
IF tlNoEdit
MODIFY FILE (lcFileName) NOEDIT NOWAIT
ELSE
MODIFY FILE (lcFileName) NOWAIT
ENDIF
RETURN
ENDIF
this.lViewSourceMode=.T.
IF tlNoEdit
MODIFY FILE (lcFileName) NOEDIT
ELSE
MODIFY FILE (lcFileName)
IF LASTKEY()#27
this.lHistoryEnabled=.F.
this.Navigate(lcFileName)
ENDIF
ENDIF
this.lViewSourceMode=.F.
ENDPROC
PROCEDURE waitwindow && Wait window wrapper method.
LPARAMETERS tcText,tlWait
LOCAL lcText
WAIT CLEAR
IF EMPTY(tcText)
RETURN
ENDIF
lcText=LEFT(tcText,254)
DO CASE
CASE TYPE("tlWait")=="L"
IF tlWait
WAIT WINDOW tcText
ELSE
WAIT WINDOW tcText NOWAIT
ENDIF
CASE TYPE("tlWait")=="N"
WAIT WINDOW tcText TIMEOUT (tlWait)
OTHERWISE
RETURN .F.
ENDCASE
ENDPROC
PROCEDURE wildcardmatch && Returns .T. if wild card string is matched to specific string.
LPARAMETERS tcMatchExpList,tcExpressionSearched,tlMatchAsIs
LOCAL lcMatchExpList,lcExpressionSearched,llMatchAsIs,lcMatchExpList2
LOCAL lnMatchLen,lnExpressionLen,lnMatchCount,lnCount,lnCount2,lnSpaceCount
LOCAL lcMatchExp,lcMatchType,lnMatchType,lnAtPos,lnAtPos2
LOCAL llMatch,llMatch2
IF EMPTY(tcExpressionSearched)
IF EMPTY(tcMatchExpList) OR ALLTRIM(tcMatchExpList)=="*"
RETURN
ENDIF
RETURN .F.
ENDIF
lcMatchExpList=LOWER(ALLTRIM(STRTRAN(tcMatchExpList,TAB," ")))
lcExpressionSearched=LOWER(ALLTRIM(STRTRAN(tcExpressionSearched,TAB," ")))
lnExpressionLen=LEN(lcExpressionSearched)
IF lcExpressionSearched==lcMatchExpList
RETURN
ENDIF
llMatchAsIs=tlMatchAsIs
IF LEFT(lcMatchExpList,1)==["] AND RIGHT(lcMatchExpList,1)==["]
llMatchAsIs=.T.
lcMatchExpList=ALLTRIM(SUBSTR(lcMatchExpList,2,LEN(lcMatchExpList)-2))
ENDIF
IF NOT llMatchAsIs AND " "$lcMatchExpList
llMatch=.F.
lnSpaceCount=OCCURS(" ",lcMatchExpList)
lcMatchExpList2=lcMatchExpList
lnCount=0
DO WHILE .T.
lnAtPos=AT(" ",lcMatchExpList2)
IF lnAtPos=0
lcMatchExp=ALLTRIM(lcMatchExpList2)
lcMatchExpList2=""
ELSE
lnAtPos2=AT(["],lcMatchExpList2)
IF lnAtPos2lnAtPos
lnAtPos=lnAtPos2
ENDIF
ENDIF
lcMatchExp=ALLTRIM(LEFT(lcMatchExpList2,lnAtPos))
lcMatchExpList2=ALLTRIM(SUBSTR(lcMatchExpList2,lnAtPos+1))
ENDIF
IF EMPTY(lcMatchExp)
EXIT
ENDIF
lcMatchType=LEFT(lcMatchExp,1)
DO CASE
CASE lcMatchType=="+"
lnMatchType=1
CASE lcMatchType=="-"
lnMatchType=-1
OTHERWISE
lnMatchType=0
ENDCASE
IF lnMatchType#0
lcMatchExp=ALLTRIM(SUBSTR(lcMatchExp,2))
ENDIF
llMatch2=this.WildCardMatch(lcMatchExp,lcExpressionSearched,.T.)
IF (lnMatchType=1 AND NOT llMatch2) OR (lnMatchType=-1 AND llMatch2)
RETURN .F.
ENDIF
llMatch=(llMatch OR llMatch2)
IF lnAtPos=0
EXIT
ENDIF
ENDDO
RETURN llMatch
ELSE
IF LEFT(lcMatchExpList,1)=="~"
RETURN (DIFFERENCE(ALLTRIM(SUBSTR(lcMatchExpList,2)),lcExpressionSearched)>=3)
ENDIF
ENDIF
lnMatchCount=OCCURS(",",lcMatchExpList)+1
IF lnMatchCount>1
lcMatchExpList=","+ALLTRIM(lcMatchExpList)+","
ENDIF
FOR lnCount = 1 TO lnMatchCount
IF lnMatchCount=1
lcMatchExp=LOWER(ALLTRIM(lcMatchExpList))
lnMatchLen=LEN(lcMatchExp)
ELSE
lnAtPos=AT(",",lcMatchExpList,lnCount)
lnMatchLen=AT(",",lcMatchExpList,lnCount+1)-lnAtPos-1
lcMatchExp=LOWER(ALLTRIM(SUBSTR(lcMatchExpList,lnAtPos+1,lnMatchLen)))
ENDIF
FOR lnCount2 = 1 TO OCCURS("?",lcMatchExp)
lnAtPos=AT("?",lcMatchExp)
IF lnAtPos>lnExpressionLen
IF (lnAtPos-1)=lnExpressionLen
lcExpressionSearched=lcExpressionSearched+"?"
ENDIF
EXIT
ENDIF
lcMatchExp=STUFF(lcMatchExp,lnAtPos,1,SUBSTR(lcExpressionSearched,lnAtPos,1))
ENDFOR
IF EMPTY(lcMatchExp) OR lcExpressionSearched==lcMatchExp OR ;
lcMatchExp=="*" OR lcMatchExp=="?" OR lcMatchExp=="%%"
RETURN
ENDIF
IF LEFT(lcMatchExp,1)=="*"
RETURN (SUBSTR(lcMatchExp,2)==RIGHT(lcExpressionSearched,LEN(lcMatchExp)-1))
ENDIF
IF LEFT(lcMatchExp,1)=="%" AND RIGHT(lcMatchExp,1)=="%" AND ;
SUBSTR(lcMatchExp,2,lnMatchLen-2)$lcExpressionSearched
RETURN
ENDIF
lnAtPos=AT("*",lcMatchExp)
IF lnAtPos>0 AND (lnAtPos-1)<=lnExpressionLen AND ;
LEFT(lcExpressionSearched,lnAtPos-1)==LEFT(lcMatchExp,lnAtPos-1)
RETURN
ENDIF
ENDFOR
RETURN .F.
ENDPROC
ENDDEFINE
DEFINE CLASS _webform AS form
*< CLASSDATA: Baseclass="form" Timestamp="" Scale="Pixels" Uniqueid="" />
*-- OBJECTDATA items order determines ZOrder / El orden de los items OBJECTDATA determina el ZOrder
*< OBJECTDATA: ObjPath="oleWebBrowser" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="_resizable" UniqueID="" Timestamp="" />
*
Caption = "Web Form"
DoCreate = .T.
Height = 289
Left = 0
Name = "_webform"
Top = 0
Width = 398
*
ADD OBJECT '_resizable' AS _resizable WITH ;
Left = 372, ;
Name = "_resizable", ;
Top = 12
*< END OBJECT: ClassLib="..\ffc\_controls.vcx" BaseClass="custom" />
ADD OBJECT 'oleWebBrowser' AS _webbrowser4 WITH ;
Height = 264, ;
Left = 12, ;
Name = "oleWebBrowser", ;
Top = 12, ;
Width = 372
*< END OBJECT: ClassLib="_webview.vcx" BaseClass="olecontrol" OLEObject="c:\windows\system\shdocvw.dll" Value="0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAPgADAP7/CQAGAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAEAAAAgAAAAEAAAD+////AAAAAAAAAAD////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/////v////7////+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////1IAbwBvAHQAIABFAG4AdAByAHkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAUA//////////8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATRTfwDL0BAwAAAEABAAAAAAAAAwBPAGwAZQBPAGIAagBlAGMAdABEAGEAdABhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAgEDAAAAAgAAAP////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArAAAAAAAAAADAEEAYwBjAGUAcwBzAE8AYgBqAFMAaQB0AGUARABhAHQAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJgACAP///////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAA4AAAAAAAAAAMAQwBoAGEAbgBnAGUAZABQAHIAbwBwAHMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAIA////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAQAAAAAAAAAAwAAAP7////+////BAAAAP7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9h+VaICjTQEalrAMBP1wWiTAAAAHMmAABJGwAAAQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAATAAAAAAAAAAAAAAAOAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAA4NBXAHM1zxGuaQgAKy4SYggAAAAAAAAATAAAAAEUAgAAAAAAwAAAAAAAAEYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==" />
PROCEDURE Init
LPARAMETER cURL
IF !EMPTY(cURL)
THIS.olewebbrowser.navigate(cURL)
ENDIF
ENDPROC
PROCEDURE Resize
THIS._resizable.adjustcontrols()
ENDPROC
ENDDEFINE