*-------------------------------------------------------------------------------------------------------------------------------------------------------- * (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