自定义报表预览,高度的可定制化,带来的无限可能

加菲猫的VFP 2022-03-30 01:20:50

自定义报表预览,高度的可定制化,带来的无限可能

象第五章“在报表系统中的增强”中讲的那样,VFP9提供了一个新的报表预览窗口。一个新的系统变量_REPORTPREVIEW指定了一个应用程序的名称,该应用程序将被用作一个“工厂”(“工厂”是一个“并不自己提供客户端对象需要的功能,而是会建立一个提供这些功能的新对象”的设计模式),用于生成报表预览窗口。默认情况下,该系统变量指向在VFP主目录下的ReportPreview.APP,但是你可以根据自己的需要将它替换成你自己的APP。这种可以使用一个VFP应用程序来作为报表预览窗口的能力,与以前的版本相比,提供了大量对报表预览的表现和行为的控制。

当你预览一个报表的时候,默认情况下,用于该报表的Listener上的PreviewContainer属性为NULL。在这种情况下,报表引擎会调用由_REPORTPREVIEW所指定的应用程序,这个应用程序则建立一个VFP表单的实例来用作预览窗口,此时,一个对该表单的对象引用将被存储在PreviewContainer属性中。如果一开始PreviewContainer就不是NULL,那么报表引擎就不再操心关于调用一个报表预览工厂应用程序的事情了。

由于报表预览窗口就是一个VFP表单,因此你可以通过适当的设置属性来定制它的行为表现。为了在运行报表前建立一个预览窗口的实例,可以给ReportPreview.APP传递一个变量,ReportPreview.APP会建立预览窗口类的一个实例并将之放入该变量中。然后你就可以根据自己的需要设置这个表单变量的属性、再把这个变量存储到用于报表的那个Listener的PreviewContainer属性中去。

例如,下面的代码(取自CustomizePreview.PRG)会显示一个带有自定义标题、不带工具栏、从第4页开始以75%缩放比例显示两页的预览窗口:

local loPreview, loListener

do (_ReportPreview) with loPreview

with loPreview

    .CurrentPage        = 4

    .ToolbarIsVisible   = .F.

    .CanvasCount        = 2

    .ZoomLevel          = 4

    .Width              = _screen.Width - 20

    .Caption            = 'Chapter 7 Preview Window'

endwith

 

loListener = newobject('SFReportListenerDirective',;

    'SFReportListener.vcx')

loListener.PreviewContainer = loPreview

use _samples + 'Northwind\orders'

report form TestDynamicFormatting object loListener preview

在象Universal Thread这样的论坛上一个很常见的问题是:“我要如何才能将打印按钮从打印预览工具栏上去掉呢?”在过去的版本中,你必须建立一个自定义的资源文件,定制报表预览工具栏来去掉打印按钮,并在你的应用程序中使用这个自定义的资源文件。在VFP9中,你只要简单的把工具栏上那个打印按钮的Visible属性设置为.F.就行了,不过这里还有两个小麻烦:

Listener的PreviewContainer属性不是指向报表预览表单、而是指向一个报表预览表单的代理(Proxy)对象,这个对象所起的作用就好像是Listener和预览表单之间的一个中间人。该代理对象有一个oForm属性用来引用真正的预览表单。预览表单上有一个toolbar属性,其中包含着对预览工具栏的一个引用。因此,隐藏打印工具栏需要将在loListener.PreviewContainer.oForm.Toolbar上的cmdPrint的Visible属性设置为.F.。

预览窗口还有一个带有打印菜单项的快捷菜单,这个快捷菜单是在报表预览窗口的InvokeContextMenu方法中被生成的,你也许会认为从菜单中删除打印功能会需要建立报表预览窗口的子类、并覆盖这个方法。幸运的是,VFP开发组考虑到了这种情况,并提供了一个钩子(hook)来让你可以对这个菜单进行改动。这个钩子是通过存储在ExtensionHandler属性中的一个对象来实现的。如果该属性中包含着一个对象,InvokeContextMenu会在生成菜单以后调用该对象的AddBarsToMenu方法。这样你就可以建立一个自定义对象,该对象带有一个能够删除打印菜单项的AddBarsToMenu方法,再将该对象的一个引用存储在ExtensionHandler属性中(调用SetExtensionHandler来做这件事情)。这样的一个自定义对象还必须有几个别的方法,因为如果ExtensionHandler属性引用了一个对象,别的一些方法也会使用这个对象。下面的代码是这样一个类的例子。

下面取自NoPrintButton.PRG的代码演示了如何来处理这个任务:

use _samples + 'Northwind\orders'

loListener=newobject('SFReportListenerDirective','SFReportListener.vcx')

report form TestDynamicFormatting.FRX preview ;

    object loListener next 20 nowait

loExtension = createobject('ExtensionHandler')

loListener.PreviewContainer.SetExtensionHandler(loExtension)

loListener.PreviewContainer.oForm.Toolbar.cmdPrint.Visible = .F.

 

define class ExtensionHandler as Custom

    function AddBarsToMenu(tcMenu, tnNextBar)

        release bar 12 of &tcMenu

    endfunc

 

    function Release

        if type('This.PreviewForm') = 'O'

            This.PreviewForm.ExtensionHandler = .NULL.

            This.PreviewForm = .NULL.

        endif type('This.PreviewForm') = 'O'

    endfunc

 

    function Show(tnStyle)

    endfunc

 

    function Paint

    endfunc

 

    function HandleKeyPress(tnKeyCode, tnShiftAltCtrl)

    endfunc

enddefine

你并非必须使用定义在ReportPreview.APP中的报表预览表单类来预览一个报表。SFPreviewForm.SCX(如图5所示)同时起着一个报表管理器和一个报表预览窗口的作用。从列表中选择一个报表,然后单击Preview按钮就可以在这个表单上对报表进行预览。Next和Previous按钮可以显示报表中的上一页和下一页。


图5、ReportListener可以输出到一个VFP表单,这样你就可以建立自定义的预览窗口

这里是取自表单的PreviewReport方法中的关键代码,该方法被Preview按钮的Click方法所调用:

with Thisform

    .oListener = createobject('ReportListener')

    .oListener.ListenerType = LISTENER_TYPE_ALLPGS

    report form (lcReport) object .oListener

    .oListener.OutputPage(1, .oPreviewContainer, LISTENER_DEVICE_TYPE_CTL)

endwith

由于这个ReportListener的ListenerType属性被设置为3了,所以它会以“一次处理所有页”模式去绘制所有的页、但不执行任何输出。当绘制完成后,表单会调用这个Listener的OutputPage方法,指示它去将第一页输出到oPreviewContainer图形(shape)上(LISTENER_DEVICE_TYPE_CTL是一个运算结果为2的常量,OutputPage使用这个值去指定一个VFP控件)。OutputPage并不会真正将一页输出到这个Shape上,只是使用这个Shape的大小和位置来作为输出的区域。另一个重要的方法是Paint。无论表单在何时被重绘,在这个方法中的代码都会重新显示当前页。没有这个方法的话,当象缩放表单之类的会导致表单被重绘的方法发生时,就会出现预览消失的情况,因为那个Shape也被重绘了。考虑到表单可能会在Listener完成绘制第一页前就被重绘,所以这里的代码被封装在一个TRY结构中:

with This

    if vartype(.oListener) = 'O'

        try

            .oListener.OutputPage(.nCurrentPage, .oPreviewContainer, ;

                LISTENER_DEVICE_TYPE_CTL)

        catch

        endtry

    endif vartype(.oListener) = 'O'

endwith

注意这个SFPreviewForm只是一个简单的Demo。它并不能处理新的VFP报表预览窗口中的一些问题,比如从预览窗口中打印、或者一次显示多页等等。此外,因为PreviewReport只使用了一个listener的基类,所以也无法实现动态格式化、文本旋转、或者别的特殊效果。你当然可以根据自己的需要来添加这些功能。

如果你想要建立你自己的用作报表预览窗口的类,你的类上必须有一对方法:

SetReport:这个方法应该接收一个对Report Listener对象的引用,并把它储存在什么地方。为了预览一个报表,这个预览报表表单必须要调用这个Listener的一些方法,尤其是OutputPage,因此,它就必须要有一个对Listener的对象引用。当报表结束的时候,Listener将第二次调用SetReport,并向这个方法传递一个NULL,这样就会删除那个引用。否则的话,因为Listener和这个报表预览表单还存在着相互的引用的问题,就会导致这些对象不能被释放(请注意,SFPreviewForm.SCX没有这个方法,因为它不是作为一个报表预览窗口被报表引擎调用的,而是自己去驱动整个报表预览的过程)。

Show:该方法应该接收到跟一个表单的Show方法会接收到的同样的参数,这个参数表示表单是否应该是模式表单。

当预览表单被关闭的时候,它应该调用Listener的OnPreviewClose以确保环境被清理干净了。

NewPreview 类 (在 NewPreview.VCX中)是一个非常简单的例子。它只是一个简单的form基类,上面带有一个名为oPreviewContainer的Shape、以及一个名为oListener的自定义属性。它的SetReport方法有以下这样的代码:

lparameters toListener

This.oListener = toListener

它的Paint方法显示报表的第一页:


if vartype(This.oListener) = 'O'

    This.oListener.OutputPage(1, This.oPreviewContainer, 2)

endif vartype(This.oListener) = 'O'

它的QueryUnload方法告诉Listener去清理环境:

if vartype(This.oListener) = 'O'

    This.oListener.OnPreviewClose()

endif vartype(This.oListener) = 'O'

就这些了!这里是一些为一个报表使用这个类作为预览表单的代码(NewPreview.PRG):

local loPreview, loListener

loPreview  = newobject('NewPreview', 'NewPreview.vcx')

loListener = createobject('ReportListener')

loListener.ListenerType     = 1

loListener.PreviewContainer = loPreview

use _samples + 'Northwind\orders'

report form TestDynamicFormatting object loListener

当然了,这个预览窗口几乎没什么功能;它只是会显示报表的第一页而已。要建立你自己的带有完整功能的报表预览窗口,你也许会想要派生在ReportPreview.APP 中的FRXPreviewProxy 和 FRXPreviewForm 这两个类(当你解压了VFP主目录下的Tools\XSource\XSource.ZIP文件后,可以从Tools\XSource\VFPSource\ReportPreview找到它们的源代码)并添加你需要的其它功能。

新的SYS()函数

在VFP9中有一对跟Report Listener有关的新的SYS()函数。

当当前报表在运行结束之前被取消时,SYS(2024)返回”Y”;若没有当前报表、或者报表正常结束,则返回”N”。在UnloadReport事件触发之后,SYS(2024)被重置为”N”,所以你不能在执行一个REPORT或者LABEL命令的代码中使用这个值。它通常被用于Report Listener的一些根据报表是否运行结束来采取不同操作的方法中。

SYS(2040)表示一个报表的状态。如果没有当前报表,则它返回”0”;如果有一个报表正在被预览则返回”1”;如果报表正在被输出到一个文件或者打印机则返回”2”。这个函数可以被用在象一个报表对象的 Print When表达式中以根据该对象是否正在被预览或者打印来有条件的输出该对象。

总结

Microsoft已经为在设计时和运行时开放VFP的报表引擎做了大量令人难以置信的工作。通过将报表事件传递给ReportListener对象,他们让你可以对这些事件做出反应,从而完成从向用户提供自定义的反馈来提供不同类型的输出、到动态改变对象被绘制的途径等等你期望的任何事情。我们期待着看到VFP社群会用这些新功能做出更好的东西来。

...全文
408 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
2.6主要变动: 1.单元格和文本对象支持自定义字间距和行间距设置。 2.增加了“报表视图”(ReportView)对象,可以支持在报表的任何位置嵌入一个子报表。 3.单元格对象也支持在属性列表窗口中浏览和修改属性(原来只支持拖动对象)。 4.增加一些标准函数,如:Chr(): 返回一个ASCI码表示的字符,ORD(): 返回字符的ASCI码,EnCodeDate(): 按指定的年月日的值合成一个日期,DateTimeToStr(): 将日期转换为字符型,Random(): 返回一个随机数等等。 5.报表页面属性中,增加了一个选项:锁定表格,选择此选项后,在设计器中,表格的格式将被锁定,不能拉动调整,对象的位置也不能改变,只能修改单元格或对象的属性值。 6.在页面的右键菜单中增加了“当前页面另存为...”菜单,可以将某个页面单独保存为一个.apt模板文件。 7.单元格脚本中增加了 SetLineAutoHeight(b: boolean) 方法,可以设置当前行是否自动调整高度。 8.对于企业用户,控件增加了SetCustInfo()方法,可以用来定制设计器和预览窗口标题、文档的扩展名、打印任务的名称、设计器中菜单和子窗口的可见性等。 9.一些bug的修正,如:当windows任务栏是非自动隐藏时,预览窗口显示不全等问题。 ************************************************************ 附ACReport简介 Anycell Report(简称AC Report)是一款中国式报表组件,是国内最早的基于表格,支持图文混排、公式和脚本的中国式报表工具之一。就如Anycell Report的名称那样,灵活强大的表格功能一直是AC Report区别于其它软件或控件最显著的特征之一,AC Report 表格取消了传统表格概念中“列”的概念,每一行上的单元格数量可以不等,且可以自由活动,勿须上下对齐,在制作复杂的中国式报表时可以避免很多不必要的合并拆分操作,制作表格更加方便和随心所欲,并且省时省力。AC Report单元格支持多种丰富的形态,例如格式文本、图片、图表、条码、OLE容器等。 AC Report的一些基本特点: 1.独具特色的表格,风格与Word表格相似,但可以做出比Word或Excel更灵活的表格来。 2. 功能全面、专业的中国式报表设计器,中国用户更易于学习和接受。 3.支持多种单元格样式,可以打印图像、图表(直方图、折线图等)、Rich文本、 条形码、中式财务帐薄、支持在报表中嵌入Word、Excel文档等。 4. 强大的计算和合计功能。内置表达式解析系统和函数库。 5. 可扩充性,可以在应用程序中给报表引擎扩充函数库、报表样式和单元格样式。 6.支持多种报表样式,如清单式、分组、交叉表、以及子报表等。 7. 支持多栏式报表。 8. 和应用程序完美结合,支持windows下所有的开发工具和程序语言(例如Delphi、C++、VB、PB、.NET、易语言),最终用户在设计器里可直接选择打印字段,生成表达式,报表设计器用户容易学习理解。 9. 支持脚本和窗体编程,报表设计人员可以编写脚本、在报表设计器里为报表添加窗体,为最终用户提供更丰富的交互功能。 10. 既可以使用应用程序中的数据集,也支持在报表中直接连接各种数据库,通过SQL直接获得报表需要的数据。 11.无失真导出为Excel、Word、Html格式的文档 12.支持自定义字间距和行间距设置
Kite Report是市场上最灵活的.Net报表引擎. l 他是一套100%托管的.Net组件. l 支持高度复杂报表包含分组,多列,交叉,两次报表, C#/VB.NET脚本等. l 提供最终用户报表设计功能.可在预览时对生成的报表进行修改后再打印. l 方便强大的可视设计工具。您通过简单的托拽和设置就可以制作普通的报表。 l 报表采用C#在.Net 2.0 上开发。 l 报表的数据源可以使用所有的.Net数据类型,如DataSet, DataTable, ArrayList,自定义实体类等,方便和您的程序进行集成。 l 集成图片,条码等报表常用控件。 l 强大的脚本功能。脚本支持C#/VB.Net语言。有编译报错机制。通过脚本可以极大的提供报表应用的灵活性。 l 结构开放灵活方便您和您的框架程序集成。例如提供自定义预览窗口。 l 中文英文两种语言支持(使用可扩展的多语言支持技术)。 l 在报表中可以通过脚本直接与应用程序交互. 产品特性: 兼容: · 托管的报表引擎 · 设计器支持设计时和运行时 · 支持WinForms和WebForms · 支持所有.Net数据源类型,包括DataSets,DataViews,Collections,Arrays和类实现IEnumerable, IList or IListSource,一张报表支持多个数据源 · 使用GDI+实现:渐变填充,透明度,定制形状等 · 支持C#/VB.NET脚本,也支持其他.NET平台的其他语言,使用者不需要学习新的语言 灵活: · 在一个报表中可以实现无限主从报表 · 生成交叉报表是容易的 · 脚本拥有完全控制权,包含项目中的名字空间,变量,方法等 · 报表控件容易学习和使用 · 支持各种报表尺寸和不同打印方向 · 灵活的报表页头/页脚使你的报表好看且容易理解 · 强大的Page Overlays允许你打印漂亮的报表背景,例如水印 · 开放的插件架构,支持扩充自己的报表控件 · 丰富的报表控件,包含文本,形状,图片,条形码,邮编.同样能使用WinForms的控件作为报表元素 · 报表样式支持,你可以使用不同的样式来优报表针对预览,打印和导出等 · 支持约束和非约束模式 · 米制和英寸度量单位 · 加大的数据绑定模式(类似于Win/Web Forms的数据绑定)允许你绑定数据源,系统和本地变量到所有控件属性,也可以使用脚本表达式(C#/VB.NET) · 支持导出到PDF, HTML, RTF, EMF, BMP, JPG, GIF, PNG, TIFF, Excel, CSV and Text文件 容易使用和发布 · 容易发布,核心公两个DLL · 报表文件是XML格式,方便共享
滴答表格控件专业版功能介绍 滴答表格专业版 是一款面向个人软件作者的表格控件。她集模板开发、公式运算、数据显示/展现于一体,同时也具备了报表产品的数据源绑定,数据统计和打印输出的功能,并开放了柱状图表应用功能,帮助个人软件作者灵活快速地响应软件需求变,是个人软件作者的首选组件产品。 1、模板开发的编程理念 2、功能强大 简单易用 3、提供快速报表设计器 4、提供个性定制功能服务 5、支持Windows平台下任何C/S开发工具 6、支持绑定数据库及外部数据源 7、支持外部数据的导入导出 8、一流的技术支持服务 9、持续地产品升级服务 10、丰富的研发资料和产品示例 11、无限分发 1.模板开发的编程理念 当今企业的业务需求复杂多变,对软件的通用性要求越来越高,造成开发周期过长,给软件项目带来不可预知的风险,同时大大降低了软件企业的利润空间,而滴答表格专业版正是为解决这些问题而推出的一款基于模板开发的表格控件。软件工程师通过调用滴答表格的接口,快速实现自定义模板(单据)及报表,将用户个性的要求转变成由最终用户自行设计,并创建出适合自己的模板,而不再需要通过软件工程师的编程实现。最终提高软件的通用性和开发周期。 2.功能强大 简单易用 滴答表格目前拥有600多个直接编程接口,几十个子对象,集成了表格控件的编辑展现、公式运算功能,同时又拥有报表组件的数据源绑定、外部数据的导入导出等功能;滴答表格的接口简单易用,类似打开/保存文件,打印,预览,导入导出等功能只要一条语句即可完成; 3.提供快速报表设计器 在提供强大表格控件的同时,我们又为用户提供功能丰富的设计器;软件工程师或最终用户可以通过设计器快速完成模板的设计,而不再需要通过编程实现模板的样式;同时我们还向正式用户提供设计器源的源码,用户可以根据自己的需要修改设计器,并无限制分发,与我们共享设计器的版权! 4.提供个性定制功能服务 我们采用从Windows底层绘图的技术,从无到有绘制出表格,而不基于任何其它第三方或开发工具自带的控件,在扩展性上更加灵活和强大;在一些特定行业,如果最终用户要求实现某种特定的功能,也可以与我们协商,共同完成用户的个性功能,从而保证软件业务的顺利进行! 5.支持Windows平台下任何开发工具 滴答表格控件基于WINDOWS的ActiveX技术,可以运行在WINDOWS下的任何开发工具,比如.NET,VB,DELPHI,PB,易语言等,但不支持WEB应用;另一方面,用户不需要担心因更换开发工具,而不能正常使用控件的情况! 6.支持绑定数据库及外部数据源 我们建立了自身的数据挖掘引擎,通过识别用户的报表模板,从数据库中挖掘出相应的数据,并按模板中预定格式展现在控件上,而这一切无需通过编程实现;除了控件本身的数据挖掘引擎,我们还支持外部的ADO数据源,更加扩展用户的报表功能;目前我们的数据挖掘引擎支持Oracle、SQLServer、DB2、MySql、ACCESS等; 7.支持外部数据的导入导出 您只需要一条语句即可实现与其它应用程序的数据交互,包括PDF、EXCEL、CSV、图片,同时您还可以精确导入EXCEL文件,支持单个和批量文件转换; 8.一流的技术支持服务 为了帮助新用户快速入门和老用户开发过程中的问题,我们提供优质技术支持服务,用户可以通过电话、电子邮件、技术论坛、QQ或上门培训等方式进行支持;同时我们还向用户提供开发咨询,共享编程心得,让您得到的不仅是一款优质的产品,更是一份家的温暖! 9.持续地产品升级服务 为了不断满足各种用户群的需求,我们归纳问题、总结需求,为用户提供持续不断的产品升级服务,让您的产品更加充满生命力! 10.丰富的研发资料和产品示例 成为滴答表格专业版的用户,您就将成为市场的领先者。您将对掌握这一领先科技充满自信,这其中包括我们和数千名用户超过三年的经验积累,而这些,您都可以通过在线的论坛、技术文档、产品示例、QQ以及邮件等方式轻松获得。 11.无限分发 购买一次滴答表格专业版,您就可以进行无限次产品开发,无限次最终产品分发和应用,而这一切不再需要额外的成本支出。同时您还将享受一年内任何版本的免费升级,而不局限于某个单一版本的使用!
滴答表格控件企业版功能介绍 滴答表格企业版 是一款面向软件设计人员的表格控件, 拥有 600 多个编程接口, 功能丰富、简单易用,集成了表格产品编辑输入、公式运算、数据显示/展现的特点,同时又兼顾了报表产品的数据源绑定,数据统计和打印输出的功能,是管理软件模板开发必不可少的组件产品。 1、模板开发的编程理念 2、功能强大 简单易用 3、提供快速报表设计器 4、提供个性定制功能服务 5、支持Windows平台下任何开发工具 6、支持绑定数据库及外部数据源 7、支持外部数据的导入导出 8、一流的技术支持服务 9、持续地产品升级服务 10、丰富的研发资料和产品示例 11、无限分发 模板开发的编程理念 当今企业的业务需求复杂多变,对软件的通用性要求越来越高,造成开发周期过长,给软件项目带来不可预知的风险,同时大大降低 了软件企业的利润空间,而滴答表格企业版正是为解决这些问题而推出的一款基于模板开发的表格控件。软件工程师通过调用滴答 表格的接口,快速实现自定义模板(单据)及报表,将用户个性的要求转变成由最终用户自行设计,并创建出适合自己的模板,而 不再需要通过软件工程师的编程实现。最终提高软件的通用性和开发周期。 功能强大 简单易用 答表格目前拥有600多个直接编程接口,几十个子对象,集成了表格控件的编辑展现、公式运算功能,同时又拥有报表组件的数据源绑 定、外部数据的导入导出等功能;滴答表格的接口简单易用,类似打开/保存文件,打印,预览,导入导出等功能只要一条语句即可完 成; 提供快速报表设计器 在提供强大表格控件的同时,我们又为用户提供功能丰富的设计器;软件工程师或最终用户可以通过设计器快速完成模板的设计,而 不再需要通过编程实现模板的样式;同时我们还向正式用户提供设计器源的源码,用户可以根据自己的需要修改设计器,并无限制分 发,与我们共享设计器的版权! 提供个性定制功能服务 我们采用从Windows底层绘图的技术,从无到有绘制出表格,而不基于任何其它第三方或开发工具自带的控件,在扩展性上更加灵活和 强大;在一些特定行业,如果最终用户要求实现某种特定的功能,也可以与我们协商,共同完成用户的个性功能,从而保证软件业 务的顺利进行! 支持Windows平台下任何开发工具 滴答表格控件基于WINDOWS的ActiveX技术,可以运行在WINDOWS下的任何开发工具,比如.NET,VB,DELPHI,PB,易语言等,同时也可 以运行在WEB上,用户通过VBS或JS进行操作产品;另一方面,用户不需要担心因更换开发工具,而不能正常使用控件的情况! 支持绑定数据库及外部数据源 我们建立了自身的数据挖掘引擎,通过识别用户的报表模板,从数据库中挖掘出相应的数据,并按模板中预定格式展现在控件上,而 这一切无需通过编程实现;除了控件本身的数据挖掘引擎,我们还支持外部的ADO数据源,更加扩展用户的报表功能;目前我们的数据 挖掘引擎支持Oracle、SQLServer、DB2、MySql、ACCESS等; 支持外部数据的导入导出 您只需要一条语句即可实现与其它应用程序的数据交互,包括PDF、EXCEL、CSV、图片,同时您还可以精确导入EXCEL文件,支持单个和 批量文件转换; 一流的技术支持服务 为了帮助新用户快速入门和老用户开发过程中的问题,我们提供优质技术支持服务,用户可以通过电话、电子邮件、技术论坛、QQ或 上门培训等方式进行支持;同时我们还向用户提供开发咨询,共享编程心得,让您得到的不仅是一款优质的产品,更是一份家的温暖! 持续地产品升级服务 为了不断满足各种用户群的需求,我们归纳问题、总结需求,为用户提供持续不断的产品升级服务,让您的产品更加充满生命力! 丰富的研发资料和产品示例 成为滴答表格企业版的用户,您就将成为市场的领先者。您将对掌握这一领先科技充满自信,这其中包括我们和数千名用户超过三年 的经验积累,而这些,您都可以通过在线的论坛、技术文档、产品示例、QQ以及邮件等方式轻松获得。

2,727

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧