lcDocument = Getfile('DOC') Set Textmerge To Memvar myVar Noshow Set Textmerge On \DEFINE CLASS oleWordObject as OLEControl \ OleClass ="Word.document" && Server name \ OleTypeAllowed = 0 && Linked \ DocumentFile = "<<lcDocument>>" && This file should exist \ENDDEFINE Set Textmerge To Set Textmerge Off lcTempClass = Sys(2015)+'.prg' Strtofile(myVar, lcTempClass) Compile (lcTempClass) oform = Createobject("myForm") With oform .Height = 420 .Width = 620 .Newobject("WordObject","oleWordObject",lcTempClass) && Add OLE object With .WordObject .Left = 5 .Top = 5 .Width = .Parent.Width - 10 .Height = .Parent.Height - 10 .Visible = .T. Endwith Endwith oform.Show Read Events Clear Class 'oleWordObject' Erase (Juststem(lcTempClass)+'.*') Define Class myForm As Form Procedure QueryUnload Clear Events EndProc EnddefineHowever you'd notice that you should know the server too. Say for jpg server on your box might be SomeJPEGViewer.exe and it might not exist on user's computer. You might skip specifying server to workaround but I don't know what would happen then.
oForm = createobject('form1') oForm.show() Read events Define CLASS form1 AS form Top = 0 Left = 0 Height = 470 Width = 740 DoCreate = .T. Caption = "HTML sample" Name = "Form1" HTMLFile='' && Custom prpoperty to hold temp .htm name * This is IE control - you'd use webbrowser4 from gallery instead * just because it already has some checks, extra pem. ie: wouldn't need readystate part * for the sake of keeping code short here I directly use olecontrol itself Add OBJECT htmlviewer AS olecontrol WITH ; Top = 12, ; Left = 12, ; Height = 396, ; Width = 708, ; Visible = .T., ; Name = "HTMLViewer", ; OleClass = 'Shell.Explorer' Add OBJECT text1 AS textbox WITH ; Height = 25, ; Left = 12, ; Top = 432, ; Width = 60, ; Name = "Text1" Add OBJECT text2 AS textbox WITH ; Height = 23, ; Left = 84, ; Top = 432, ; Width = 204, ; Name = "Text2" Add OBJECT text3 AS textbox WITH ; Height = 23, ; Left = 300, ; Top = 432, ; Width = 125, ; Name = "Text3" Add OBJECT text4 AS textbox WITH ; Height = 23, ; Left = 432, ; Top = 432, ; Width = 125, ; Name = "Text4" Procedure Init Local lnImages, lnPerrow, lnCurrent lnImages = adir(arrImages,'myimages\*.gif') *You'd use a table let's simulate it Create cursor myImages (ImagePath c(50),FirstName c(12), LastName c(12)) For ix=1 to lnImages Insert into myImages values ; ('myImages\'+arrImages[ix,1],'FirstName'+trans(ix),'LastName'+trans(ix)) Endfor *Now we have a test table - create HTML lnPerRow = 3 && How many would we show on a line lnCurrent = 0 && Do not use recno() thinking it might be ordered on an index This.HTMLFile = sys(2015)+'.htm' Set textmerge on Set textmerge to (this.HTMLFile) noshow * Initialize lcHTML \<HTML><BODY><TABLE> Select myImages Scan lnCurrent = lnCurrent+1 If (lnCurrent-1)%lnPerRow=0 If lnCurrent>1 \</TR> Endif \<TR> Endif \<TD><A href="<<trans(recno())>>"><img border="0" src="<<trim(chrtran(ImagePath,'\','/'))>>"></A></TD> Endscan \</TR> \</TABLE></BODY></HTML> Set textmerge to Set textmerge off *!* Modify Command (this.HTMLFile) && If you ever wonder created HTML With ThisForm.htmlviewer .Navigate2('file://'+sys(5)+curdir()+this.HTMLFile) Do while .ReadyState # 4 && Wait for ready state Enddo Endwith Endproc Procedure htmlviewer.BeforeNavigate2 *** ActiveX Control Event *** Lparameters pdisp, url, flags, targetframename, postdata, headers, cancel Cancel = .t. && do not navigate to anywhere With thisform && with webbrowser4 also this.oHost is the form itself or container .text1.value = justfname(url) Go val(justfname(url)) in 'myImages' .text2.value = myImages.ImagePath .text3.value = myImages.FirstName .text4.value = myImages.LastName Endwith Endproc Procedure queryunload Clear events Endproc Procedure destroy Erase (this.HTMLFile) Endproc EnddefinePS: For the latter myImages folder has copy of images from samples data\graphics.