Local lcHTML lcHTML = Forcepath('Sample.html', Sys(2023)) If !Directory(ForcePath('images',Sys(2023))) Md (ForcePath('images',Sys(2023))) endif If !File(m.lcHTML) Strtofile( GetSampleHTML(), m.lcHTML) Endif Public o o = Createobject('MyHTMLViewer', m.lcHTML) o.Show Define Class MyHTMLViewer As Form Caption = "HTML sample" Height = 768 Width = 1024 Add Object htmlviewer As OleControl With ; anchor = 15, Left=216, Top=43, Height=685, Width = 793, OleClass = 'Shell.Explorer' Procedure Init Lparameters tcHTML With Thisform.htmlviewer .Navigate2(m.tcHTML) Endwith Endproc Procedure htmlviewer.Refresh Nodefault Endproc Procedure htmlviewer.BeforeNavigate2 Lparameters pdisp, url, Flags, targetframename, postdata, headers, Cancel If Atc('#',m.url) > 0 Local lcVals, lcCurrentValue * oFrm = This.Object.Document.myForm lcVals = m.url + Chr(13)+Chr(10) If This.Object.Document.Forms.Length > 0 For Each oFrm In This.Object.Document.Forms lcVals = lcVals + oFrm.Name + Chr(13) If oFrm.elements.Length > 0 For Each oElem In oFrm.elements If !Empty(oElem.Name) If oElem.Type = "select-multiple" lcList='' For ix=0 To oElem.Length-1 If oElem.Item(ix).Selected lcList = lcList + Iif(Empty(lcList),'',',')+oElem.Item(ix).Value Endif Endfor m.lcCurrentValue = m.lcList Else m.lcCurrentValue = oElem.Value Endif lcVals = lcVals + Textmerge("<< oElem.Name >>: << m.lcCurrentValue >> << Chr(13) + Chr(10) >>") oElem = .Null. Endif Endfor Endif oFrm = .Null. Endfor Endif Cancel = .T. && prevents actual navigation Messagebox(m.lcVals) Endif Endproc Enddefine Procedure GetSampleHTML Local lcCarouselImages, lcMyHtml Set Textmerge To Memvar m.lcCarouselImages On Noshow For ix=1 To Adir(laImages, _samples+'data\graphics\*.*') Copy File (_samples+'data\graphics\'+laImages[m.ix,1]) to ForcePath(laImages[m.ix,1],Addbs(Sys(2023))+'images') \<a class="carousel-item" href="#<< chrtran(JustFname(laImages[m.ix,1]),'.','_') >>"> \\<img src="images/<< JustFname(laImages[m.ix,1]) >>"/></a> Endfor Set Textmerge To Set Textmerge Off TEXT to m.lcMyHtml textmerge noshow <!DOCTYPE html> <html> <head> <meta http-equiv="X-UA-Compatible" content="IE=edge"/> <!--Import Google Icon Font--> <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"> <!--Import materialize.css--> <!-- Compiled and minified CSS --> <link type="text/css" rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css" media="screen,projection"/> <!--Let browser know website is optimized for mobile--> <meta name="viewport" content="width=device-width, initial-scale=1.0"/> <title>Materialize Sandbox</title> </head> <body> <div> <div class="row"> <form action="" method="POST" name="MyForm"> <div class="col s6"> <input type="text" class="datepicker" placeholder="Start date" name="fromDate"> </div> <div class="col s6"> <input type="text" class="timepicker" placeholder="Time" name="fromTime"> </div> <div class="col s6"> <input type="text" class="datepicker" placeholder="End date" name="toDate"> </div> <div class="col s6"> <input type="text" class="timepicker" placeholder="Time" name="toTime"> </div> <a href="#runItem" class="btn-floating btn-small green darken-1 waves-effect waves-light tooltipped" data-position="top" data-tooltip="Run report"> <i class="material-icons">play_arrow</i> </a> </form> <div class="carousel"> << m.lcCarouselImages >> </div> </div> </div> <!--JavaScript at end of body for optimized loading--> <!-- Compiled and minified JavaScript --> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/js/materialize.min.js"></script> </body> <script> $(document).ready(function () { $('.tooltipped').tooltip(); $('.carousel').carousel(); $('.datepicker').datepicker({format: 'mm/dd/yyyy'}); $('.timepicker').timepicker({twelveHour: false}); }); </script> </html> ENDTEXT Return m.lcMyHtml Endproc