收藏 分享(赏)

VFP绘图功能.doc

上传人:hwpkd79526 文档编号:6627636 上传时间:2019-04-18 格式:DOC 页数:36 大小:160KB
下载 相关 举报
VFP绘图功能.doc_第1页
第1页 / 共36页
VFP绘图功能.doc_第2页
第2页 / 共36页
VFP绘图功能.doc_第3页
第3页 / 共36页
VFP绘图功能.doc_第4页
第4页 / 共36页
VFP绘图功能.doc_第5页
第5页 / 共36页
点击查看更多>>
资源描述

1、用为可视类增添绘图功能 http:/ Foxpro 中提供了基于 _Screen 和表单窗口的绘图方法,如用 Pset、Line 画点、线等。然而感到其方法较有限,如有时需绘制圆弧、扇形或想对多边形填充,却发现 Visual Foxpro 可视类未提供相应的方法。现笔者找到两种解决方法:解决方法之一,可用控件自身的 Pset 及 Point 方法根据图形学基本算法设计子程序,该方法速度慢得让人无法忍受且效果不好。解决方法二,调用 Windows API 函数。Windows 执行过程中常常通过动态连接库(DLLs)支持其所需的许多功能。这些动态函数库加载在内存中根据需要与用户程序进行连接。AP

2、I 库中有丰富的图形操作函数。调用 API函数有许多优点:功能全、速度快、程序代码小。有关访问 API 函数的文章已不少,这里不再重复。然而使用 API 函数在窗口或设备中绘图时,必须得到该窗口或设备的句柄 HDC。在 Visual Foxpro 参考函数中却找不到获得HDC 的方法,虽然可用 API 中的 GetDc 函数获得某窗口的 HDC。但该函数又需用到窗口句柄作参数。如何获得窗口句柄呢?API 函数(如:GetActiveWindow, GetWindow 等)直接返回的是整个应用程序窗口句柄,而用户窗口一般是 VFP 应用程序中的一个文档窗。 其实在 VFP 中返回用户窗口一个很方

3、便的方法是通过 FOXTOOLS.FLL 库中 WOnTop 和WhToHwnd 函数。上述函数语法如下: WHANDLE WonTop() 返回用户使用的活动窗口 WHandleHWND WhToHwnd(WHandle) 返回相应的窗口句柄 hWnd。HDC GetDC(hWnd) 返回指定窗口 hWnd 的设备句柄 hDC有了设备句柄调用绘图函数则很容易,例如:画矩形的 API 函数语法如下:BOOL Rectangle(hDC,x1,y1,x2,y2)其中 x1,y1,x2,y2 为矩形对角线的 x,y 坐标使用这些 API 函数绘图需注意几点:1.API 函数使用前需用 declar

4、e 声明,另外应注意函数名称大小写(具体用法见文后程序)。2.调用以上函数时,WHandle 、hWnd、hDc 、x1、 y1、x2 、y2 参数及 BOOL 均可用Integer 类型进行说明,以上函数返回值若为 0,表示调用失败。3.Visual FoxPro 设置前景色、填充色等属性设置不影响 API 函数中绘图方式。4.使用 Visual FoxPro 原类方法的绘图方法时,会清除 API 画的图形。因此,两者最好不要混合使用。5API 函数参数中若有复合数据结构或数组,则应将该数据结构转换成 String 型。如下例语句可在 VFP 中调用 Polygon 函数绘制多边形。decl

5、are integer Polygon in wi api integer, string ,integerdime point(3,2) point 为三角形顶点坐标trangle=for i=1 to 3point(i,1)=100100 rand() I 点 X 坐标为(100200)随机数point(i,2)=100100 rand() I 点 Y 坐标为(100200)随机数以下两条语句将多边形顶点的数值转化为字符,并连入字符串trangle=tranglechr(point(i,1) chr(0)chr(0) chr(0)trangle=tranglechr(point(i,2)

6、chr(0)chr(0) chr(0)endforpolygon(thisform.hdc,trangle,3)VPF 中打开一个表单,在表单中新建属性并新建 API 函数编制的绘图方法,最后将其保存为新类库。这样一个集绘图与原表单各种功能的可视类就建好了。以下是 Visual Foxpro 中用 API 函数动态设计饼形图的简单实例。图为执行程序后屏幕输出。三个文本框中任一数据改变后,饼形图将立即重绘。程序:为 Form 对象增加新属性 hDc 和新方法 Pie。Form1 的 Load 事件:declare integer GetDC in win32api integerdeclare

7、integer Pie in win32api integer,integer,integer,integer,;integer,integer,integer,integer,integerdeclare integer CreateSolidBrush in win32api longdeclare integer SelectObject in win32api integer,integerdeclare integer CreatePen in win32api integer,integer,longset library to sys(2004)foxtools.fllForm1

8、 的 Activate 事件whandle=_WOnTop()hwnd=_WhToHwnd(whandle)set library tothisform.hDC=GetDC(hwnd)Form1 的 Pie 方法lparameters x1,y1,x2,y2,x3,y3,x4,y4hbrush=CreateSolidBrush(thisform.fillcolor)hpen=Createpen(thisform.drawstyle,thisform.drawwidth,thisform.forecolor)=selectobject(thisform.hdc,hbrush)=selectobj

9、ect(thisform.hdc,hpen)=pie(thisform.hdc,x1,y1,x2,y2,x3,y3,x4,y4)Form1 的 Unload 事件clear dlls将本表单保存为新的可视类 FORMDRAW。创建一个 Form(FORMDRAW 为其可视类)、添加四个 Label、三个 Text(Value 属性分别赋三个数值)和三个 Shape 对象,属性设置略(使其外观如图) ,为 FORM 增加方法Drawchar。表单的 Drawchart 方法:x1=thisform.text1.valuex2=thisform.text2.valuex3=thisform.tex

10、t3.valuetotal=x1x2 x3a1=2pi()x1/totala2=2pi()x2/totalx1=250y1=50x2=350y2=150mx=(x1x2)/21my=(y1y2)/21thisform.fillcolor=255=thisform.pie(x1,y1,x2,y2,mx10,my,mx 10cos(a1),my10 sin(a1)thisform.fillcolor=rgb(0,255,0)=thisform.pie(x1,y1,x2,y2,mx10cos(a1),my10sin(a1),mx10 cos(a1 a2),my;10sin(a1a2)thisform

11、.fillcolor=rgb(0,0,255)=thisform.pie(x1,y1,x2,y2,mx10cos(a1a2),my 10 sin(a1a2),mx10,my)Text1 、Text2、Text3 的 Valid 事件:Thisform.drawchart表单的 Paint 事件Thisform.drawchart用 API 函数绘图与 Visual FoxPro 自身方法相比,使用更灵活、绘图性能强且速度快。关于 Windows API 函数功能及用法请查阅有关资料。本文所述方法亦可在能与 API 函数通讯的其它软件中使用。如何在 vfp 中画曲线图 2013-05-17 16

12、:07 匿名 | 分类:语言学 | 浏览 31 次分享到: 2013-05-17 18:37 网友采纳 热心网友说得好容易,但做起来却比较难,我做了半个小时也没做得什么出来。但我再多做五分钟却做出来了。记得加 QQ:154727226 先:加入三个 TEXT 控件,再加一个时间控件。致于隔一分钟,自己好好想一下,有很多方法可以做到。 Dim S1, S2, S3, S4 As Long Dim A1, A2, A3, A4 As Long Dim C1, C2, C3, C4 As Long Private Sub Form_Load() Me.AutoRedraw = True Timer1

13、.Interval = 1500 S4 = Form1.Height - 600 S2 = Form1.Height - 600 A4 = Form1.Height - 600 A2 = Form1.Height - 600 C4 = Form1.Height - 600 C2 = Form1.Height - 600 End Sub Private Sub Timer1_Timer() S3 = S3 + 100 S4 = 3000 - Text1.Text Me.ForeColor = integer,integer,integer,integer,integerdeclare integ

14、er CreateSolidBrush in win32api longdeclare integer SelectObject in win32api integer,integerdeclare integer CreatePen in win32api integer,integer,longset library to sys(2004)foxtools.fllForm1 的 Activate 事件whandle=_WOnTop()hwnd=_WhToHwnd(whandle)set library tothisform.hDC=GetDC(hwnd)Form1 的 Pie 方法lpa

15、rameters x1,y1,x2,y2,x3,y3,x4,y4hbrush=CreateSolidBrush(thisform.fillcolor)hpen=Createpen(thisform.drawstyle,thisform.drawwidth,thisform.forecolor)=selectobject(thisform.hdc,hbrush)=selectobject(thisform.hdc,hpen)=pie(thisform.hdc,x1,y1,x2,y2,x3,y3,x4,y4)Form1 的 Unload 事件clear dlls将本表单保存为新的可视类 FORMD

16、RAW。创建一个 Form(FORMDRAW 为其可视类)、添加四个 Label、三个Text(Value 属性分别赋三个数值)和三个 Shape 对象,属性设置略(使其外观如06020401a),为 FORM 增加方法 Drawchar。表单的 Drawchart 方法:x1=thisform.text1.valuex2=thisform.text2.valuex3=thisform.text3.valuetotal=x1x2x3a1=2pi()x1/totala2=2pi()x2/totalx1=250y1=50x2=350y2=150mx=(x1x2)/21my=(y1y2)/21thi

17、sform.fillcolor=255=thisform.pie(x1,y1,x2,y2,mx10,my,mx10cos(a1),my10sin(a1)thisform.fillcolor=rgb(0,255,0)=thisform.pie(x1,y1,x2,y2,mx10cos(a1),my10sin(a1),mx10cos(a1a2),my;10sin(a1a2)thisform.fillcolor=rgb(0,0,255)=thisform.pie(x1,y1,x2,y2,mx10cos(a1a2),my10sin(a1a2),mx10,my)Text1、Text2、Text3 的 Va

18、lid 事件:Thisform.drawchart表单的 Paint 事件Thisform.drawchart用 API 函数绘图与 Visual FoxPro 自身方法相比,使用更灵活、绘图性能强且速度快。关于 Windows API 函数功能及用法请查阅有关资料。本文所述方法亦可在能与 API 函数通讯的其它软件中使用。VF 绘制形状(三角形、多边形)(2009-08-01 17:02:27) 转载 标签: thisvfnamergbwith杂谈分类: vf 学习 Public goFormgoForm = Createobject(“MiForm“)goForm.Show(1)Retur

19、nDefine Class MiForm As FormDoCreate = .T.AutoCenter = .T.Caption = “绘制多边形 in VFP 9.0 ZT“Name = “MiForm“*- 三角形Add Object shpTriangulo As Shape With ;TOP = 36, ;LEFT = 24, ;HEIGHT = 144, ;WIDTH = 144, ;BACKCOLOR = Rgb(255,0,0), ;POLYPOINTS = “This.aTri“, ;NAME = “shpTriangulo“*- 八角形Add Object shpOcto

20、gono As Shape With ;TOP = 36, ;LEFT = 204, ;HEIGHT = 144, ;WIDTH = 144, ;BACKCOLOR = Rgb(0,0,255), ;POLYPOINTS = “This.aOct“, ;NAME = “shpOctogono“Procedure shpTriangulo.InitThis.AddProperty(“aTri3,2“)This.aTri1,1= 50This.aTri1,2= 0This.aTri2,1= 100This.aTri2,2= 100This.aTri3,1= 0This.aTri3,2= 100En

21、dprocProcedure shpOctogono.InitThis.AddProperty(“aOct8,2“)This.aOct1,1= 33This.aOct1,2= 0This.aOct2,1= 67This.aOct2,2= 0This.aOct3,1= 100This.aOct3,2= 33This.aOct4,1= 100This.aOct4,2= 67This.aOct5,1= 67This.aOct5,2= 100This.aOct6,1= 33This.aOct6,2= 100This.aOct7,1= 0This.aOct7,2= 67This.aOct8,1= 0Th

22、is.aOct8,2= 33EndprocEnddefineVFP 问题 用户可以给表单添加自定义属性和方法程序打开表单,选择菜单“表单”“编辑属性/方法“,新建属性“D“在运行时刻向一个对象添加一个新属性。ADDPROPERTY( ) 用于向有效的 Visual FoxPro 对象添加新属性和值,对象包括由 Visual FoxPro 类生成的类,COM 类,以及 SCATTER.NAME 命令生成的类。ADDPROPERTY(oObjectName, cPropertyName, , eNewValue )参数oObjectName 指定要加属性的对象的名称。如果 oObjectName

23、不是一个有效的对象,Visual FoxPro 将产生适当的提示信息。 cPropertyName 指定要添加到对象中的新属性的名称。如果指定的属性名不存,该属性将被创建并添加。 eNewValue 指定新属性的设置值。当省略 eNewValue 时,如果该属性已经存在,Visual FoxPro 保持该属性值不变;如果该属性是新添加的,Visual FoxPro 将该属性值设为“假”(.F.) 。 返回值逻辑型数据类型。下表中列出了 ADDPROPERTY( )的返回值,及添加一个已经存在的属性到对象时的表现。返回值 说明 真 (.T.)当 ADDPROPERTY( ) 成功添加属性时。当新

24、属性是一个数组属性,并且该数组已经存在,ADDPROPERTY( ) 根据cPropertyName 中指定的情况重新调整数组的大小。如果用 eNewValue 指定了属性值,数组中所有元素都将设为该值。如果省略 eNewValue,所有的数组元素都将被设为假(.F.)。如果新属性不是一个数组属性,但已经存在的属性是一个数组属性,该属性将保持同样大小的数组属性。如果用 eNewValue 指定了新值,数组中全部元素将被设为该值。如果省略 eNewValue,所有数组元素将被设为假(.F.)。如果新属性不是一个数组属性,并且已存在的属性是不是数组属性或者不是一个只读的 Visual FoxPro

25、 自带属性,如果 eNewValue 中指定了新值,已存在的属性将被设为该值。如果省略 eNewValue,已存在的属性值将保持不变。如果指定的属性是一个已经存在,被标为 Hidden (隐藏)或 Protected(受保护)的对象成员, Visual FoxPro 产生一个错误,“name 属性没有找到(Error 1734)“并且该属性不能被 ADDPROPERTY( )设置。假 (.F.)当 ADDPROPERTY( ) 未能成功添加属性时。当新属性是数组属性,已存在的属性不是数组属性,已存在的属性将保持不变。说明用 ADDPROPERTY( ) 可以为对象创建属性数组。如果提供了 eN

26、ewValue,每个数组元素初始化为该值。否则,数组中每个属性的值都被设为假(.F.)。更多的关于为对象创建属性数组的信息,请参见示例。Visual FoxPro 新添加的属性将做为 Public(公共) 属性。该属性可以被指定为 Protected 或 Hidden。如果已存在的属性是只读的 Visual FoxPro 自带属性,比如 BaseClass 属性,Visual FoxPro 将产生一个错误,“属性名是只读的(Error 1743)“。如果属性名不是效的,例如,属性名中包含空格或其它非法字符,Visual FoxPro 将产生一个错误, “不正确的属性名(Error 1470)“

27、 。对于由 Visual FoxProFor 类继承而来的对象的实例, ADDPROPERTY( ) 将保持 AddProperty 方法中的可视化设置。如果 AddProperty 被标为 Hidden 或 Protected, ADDPROPERTY( ) 不创建新属性并返回假(.F.) 。如果 AddProperty 方法被标为 Public (默认),ADDPROPERTY( ) 创建数组并返回真(.T.) 。这保护了原始的类设计。注意: 这个不能应用到由 Visual FoxPro OLEPUBLIC 类创建的 COM 对象。 对于 FOR EACH 命令中的对象引用,不能使用 AD

28、DPROPERTY( )函数,但可以用 AddProperty 方法程序来实现该功能。示例示例 1下面的示例向 SCATTER 命令创建的对象添加一个新的属性。USE customersSCATTER NAME oCustADDPROPERTY(oCust,“MyProperty“)示例 2下面的示例向 oMyForm 对象添加了一个属性数组,并且显示它的内容, 1 和 “Two“。oMyForm = CREATEOBJECT(Form)ADDPROPERTY(oMyForm, MyArray(2), 1)oMyForm.MyArray(2) = “Two“CLEAR? oMyForm.MyA

29、rray(1) ? oMyForm.MyArray(2)VFP 关于表单(一)http:/ 表单问题(一)1.让 VFP 表单卸载时显示确认对话框我们有时希望表单在被关闭前能显示确认信息,给用户留有选择的余地。这在 Windows 程序中非常普遍,作用也是显而易见的。在 VFP 中要实现此功能,方法也很简单。首先,让我们来看一个 VFP 表单的卸载步骤:表单在卸载前,首先要询问表单的 QueryUnload 事件,然后再卸载表单。也就是说,QueryUnload 事件是表单卸载时第一个被触发的事件。在 QueryUnload 事件过程中执行 NODEFAULT命令可以阻止表单卸载。这样我们通过

30、在 QueryUnload 事件中巧妙包含NODEFAULT,就能避免直接卸载表单。QueryUnload 是怎样被触发的呢?当在代码中执行 CLEAR WINDOWS,RELEASE WINDOWS 或 QUIT 等命令时、或者当用户双击控制菜单框时、或者当用户从表单的控制菜单中选择执行“关闭”命令时,都会触发表单的 QueryUnload 事件。先在表单的 QueryUnload 事件中包含下面代码:*- 显示包含“是”、“否”两个按钮的对话框If MessageBox(“确定要退出吗?“,4+48+256,“提示“)=6ThisForm.Release &如果选取了“是”,则退出Else

31、 &选取了“否”NODEFAULT & 不退出EndIf这样当有卸载表单的事件发生时,都会显示确认要退出的对话框:只有选取“是”,才能卸载表单。这样做是非常有用的,例如我们为了避免正在操作的数据没有保存就退出,可以在程序中使用这段代码,至于如何保存数据,不同的程序采取的方法不尽相同,这里我们不做详细讨论。需要说明的是,当在代码中直接执行 RELEASE 命令或直接调用表单的 Release 方法时,不会触发 QueryUnload 事件。因此,我们应尽量避免在代码中直接执行 RELEASE 命令或调用表单的 Release 方法。取代的方法是,当要卸载表单时,转向调用表单的 QueryUnlo

32、ad 方法。例如,我们要在表单中放置一个标题为“退出”的命令按钮,用来退出这个表单,并希望 在退出时能显示确认对话框,可以在这个 “退出 ”命令按钮的Click 事件代码中包含下面的命令: ThisForm.QueryUnload &执行表单的QueryUnload 事件,询问用户是否真的要退出。2.做两个表单,在表单 1 的 text1 和 text2 输入数字,按按钮后把加得的结果输入表单 2 的 text1 中。在表单 1 的 command1 的 click 事件中写入:with thisforma=.text1.value+.text2.valuedo form 表单 2 with

33、aendwith在表单 2 的 INIT 里写入:LPARAMETERS clsjthisform.text1.value=clsj3. 创建表单集时, 没有明确的办法添加已存在的表单到表单集.本文向你展示如何添加已存在的表单到表单集.假设要添加表单 MyForm 到表单集, 按以下步骤:1 打开 MyForm.2 在文件菜单中, 单击另存为类, 并单击保存表单.3 为新类取一个类名和要保存的类库文件名(.VCX 文件).4 关闭 MyForm.5 进入表单设计器,打开你的表单集,单击表单设计工具条中的“查看类“,然后单击添加.6 选择你保存 MyForm 类的类库文件 .VCX, 并单击打开

34、.7 选择工具条中的 MyForm ,并将该表单类拖放到表单集中.这样就把 MyForm 类的一个实例添加到了表单集中.4.想做一个全屏大小的表单,该用什么方法?答:在 form 的 init 时间中加入:thisform.xxx(某控件).setfocus WindowMode=2 这两句。5 怎样从表单返加一个值?可以在模式表单的 unload 事件中用 return 来返回一个值。6. 怎样在表单设计器中把属性或方法添加到表单中?用表单设计器窗口或属性/事件/激活的方法窗口,从菜单中选择表单。最初的两个选择是新属性和新方法。选择你想要加入的一个并填写属性或方法的名称,新建的属性将出现在属

35、性窗口的最底部。7. 模式表单和非模式表单的区别是什么?答案 5: 模式表单一般地被用来处理错误报告,或者请求用户确认操作等。在模式表单中,菜单不能使用。如果需要,模式表单也提供应用等待状态。非模式表单提供更多的灵活性,它允许用户通过菜单操作,在表单中移动。8.表单 A 调用表单 B:在表单 A 中需要之处写上:Do Form frmA With para1,para2 To retu在表单 B 的 Init 事件的第一行写上:lParamters txPara2,txPara2在表单 B 的 Unload 事件的最后一行写上:Return lxRetu其中,para1,para2 为你要从表

36、单 A 中传递过去的实际参数;retu 为你想从表单B 中得回的数据。txPara2,txPara2 为你在表单 B 中接收的形式参数。就这么简单。9.为何我设置好 Form 的 ToolTipText 属性后,这些提示总是无法显示出来呢?这是因为你没有将 Form 的 ShowTips 属性没设置为.T.,因为其默认属性是.F.。10.我在 pageframe 中的一个页中改变了记录指针,但我转到其他的页时,其他的页中的数据仍然是原记录的值。为什么?需要在你的每一页 Activate()中放置代码来确信显示当前记录值。如果你在某处执行了 THISFORM.Refresh()命令,VFP 仅刷

37、新 PageFrame 的当前页面上的内容。试着在每个页(Page)的 Activate()中调用 THIS.Refresh()。11.深入 VFP 类设计数据输入表单数据输入始终是 MIS 系统的重要问题,许多 MIS 系统的数据录入没有充分考虑到重复数据或记录有相当多的共同字段值的输入问题。历经 2 年之后,终于从VFP 的类出发,较好的解决了这一问题,并且在实验室管理系统Labman2001中得以成功采用。类是面向对象程序设计方法中极为重要的部分,也是其精髓所在。如果在可视化编程时代不利用面向对象的编程方法,不采用类来进行系统整体规划,事实上是根本没有发挥先进编程工具的优势。利用类的继承

38、性,可以很方便的修改建立在其上的程序,使之全部更新而无需逐一修改代码,如果需要特殊处理,可以在类基础上重新定义事件处理程序。这样节省了大量的开发时间,并且减少了出错的机会。我们以实例来说明。先设计如图 1 表单。表单包括 10 个按钮和一个核选框。按钮分为两组,一组是浏览记录的,包括“到首”“前翻”“后翻”“到尾”,另一组包括“增加”“清除”“修改”“删除”“恢复”“退出”,分别实现的相应的功能。核选框则用来控制实现哪组功能。当核选框没有选中时,只有“增加”“清除”“退出”可用,选中核选框,则“到首”“前翻”“后翻”“到尾”“修改”“删除”“恢复”可用。当“增加”可用时,在相关文字框中输入字段

39、值,单击“增加”,一条记录加入表中,再次单击时,提示“已存在该关键字记录,请修改!”,如果下一条记录只有编号不同,修改编号即可,如果还有其他不同,也修改,然后单击“增加”,再次增加一条新记录。如果不想利用前面的记录,单击“清除”,所有字段值清空,重新输入即可。如果想修改记录,可以先浏览到相应的记录,先在文字框中修改完毕,然后按“修改”即可。下面依次介绍按钮的事件代码,其中夹杂着注释:“到首 ”的 click 事件代码if reccount()=0wait nowait windows(“表中记录数为 0!“)returnendif*当表是空的时候,浏览功能无法使用,并提醒增加记录入表。this

40、form.cmdtop.enabled=.f.thisform.cmdprev.enabled=.f.thisform.cmdbottom.enabled=.t.thisform.cmdnext.enabled=.t.*当单击“到首”后,设置“到首”“前翻”失效。go top*下面的小段程序在浏览的四个按钮中均有,为节省篇幅计,以后的均省略。标记为 prog01。dimension m.memc1 *定义数组,容纳一条记录,定义一个元素即可,如果容纳不下,系统会自动增加。scatter to m.memc memo *把内存中记录存放在数组中。m.nlen=alen(m.memc) *获取一条

41、记录有多少个字段,存放在 m.nlen 中。*建立循环,将字段逐一放置在表单的相应文字框中。for m.i=1 to m.nlenm.nameinput=“thisform.“+field(i)+1+“.value“ *获取相关字段的文字框名字&nameinput = m.memcm.i *将字段放置相应文字框中endforthisform.refresh *刷新表单。return“前翻 ”的 click 事件代码if reccount()=0wait nowait windows(“表中记录数为 0!“)returnendifthisform.cmdbottom.enabled=.t.thi

42、sform.cmdnext.enabled=.t.if recno()=1thisform.cmdtop.enabled=.f.thisform.cmdprev.enabled=.f.elseif bof()=.t. *单击“前翻”后,如果已经到表开始,设置“到首”“前翻”失效。thisform.cmdtop.enabled=.f.thisform.cmdprev.enabled=.f.elseskip -1endifendif*下同 prog01“后翻 ”的 click 事件代码if reccount()=0wait nowait windows(“表中记录数为 0!“)returnendi

43、fthisform.cmdtop.enabled=.t.thisform.cmdprev.enabled=.t.if eof( )=.t. and bof()=.f.thisform.cmdbottom.enabled=.f.thisform.cmdnext.enabled=.f.skip -1elseif reccount()=recno()thisform.cmdbottom.enabled=.f.thisform.cmdnext.enabled=.f.elseif bof()=.t.elseskip 1endifendifendif*下同 prog01“到尾 ”的 click 事件代码i

44、f reccount()=0wait nowait windows(“表中记录数为 0!“)returnendifthisform.cmdbottom.enabled=.f.thisform.cmdnext.enabled=.f.thisform.cmdtop.enabled=.t.thisform.cmdprev.enabled=.t.go bottom*下同 prog01“增加 ”的 click 事件代码dimension m.memc(FCOUNT() *读取打开表的字段数,确定数组元素数m.nlen=FCOUNT()for m.i=1 to m.nlen *建立循环,将字段值写入数组m

45、.nameinput=“thisform.“+field(i)+1+“.value“m.memcm.i = &nameinput *宏替换,字段值写入数组相应位置if m.memcm.i=NULLwait nowait windows(“无效数据“)returnendifendforgo topm.cfiledname=field(1) *默认第一字段是主关键字。locate for &cfiledname=m.memc1if found( )=.t.if messagebox(“已存在该关键字记录,请修改!“,48,“增加“)=1returnendifelsefor m.i=1 to m.n

46、lenm.nameinput=“thisform.“+field(i)+1+“.value“m.memcm.i = &nameinputendforthisform.refreshgo bottomappend blankgather memory from memcreturnendif“清除 ”的 click 事件代码dimension m.memc(FCOUNT()m.nlen=FCOUNT()m.cchushi=“thisform.“+field(1)+1+“.setfocus“&cchushiscatter to m.memc memofor m.i=1 to m.nlenm.nam

47、einput=“thisform.“+field(i)+1+“.value“do casecase type(“m.memcm.i“)=Cm.memcm.i=“case type(“m.memcm.i“)=Dm.memcm.i=date()case type(“m.memcm.i“)=Nm.memcm.i=0case type(“m.memcm.i“)=Tm.memcm.i=time()case type(“m.memcm.i“)=Lm.memcm.i=.T.otherwisem.memcm.i =“endcase&nameinput = m.memcm.iendforthisform.ref

48、reshreturn“修改 ”的 click 事件代码dimension m.memc1scatter to m.memc memom.nlen=alen(m.memc)for m.i=1 to m.nlenm.nameinput=“thisform.“+field(i)+1+“.value“m.memcm.i = &nameinputendforthisform.refreshgather memory from memcreturn“删除”的 click 事件代码deletethisform.cmdclear.clickreturn“恢复 ”的 click 事件代码recallreturn“退出 ”的 click 事件代码thisform.release()核选框的 click 事件代码if reccount()=0thisform.cmdqueding.enabled=.t.thisform.cmdclear.enabled=.t.thisform.cmdtop.enabled=.f.thisform.cmdprev.enabled=.f.

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报