这里引用陆卫康老师的文章介绍图片的导入与还原问题在 VFP 6.0 中使用二进制备注字段存放文件并还原显示 VFP 6.0 中用通用字段不能较好显示 JPG 格式等有关图片文件及 WORD 文档和 EXCEL 文件。经多次试验,本人找到一种较好的方法,并能较好实现显示有关文件。实现原理:在 VFP 数据表的二进制备注字段或 SQL SERVER 数据库数据表的 Image 字段中存放文件的二进制数据,在需要显示文件时,将该二进制备注字段的内容转换成原格式文件并进行显示。示例:在 VFP 数据表建立一二进制备注字段 或 SQL SERVER 数据库的表上建立一 Image 字段,假设该字段名为: my_image一、由文件导入字段(FtoM):原理: 在备注字段的前128个字符内存放文件名(包括扩展名),从第129个字符起存放文件内容使用函数: FILETOSTR()Local my_file,my_text,my_memomy_file=UPPER(GETFILE())If EMPTY(my_file) RetuEndifWait WIND " 正在导入文件,请稍候... " NOWAITmy_memo=PADR(JUSTFNAME(my_file),128," ")+FILETOSTR(my_file)Repl my_image WITH my_memoWait CLEARMessagebox(CHR(13)+"文件导入成功,导入的文件为: "+CHR(13)+CHR(13)+my_file,64,"文件导入成功") 二、由字段内容还原为文件(MtoF):原理:取出文件名,并将从第129个字符起的文件内容还原成原格式文件使用函数: STRTOFILE()Local my_memoIf LEN(my_image) <= 128 OR ISNULL(my_image) OR EMPTY(my_image) Messagebox("该记录内无文件内容! ",64,"信息") RetuEndifmy_file=ALLT(LEFT(my_image,128))my_text=JUSTEXT(ALLT(LEFT(my_image,128)))my_file=PUTFILE("另存为",my_file,my_text)If EMPTY(my_file) RetuEndifWait WIND " 正在还原文件,请稍候... " NOWAIT=STRTOFILE(SUBST(my_image,129),my_file,.F.)Wait CLEARMessagebox(CHR(13)+"文件还原成功,存放位置: "+CHR(13)+CHR(13)+my_file,64,"还原文件成功")三、常见的几种格式文件显示。假设被还原的文件名存为变量 my_file(一)、BMP 、 JPG 、GIF 文件方法1:表单中增加 Image 控件 Image1显示控件:ImageIf !empty(my_file) or !isnull(my_file) Thisform.Image1.picture=my_file Thisform.Image1.visible=.T.Else Thisform.Image1.picture="" Thisform.Image1.visible=.F.Endif方法2:在浏览器中显示使用函数: STRTOFILE()使用控件: HyperlinkLocal htm_name,my_html,my_titlehtm_name=subst(my_file,1,at(".",my_file)-1)+".htm"my_title="图 片 资 料"my_html=my_html+"<html>"+chr(13)+"<head>"If file(my_file) my_pic=strtran(my_file,"\","/") my_html=my_html+chr(13)+"<p align="center"><img border="0" src="
file:///"+my_file; +" align="middle">
"Endifmy_html=my_html+chr(13)+"</body>"+chr(13)+"</html>"=strtofile(my_html,htm_name,.F.)Release my_htmlLocal lcURLlcURL=ALLTRIM(htm_name)If NOT LOWER(LEFT(lcURL,5))=="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://";+lcURLEndifIf SUBSTR(PADR(lcURL,5),5,1)==":" lcURL=STRTRAN(STRTRAN(lcURl,"\","/"),"///","//")Else lcURL="
file://"+STRTRAN(STRTRAN(STRTRAN(lcURL,"\","/"),"///","//"),"//","/")EndifThisform.Hyperlink1.navigateto(lcURL) &&表单中加VFP超级链接类 Hyperlink(二)、DOC 、 RTF 、TXT 文件方法1:在 WORD 中显示** 建立 Word.applicationoWord=CREATEOBJECT("Word.application")oDoc=oWord.DocumentsoDoc.Open(my_file)oWord.visible=.T.方法2:在 浏览器中显示使用控件: HyperlinkLocal lcURLlcURL=ALLTRIM(my_file)If NOT LOWER(LEFT(lcURL,5))=="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://";+lcURLEndifIf SUBSTR(PADR(lcURL,5),5,1)==":" lcURL=STRTRAN(STRTRAN(lcURl,"\","/"),"///","//")Else lcURL="
file://"+STRTRAN(STRTRAN(STRTRAN(lcURL,"\","/"),"///","//"),"//","/")EndifThisform.Hyperlink1.navigateto(lcURL) &&表单中加VFP超级链接类 Hyperlink(三)、XLS 文件方法1:在 EXCEL 中显示OleApp=CREATEOBJECT("Excel.Application") && 打开EXCEL,产生OLE对象OleApp.Application.Caption="资料" && 指定标题栏名称OleApp.Application.WorkBooks.Open(my_file) && 打开EXCEL工作簿OleApp.Application.Visible=.T. && 置EXCEL可见方法2:在 浏览器中显示使用控件: HyperlinkLocal lcURLlcURL=ALLTRIM(my_file)If NOT LOWER(LEFT(lcURL,5))=="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://";+lcURLEndifIf SUBSTR(PADR(lcURL,5),5,1)==":" lcURL=STRTRAN(STRTRAN(lcURl,"\","/"),"///","//")Else lcURL="
file://"+STRTRAN(STRTRAN(STRTRAN(lcURL,"\","/"),"///","//"),"//","/")EndifThisform.Hyperlink1.navigateto(lcURL) &&表单中加VFP超级链接类 Hyperlink(四)、HTM 文件在 浏览器中显示使用控件: HyperlinklcURL=ALLTRIM(my_file)If NOT LOWER(LEFT(lcURL,5))=="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://";+lcURLEndifIf SUBSTR(PADR(lcURL,5),5,1)==":" lcURL=STRTRAN(STRTRAN(lcURl,"\","/"),"///","//")Else lcURL="
file://"+STRTRAN(STRTRAN(STRTRAN(lcURL,"\","/"),"///","//"),"//","/")EndifThisform.Hyperlink1.navigateto(lcURL) &&表单中加VFP超级链接类 Hyperlink用上述方法,我成功解决了收发文、档案管理系统中全文的显示和存储。当然,在 VFP 中也可以用 VFP 的控件类 _webbrowser4 进行显示,缺点是打印等有关功能实现较差。