图片在VFP中的显示与打印技术研究
- 格式:pdf
- 大小:115.96 KB
- 文档页数:2
VFP3D图形图像的生成VFP 3D 图形图像的生成现在已经做得很好很实用了FGL - Fox Graphics Library.FGL 是高性能的三维图形应用程序框架,基于 OpenGL,OpenIL,assimp,FreeType 和 openmesh。
FGL 是针对 VFP 开发人员感兴趣的在他们的应用程序中添加交互式三维可视化功能。
FGL支持:- 单易用的场景图的面向对象的接口- 用户交互(鼠标,键盘事件)- 渲染性能优化特征空间剔除,层次细节(LOD),顶点缓冲和实例化- 材料和光系统- 文本渲染 TrueType 和 OpenType 字体- 多视口- 骨骼动画- 加载 3D 模型和纹理有多种格式,见/main_features_formats.html和/features.php基于 FGL 的一个 VFP 视频演示程序该 Demo 是展示了铁路调度中心的 3D 场景/watch?v=voSSELM7oRsFGL for VFP 开源下载:FGL - Fox Graphics Library.current 0.7adate Mon Nov 18, 2013 at 8:00 AMstatus Alphadownloads 76size 17.6MB前几天刚刚新鲜出炉FGL demo 屏幕截图俄罗斯铁路枢纽调度中心3D 场景、双缓存动画、镜头高速推拉、无级缩放、变焦、鹰眼、灯光、光线、渲染、法线、纹理、平行投影、透视投影、光照、材质、深度暗示(Depth Cue)、运动模糊(Motion Blur)等特效、消隐、......一下省略1W字2013/11/26 更新:current 0.7.1adate Tue Nov 26, 2013 at 8:00 AM status Alphaapplication 1866K最新版现在在 / 网站也可以下载了FGL 0.7.1a3D 旋转狐狸头。
Bitmap是⾮压缩型图像⽂件,占⽤的存储空间很⼤,⽽JPG图像⽂件是压缩型图像⽂件,因此,正确保存和显⽰JPG等图像⽂件具有很⾼的实⽤价值。
在VFP编程中,需保存图像⽂件时,通常是将图像以OLE⽅式保存到⼀个GENERAL型字段中。
当需要在表单中显⽰该图像时,则使⽤OLE Bound控件,并将该控件绑定到保存图像的字段上即可。
上述⽅法对于保存和显⽰Bitmap位图时没有问题,但是对JPG、GIF等图像⽂件则⽆法显⽰图像,⽽只能将其保存时的图像⽂件名显⽰出来。
VFP 6.0版中的Imgae控件⽀持 bmp、gif、jpg和ico等图像⽂件格式,但是该控件不能绑定到保存图像⽂件的GENERAL 型字段上。
本⽂所采⽤的基本思路是:不将图像⽂件保存到GENERAL型字段中,⽽是把图像⽂件保存到⼀个⼆进制的Memo 型字段中,当需要显⽰图像时,则将该Memo型字段的内容输出到⼀个临时⽂件中,然后再将临时⽂件名赋给Image控件中Picture属性即可显⽰图像。
在报表打印输出时,也可以采⽤类似的⽅法打印图像。
为实现上述的构想,本⽂提供了两个函数,⼀个是将图像⽂件保存到Memo型字段中,另⼀个是将Memo型字段中的图像保存到⼀个外部⽂件中。
下⾯的过程⽂件是将⼀个外部图像⽂件保存到⼆进制Memo型字段中。
图像⽂件在Memo型字段中的格式为:前128个字节保存原始图像⽂件名,其后的数据为图像数据。
Procedure s—ftomlparameter s—cfield , s—cfilelocal s—temp—strif vartype(s—cfield) !=″C″ or vartype(s—cfile) !=″C″=MessageBox(″参数类型错!″,48,″提⽰″)return .F.endifif type(″&s—cfield″) != ″M″=MessageBox( ″′″+s—cfield +″′″+″字段必须是⼆进制备注型数据!″,48,″提⽰″)return .F.endifif !file( s—cfile)=MessageBox( ″⽂件:″+s—cfile+″不存在!″,48,″提⽰″)return .F.endifs—temp—str=PADR(JUSTFNAME(s—cfile),128, ′′)+filetostr(s—cfile)replace (s—cfield) with s—temp—strreturn .T.endproc。
表格中显示图片和说明的做法此表格的数据源是A_.DBF〔有4个字段:DC—字符型,等级—字符型,标准片—通用型,说明—备注型〕通用型字段内照片存入的方法:在“图画〞〔或看照片的程序〕中翻开要存入的照片,选“复制〞。
再USE A_.DBF ,点击要存入的字段〔标准片〕,点击“编辑〞中的“粘贴〞即可将照片存到通用型字段内。
要显示出如上图片和说明,表单中要做以下设置:在表单中表格Grid1的属性要改变如下:属性说明参数AllowHeaderSizing 指定表格标头运行时能否改变 FAllowRowSizing 指定能否人工调整表格行的大小 FCloumCount 指定表格中列数 3DeleteMark 指定表格中是否显示删除标记列 FRecordSource 指定与表格建立联络的数据源A_RowHeight 指定表格中行的高度130ScrollBars 指定表格中滚动条的类型2-垂直ToolTipText 指定表格的工具提示文本点击关闭在表单中表格Grid1的Colum1属性要改变如下:属性说明参数ControlSource 指定与表格建立联络的数据源 ACurrentControl 指定列的控件中哪个用来显示单元格的值Text1在表单中表格Grid1的Colum1的Head1属性要改变如下:属性说明参数Aligment 指定与控件相关的文本对齐方式2-居中Caption 指定对象标题文本等级由于要用第二列显示图片,需要参加Oleboundcontrol1〔在Grid的默认属性中没有〕。
添加的方法,先把属性选为:Colum2,从表单控件工具栏里选择ActiveX绑定控件,在表单的第二列点击一下,Oleboundcontrol1就添加好了。
在表单中表格Grid1的Colum2属性要改变如下:属性说明参数ControlSource 指定与表格建立联络的数据源A_.标准片CurrentControl 指定列的控件中哪个用来显示单元格的值Oleboundcontrol1 Width 指定对象的宽度333在表单中表格Grid1的Colum2的Head1属性要改变如下:属性说明参数Aligment 指定与控件相关的文本对齐方式2-居中Caption 指定对象标题文本标准片在表单中表格Grid1的Colum2的Text1属性要改变如下:属性说明参数BorderStyle 指定对象的边框款式0-无Click Event 点击鼠标时发生用户自定义在表单中表格Grid1的Colum2的Oleboundcontrol1属性要改变如下:属性说明参数ControlSource 指定与表格建立联络的数据源 AStretch 指定如何调整图片尺寸放入控件2-变比填充由于要用第三列显示备注,需要参加Edit1〔在Grid的默认属性中没有〕。
VF设置打印机若干方法很久以来,关于VFP打印的纸张设置一直是个难题。
也有很多这方面的贴子。
其实他们也解决了大部分问题。
只是没有归纳起来。
“童心未免”的win2000/xp纸张设置,“李彤”的在Visual FoxPro 6中动态修改打印纸张大小(win98),他们都解决了在win2000\ p\\98中自定义纸张的设置问题。
我在他们的基础上稍作归纳,加上了一点自己的想法,做成了一个类。
可以自己根据系统设置自定义纸张。
其中heap类就是“童心未免”的,函数setwin98_page就是“李彤”的。
当然我在他们的基础上根据我的想法做了一定的修改。
整个调用是这样的:在主程序中先建立heap类实列(如Oheap)(也可以将heap添加到表单),在表单中添加Myplt类表单在打印或预览时代码如下:oApp.setpage(\"FHMX\",this.pageWidth,this.pagehight )(报表文件名,宽度(mm),宽度(mm))*设置预览尺寸(cm)IF this.pagehight>0 AND this.pageWidth>0this.myplt1.sheight=this.pagehight/10this.myplt1.swidth =this.pageWidth/10ELSEthis.myplt1.sheight=29.7this.myplt1.swidth =21ENDIFthis.myplt1.ListenerType=1loreport= .NULL.DO (_REPORTPREVIEW) WITH loreportWITH loreport.Caption = \"订单预览\".ZoomLevel = 4 && 75%.CanvasCount = 1ENDWITHthis.myplt1.PreviewContainer =loreportREPORT FORM reports\\fhmx TO PRINTER Object this.myplt1可能里面有些代码有问题,因为它是和我的程序配合使用的,我开始并没有单独做,才整理的,没做测试。
VFP处理JPG图像文件方法谈Bitmap是非压缩型图像文件,占用的存储空间很大,而JPG图像文件是压缩型图像文件,因此,正确保存和显示JPG等图像文件具有很高的实用价值。
在VFP编程中,需保存图像文件时,通常是将图像以OLE方式保存到一个GENERAL型字段中。
当需要在表单中显示该图像时,则使用OLE Bound控件,并将该控件绑定到保存图像的字段上即可。
上述方法对于保存和显示Bitmap位图时没有问题,但是对JPG、GIF等图像文件则无法显示图像,而只能将其保存时的图像文件名显示出来。
VFP 中的Imgae控件支持bmp、gif、jpg和ico等图像文件格式,但是该控件不能绑定到保存图像文件的GENERAL型字段上。
基本思路是:不将图像文件保存到GENERAL型字段中,而是把图像文件保存到一个二进制的Memo型字段中,当需要显示图像时,则将该Memo 型字段的内容输出到一个临时文件中,然后再将临时文件名赋给Image控件中Picture属性即可显示图像。
在报表打印输出时,也可以采用类似的方法打印图像。
为实现上述的构想,提供了两个函数,一个是将图像文件保存到Memo型字段中,另一个是将Memo型字段中的图像保存到一个外部文件中。
下面的过程文件是将一个外部图像文件保存到二进制Memo型字段中。
图像文件在Memo 型字段中的格式为:前128个字节保存原始图像文件名,其后的数据为图像数据。
Procedure s—ftomlparameter s—cfield , s—cfilelocal s—temp—strif vartype(s—cfield) !=″C″or vartype(s—cfile) !=″C″=MessageBox(″参数类型错!″,48,″提示″)return .F.endifif type(″&s—cfield″) != ″M″=MessageBox( ″′″+s—cfield +″′″+″字段必须是二进制备注型数据!″,48,″提示″)return .F.endifif !file( s—cfile)=MessageBox( ″文件:″+s—cfile+″不存在!″,48,″提示″)return .F.endifs—temp—str=PADR(JUSTFNAME(s—cfile),128, ′′)+filetostr(s—cfile)replace (s—cfield) with s—temp—strreturn .T.endproc下面的过程文件是将Memo型字段中的图像保存到外部文件中,s—default—return当Memo字段为空或读写错误时该过程返回的隐含信息。
VFP中图形打印方法刍议作者:胡祥柏来源:《安徽教育科研》2019年第12期摘要:图形的打印输出是VFP中的一个难点,很多同学在学习VFP的过程中感到对图形输出程序的编写束手无策。
本文通过采用对问题拆分,层层分解的办法,阐述了编写打印图形程序的方法及注意事项,最后给出了几个常见图形程序的实现方法,以加深同学们对打印图形程序的理解。
关键词:VFP 循环嵌套图形打印在VFP程序设计中,打印图形的操作让很多同学头疼,如何控制好图形输出的位置、每一行打印图形的个数是多少、打印的图形有什么规律、如何找到其中的规律,对于初次学习VFP程序设计语言的同学而言是一个难点,也是一个痛点。
以下就VFP中图形打印原理与方法进行介绍。
一、绘制图形的原理打印图形通常要用到循环,若打印一维的多个相同的符号,也就是在一行打印多列,通常用单重循环。
但是,若打印的图形是二维的,也就是按一定的规律输出多行多列,那就要用二重循环(即循环的嵌套),而循环的嵌套恰恰是程序设计中的难点。
在VFP中循环有三种基本形式:do while ……enddo循环,for……endfor循环,scan ……endscan循环。
由于scan ……endscan循环是专门对数据表扫描操作所设计的循环,因此在打印图形中一般用不到它,而用其他两种循环结构来打印图形的比较多。
下面就以几个典型的特例为例子,介绍打印图的原理:问题分析:(1)程序要解决的问题是打印输出一个3行5列的图形,图形中的符号是“*”,所以打印该图形首先要解决的基本问题是如何输出一个“*”。
若要在程序中某一行输出一个“*”号,那么在程序中只要下列一条语句即可:??”*”(2)若要在程序中某一行输出5个“*”号,即“*****”,那么在程序中只要把??“*”这个语句反复执行五次即可。
如何让一个语句反复执行五次呢?因为循环具有重复或反復去完成一件事情的功能,所以就要使用循环:for j=1 to 5??“*”endfor(3)在第一行输出完5个“*”后,因为下一行还要再输出相同的图形,所以要在endfor 语句后加一个?用来进行换行,也就是为输出下一行设置好起始位置,于是程序就变成如下形式:for j=1 to 5??“*”endfor?(4)如何使每一行在输出“*”前使整个图形往右移若干列呢?为了在每一行开始输出“*”号前,使整个图形往右移若干列,在执行循环语句前应插入若干空格,然后再输出5个“*”号。
VFP下打印机的设置编程VFP本身提供了部分相关打印机的数据返回函数以及部分设置项,但在打印机的直接控制方面没有提供相应的策略,这里从分析打印机的Devmode和PRINTER_INFO_2的结构来详细说明一下VFP打印机的相关操作编程。
首先看下打印机的基本数据结构Devmode:Private Type DEVMODEdmDeviceName As String * 32 &&打印设备名称,每个打印机驱动程序都有一个唯一的字符串。
dmSpecVersion As Integer *2bit &&指定Win32 软件开发工具包中DEVMODE 结构的版本号。
33-34dmDriverVersion As Integer *2bit &&指定由打印机驱动程序开发商分配的打印机驱动程序版本号。
35-36dmSize As Integer *2bit &&指定DEVMODE 结构的字节大小。
37-38dmDriverExtra As Integer *2bit &&指定设备的数据可选dmDriverData 成员的字节大小。
39-40dmFields As Long *2bit &&指定DEVMODE 结构中的哪些其余成员已被初始化。
41- 44dmOrientation As Integer *2bit &&指定纸张的方向。
它可以为1(纵向)或2(横向)。
45-46dmPaperSize As Integer *2bit &&指定打印的纸张大小。
47-48dmPaperLength As Integer *2bit &&替代由PaperSize成员为自定义纸张大小的高度,PaperSize为0或256时有效。
49-50dmPaperWidth As Integer &&代由PaperSize成员为自定义纸张大小的宽度,PaperSize为0或256时有效。