已阅读5页,还剩31页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
用为可视类增添绘图功能 /139/36139.shtml分享到:我要吐槽Visual Foxpro中提供了基于 _Screen和表单窗口的绘图方法,如用Pset、Line画点、线等。然而感到其方法较有限,如有时需绘制圆弧、扇形或想对多边形填充,却发现Visual Foxpro可视类未提供相应的方法。现笔者找到两种解决方法:解决方法之一,可用控件自身的Pset及Point方法根据图形学基本算法设计子程序,该方法速度慢得让人无法忍受且效果不好。解决方法二,调用Windows API函数。Windows执行过程中常常通过动态连接库(DLLs)支持其所需的许多功能。这些动态函数库加载在内存中根据需要与用户程序进行连接。API 库中有丰富的图形操作函数。调用API函数有许多优点:功能全、速度快、程序代码小。有关访问API函数的文章已不少,这里不再重复。然而使用API函数在窗口或设备中绘图时,必须得到该窗口或设备的句柄HDC。在Visual Foxpro参考函数中却找不到获得HDC的方法,虽然可用API中的GetDc函数获得某窗口的HDC。但该函数又需用到窗口句柄作参数。如何获得窗口句柄呢?API函数(如:GetActiveWindow, GetWindow等)直接返回的是整个应用程序窗口句柄,而用户窗口一般是VFP应用程序中的一个文档窗。 其实在VFP中返回用户窗口一个很方便的方法是通过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函数使用前需用declare声明,另外应注意函数名称大小写(具体用法见文后程序)。2.调用以上函数时,WHandle、hWnd、hDc、x1、y1、x2、y2参数及BOOL均可用Integer类型进行说明,以上函数返回值若为0,表示调用失败。3.Visual FoxPro设置前景色、填充色等属性设置不影响API函数中绘图方式。4.使用Visual FoxPro原类方法的绘图方法时,会清除API画的图形。因此,两者最好不要混合使用。5API函数参数中若有复合数据结构或数组,则应将该数据结构转换成String型。如下例语句可在VFP中调用Polygon函数绘制多边形。declare integer Polygon in wi api integer, string ,integerdime point(3,2) point为三角形顶点坐标trangle=for i=1 to 3point(i,1)=100100rand() I点X坐标为(100200)随机数point(i,2)=100100rand() I点Y坐标为(100200)随机数以下两条语句将多边形顶点的数值转化为字符,并连入字符串trangle=tranglechr(point(i,1)chr(0)chr(0)chr(0)trangle=tranglechr(point(i,2)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 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的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)=selectobject(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.text3.valuetotal=x1x2x3a1=2pi()x1/totala2=2pi()x2/totalx1=250y1=50x2=350y2=150mx=(x1x2)/21my=(y1y2)/21thisform.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的Valid事件:Thisform.drawchart表单的Paint事件Thisform.drawchart用API函数绘图与Visual FoxPro自身方法相比,使用更灵活、绘图性能强且速度快。关于Windows API 函数功能及用法请查阅有关资料。本文所述方法亦可在能与API函数通讯的其它软件中使用。如何在vfp中画曲线图 2013-05-17 16: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.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 = &HFF& Me.Line (OX1, OY1)-(OX2, OY2), Me.BackColor Me.Line (S1, S2)-(S3, S4) S1 = S1 + 100 S2 = S4 A3 = A3 + 100 A4 = 3000 - Text2.Text Me.ForeColor = &H0& Me.Line (O1X1, O1Y1)-(O1X2, O1Y2), Me.BackColor Me.Line (A1, A2)-(A3, A4) A1 = A1 + 100 A2 = A4 C3 = C3 + 100 C4 = 3000 - Text3.Text Me.ForeColor = &HFF00& Me.Line (O1X1, O1Y1)-(O1X2, O1Y2), Me.BackColor Me.Line (C1, C2)-(C3, C4) C1 = C1 + 100 C2 = C4 End Sub/thread-301940-1-1.html给你一段花坐标的代码,其他的数据代码也和这个差不多的。LPARAMETERS x0, y0, xl, yl, nx, ny, getnum, gntypeLOCAL aa,ccTHISFORM.DRAWWIDTH = 1THISFORM.LINE( x0, y0, x0 + xl + 20 , y0)THISFORM.LINE( x0 + xl + 15, y0 + 4, x0 + xl + 20, y0)THISFORM.LINE( x0 + xl + 15 ,y0 - 4, x0 + xl + 20, y0)THISFORM.LINE( x0, y0, x0, y0 - yl - 20)THISFORM.LINE( x0 - 4,y0 - yl - 15, x0, y0 - yl - 20)THISFORM.LINE( x0 + 4,y0 - yl - 15, x0, y0 - yl - 20)FOR i = 1 TO nx THISFORM.LINE( x0 + xl / nx * i , y0 - 4, x0 + xl / nx * i, y0)ENDFORaa = WROWS()cc = WCOLS()FOR i = 1 TO ny THISFORM.LINE( x0, y0 - yl / ny * i, x0 + 4 ,y0 - yl / ny * i) IF i = ny (y0 - yl / ny * i) / THISFORM.HEIGHT * aa - 0.5 , THIS.getx0 / THISFORM.WIDTH * cc -5 SAY ALLTRIM( STR( getnum) FONT 宋体,12 ENDIFENDFORDO CASECASE gntype = 1 THISFORM.DRAWWIDTH = 2 THISFORM.FILLCOLOR = RGB(255,0,0) THISFORM.FORECOLOR = RGB(255,0,0) thisform.line( THISFORM.getx0 + 20 ,THISFORM.gety0 - THISFORM.getylen,THISFORM.getx0 + 100 , THISFORM.gety0 - THISFORM.getylen) thisform.box( THISFORM.getx0 + 56 ,THISFORM.gety0 - THISFORM.getylen - 4,THISFORM.getx0 + 64 , THISFORM.gety0 - THISFORM.getylen + 4) THISFORM.FILLCOLOR = RGB(0,255,0) THISFORM.FORECOLOR = RGB(0,255,0) thisform.line( THISFORM.getx0 + 20 ,THISFORM.gety0 - THISFORM.getylen + 20,THISFORM.getx0 + 100 , THISFORM.gety0 - THISFORM.getylen + 20) thisform.box( THISFORM.getx0 + 56 ,THISFORM.gety0 - THISFORM.getylen + 16,THISFORM.getx0 + 64 , THISFORM.gety0 - THISFORM.getylen + 24) THISFORM.FILLCOLOR = RGB(0,0,255) THISFORM.FORECOLOR = RGB(0,0,255) thisform.line( THISFORM.getx0 + 20 ,THISFORM.gety0 - THISFORM.getylen + 40,THISFORM.getx0 + 100 , THISFORM.gety0 - THISFORM.getylen + 40) thisform.box( THISFORM.getx0 + 56 ,THISFORM.gety0 - THISFORM.getylen + 36,THISFORM.getx0 + 64 , THISFORM.gety0 - THISFORM.getylen + 44) THISFORM.FORECOLOR = RGB(0,0,0) (THISFORM.gety0 - THISFORM.getylen) / THISFORM.HEIGHT * aa -0.4, (THIS.getx0 + 110) / THISFORM.WIDTH * cc SAY 总离层FONT 宋体,12 (THISFORM.gety0 - THISFORM.getylen + 20) / THISFORM.HEIGHT * aa-0.4 , (THIS.getx0 + 110) / THISFORM.WIDTH * ccSAY 浅基点FONT 宋体,12 (THISFORM.gety0 - THISFORM.getylen + 40) / THISFORM.HEIGHT * aa-0.4, (THIS.getx0 + 110) / THISFORM.WIDTH * ccSAY 深基点 FONT 宋体,12CASE gntype = 2 THISFORM.FILLCOLOR = RGB(0,255,0) THISFORM.FORECOLOR = RGB(0,255,0) thisform.box( THISFORM.getx0 + 54 ,THISFORM.gety0 - THISFORM.getylen - 6,THISFORM.getx0 + 66 , THISFORM.gety0 - THISFORM.getylen + 6) THISFORM.FILLCOLOR = RGB(0,0,255) THISFORM.FORECOLOR = RGB(0,0,255) thisform.box( THISFORM.getx0 + 54 ,THISFORM.gety0 - THISFORM.getylen + 14,THISFORM.getx0 + 66 , THISFORM.gety0 - THISFORM.getylen + 26) THISFORM.FORECOLOR = RGB(0,0,0) (THISFORM.gety0 - THISFORM.getylen) / THISFORM.HEIGHT * aa -0.4, (THIS.getx0 + 80) / THISFORM.WIDTH * cc SAY 浅基点FONT 宋体,12 (THISFORM.gety0 - THISFORM.getylen + 20) / THISFORM.HEIGHT * aa-0.4 , (THIS.getx0 + 80) / THISFORM.WIDTH * ccSAY 深基点FONT 宋体,12OTHERWISE ENDCASEVFP中的字符串替换函数CHRTRAN()STRTRAN()/s/blog_51c0fdf90100gfjk.htmlCHRTRAN() 函数将一字符串中的某些字符替换为另一些字符。语法CHRTRAN(字符表达式1,字符表达式2,字符表达式3)返值类型字符型参数描述字符表达式1:字符串,其中的某些字符将被替换。字符表达式2:确定字符表达式1中的哪些字符将被替换。字符表达式3:用于替换的字符。看了上面的内容后可能还是有点稀里糊涂,那就用一个例子来说明吧:? CHRTRAN(AABCDEF, ACE, XYZ)显示结果是:XXBYDZF即用“X”替换“AABCDEF”中的“A”,“Y”替换“C”,“Z”替换“E”。这下明白了吧:)注意如果“字符表达式3”中的字符少于“字符表达式2”中的字符数,那么“字符表达式1”与“表达式2”中多余的字符相匹配的字符将被删除,怎么讲起来总象绕口令,还是看例子:? CHRTRAN(AABCDEF, ACE, XY)显示结果是:XXBYDF,“E”被删掉,或者说“XY”中第3个字符是空字符,“E”被这个空字符替换了。说明另有一个函数 STRTRAN(),主要用于双字节的字符,如字符串中有中文,最好使用这个函数。CHRTRAN(), 替换字符,如CHRTRAN(123456, 135, ABC) = A2B4C6STRTRAN(),替换字符串,如STRTRAN(123456, 123, 112233) = 112233456-s = STRTRAN(s, b, x)-UP-其实strtran可以替代chrtran,vfp中string和chr不是分得很清晰.-strtran可以替代chrtran?STRTRAN()是替换整个字符的,CHRTRAN()是一个一个字符替换的,某些时候相同,但两个函数面向不同的用途。s = 1,2,3,4,5STRTRAN(s, , -)CHRTRAN(s, , -)此时是相同的,但此时应该用CHRTRAN()s = 1,2,3,4,5CHRTRAN(s, , )可以将上面的字符串转换成1,2,3,4,5,而STRTRAN()就做不到s = 12345STRTRAN(s, 12345, ABCDE)CHRTRAN(s, 12345, ABCDE)此时两者结果相同,但运行机理是不同的,此时应该用STRTRAN()s = 1 11 & 内含一个半角空格和一个全角空格此时可用CHRTRANC(s, , )将其中的“空格”去掉,不管全角还是半角在vf中创建圆形表单(2009-06-23 16:57:34) 转载标签: 杂谈*在表单的load事件中写下declare integer SetWindowRgn in win32api integer,integer,integer&声明API函数declare integer CreateRoundRectRgn in win32api integer,integer,integer,integer,integer,integerset library to d:program filesmicrosoft visual studiovfp98foxtools.fll&指出装机是地址this.height=400this.width=400*在表单的active事件中写下*topwindow=_WonTop()hwnd=_WhToHwnd(topwindow)crn1=CreateRoundRectRgn(0,0,400,400,400,400)SetWindowRgn(hwnd,crn1,.t.)转载WHANDLEWonTop()返回用户使用的活动窗口WHandleHWNDWhToHwnd(WHandle)返回相应的窗口句柄hWnd。HDCGetDC(hWnd)返回指定窗口hWnd的设备句柄hDC有了设备句柄调用绘图函数则很容易,例如:画矩形的API函数语法如下:BOOLRectangle(hDC,x1,y1,x2,y2)其中x1,y1,x2,y2为矩形对角线的x,y坐标使用这些API函数绘图需注意几点:1.API函数使用前需用declare声明,另外应注意函数名称大小写(具体用法见文后程序)。2.调用以上函数时,WHandle、hWnd、hDc、x1、y1、x2、y2参数及BOOL均可用Integer类型进行说明,以上函数返回值若为0,表示调用失败。3.VisualFoxPro设置前景色、填充色等属性设置不影响API函数中绘图方式。4.使用VisualFoxPro原类方法的绘图方法时,会清除API画的图形。因此,两者最好不要混合使用。5API函数参数中若有复合数据结构或数组,则应将该数据结构转换成String型。如下例语句可在VFP中调用Polygon函数绘制多边形。declareintegerPolygoninwin32apiinteger,string,integerdimepoint(3,2)point为三角形顶点坐标trangle=fori=1to3point(i,1)=100100rand()I点X坐标为(100200)随机数point(i,2)=100100rand()I点Y坐标为(100200)随机数以下两条语句将多边形顶点的数值转化为字符,并连入字符串trangle=tranglechr(point(i,1)chr(0)chr(0)chr(0)trangle=tranglechr(point(i,2)chr(0)chr(0)chr(0)endforpolygon(thisform.hdc,trangle,3)VPF中打开一个表单,在表单中新建属性并新建API函数编制的绘图方法,最后将其保存为新类库。这样一个集绘图与原表单各种功能的可视类就建好了。以下是VisualFoxpro中用API函数动态设计饼形图的简单实例。图为执行程序后屏幕输出。三个文本框中任一数据改变后,饼形图将立即重绘。程序:为Form对象增加新属性hDc和新方法Pie。Form1的Load事件:declareintegerGetDCinwin32apiintegerdeclareintegerPieinwin32apiinteger,integer,integer,integer,;integer,integer,integer,integer,integerdeclareintegerCreateSolidBrushinwin32apilongdeclareintegerSelectObjectinwin32apiinteger,integerdeclareintegerCreatePeninwin32apiinteger,integer,longsetlibrarytosys(2004)foxtools.fllForm1的Activate事件whandle=_WOnTop()hwnd=_WhToHwnd(whandle)setlibrarytothisform.hDC=GetDC(hwnd)Form1的Pie方法lparametersx1,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事件cleardlls将本表单保存为新的可视类FORMDRAW。创建一个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)/21thisform.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的Valid事件:Thisform.drawchart表单的Paint事件Thisform.drawchart用API函数绘图与VisualFoxPro自身方法相比,使用更灵活、绘图性能强且速度快。关于WindowsAPI函数功能及用法请查阅有关资料。本文所述方法亦可在能与API函数通讯的其它软件中使用。VF绘制形状(三角形、多边形)(2009-08-01 17:02:27) 转载标签: thisvfnamergbwith杂谈分类: vf学习 Public goFormgoForm = Createobject(MiForm)goForm.Show(1)ReturnDefine Class MiForm As FormDoCreate = .T.AutoCenter = .T.Caption = 绘制多边形 in VFP 9.0 ZTName = 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 shpOctogono As Shape With ;TOP = 36, ;LEFT = 204, ;HEIGHT = 144, ;WIDTH = 144, ;BACKCOLOR = Rgb(0,0,255), ;POLYPOINTS = This.aOct, ;NAME = shpOctogonoProcedure shpTriangulo.InitThis.AddProperty(aTri3,2)This.aTri1,1= 50This.aTri1,2= 0This.aTri2,1= 100This.aTri2,2= 100This.aTri3,1= 0This.aTri3,2= 100EndprocProcedure 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= 0This.aOct8,2= 33EndprocEnddefineVFP问题 用户可以给表单添加自定义属性和方法程序打开表单,选择菜单“表单”-编辑属性/方法,新建属性“D在运行时刻向一个对象添加一个新属性。ADDPROPERTY( ) 用于向有效的 Visual FoxPro 对象添加新属性和值,对象包括由 Visual FoxPro 类生成的类,COM 类,以及 SCATTER.NAME 命令生成的类。ADDPROPERTY(oObjectName, cPropertyName, , eNewValue )参数oObjectName 指定要加属性的对象的名称。如果 oObjectName 不是一个有效的对象,Visual FoxPro 将产生适当的提示信息。 cPropertyName 指定要添加到对象中的新属性的名称。如果指定的属性名不存,该属性将被创建并添加。 eNewValue 指定新属性的设置值。当省略 eNewValue时,如果该属性已经存在,Visual FoxPro保持该属性值不变;如果该属性是新添加的,Visual FoxPro 将该属性值设为“假”(.F.)。 返回值逻辑型数据类型。下表中列出了ADDPROPERTY( )的返回值,及添加一个已经存在的属性到对象时的表现。返回值 说明 真 (.T.) 当 ADDPROPERTY( ) 成功添加属性时。当新属性是一个数组属性,并且该数组已经存在,ADDPROPERTY( ) 根据cPropertyName中指定的情况重新调整数组的大小。如果用eNewValue指定了属性值,数组中所有元素都将设为该值。如果省略 eNewValue,所有的数组元素都将被设为假(.F.)。如果新属性不是一个数组属性,但已经存在的属性是一个数组属性,该属性将保持同样大小的数组属性。如果用 eNewValue指定了新值,数组中全部元素将被设为该值。如果省略eNewValue,所有数组元素将被设为假(.F.)。如果新属性不是一个数组属性,并且已存在的属性是不是数组属性或者不是一个只读的 Visual FoxPro 自带属性,如果eNewValue中指定了新值,已存在的属性将被设为该值。如果省略eNewValue,已存在的属性值将保持不变。如果指定的属性是一个已经存在,被标为Hidden (隐藏)或 Protected(受保护)的对象成员, Visual FoxPro 产生一个错误,name 属性没有找到(Error 1734)并且该属性不能被 ADDPROPERTY( )设置。 假 (.F.) 当 ADDPROPERTY( ) 未能成功添加属性时。当新属性是数组属性,已存在的属性不是数组属性,已存在的属性将保持不变。说明用 ADDPROPERTY( ) 可以为对象创建属性数组。如果提供了eNewValue,每个数组元素初始化为该值。否则,数组中每个属性的值都被设为假(.F.)。更多的关于为对象创建属性数组的信息,请参见示例。Visual FoxPro新添加的属性将做为Public(公共)属性。该属性可以被指定为 Protected 或 Hidden。如果已存在的属性是只读的 Visual FoxPro 自带属性,比如BaseClass 属性,Visual FoxPro 将产生一个错误,属性名是只读的(Error 1743)。如果属性名不是效的,例如,属性名中包含空格或其它非法字符,Visual FoxPro 将产生一个错误,不正确的属性名(Error 1470)。对于由Visual FoxProFor类继承而来的对象的实例,ADDPROPERTY( ) 将保持AddProperty方法中的可视化设置。如果AddProperty 被标为 Hidden 或 Protected, ADDPROPERTY( ) 不创建新属性并返回假(.F.)。如果 AddProperty 方法被标为Public (默认),ADDPROPERTY( ) 创建数组并返回真(.T.)。这保护了原始的类设计。注意: 这个不能应用到由 Visual FoxPro OLEPUBLIC 类创建的 COM 对象。 对于FOR EACH命令中的对象引用,不能使用ADDPROPERTY( )函数,但可以用AddProperty 方法程序来实现该功能。示例示例 1下面的示例向SCATTER命令创建的对象添加一个新的属性。USE customersSCATTER NAME oCustADDPROPERTY(oCust,MyProperty)示例 2下面的示例向 oMyForm 对象添加了一个属性数组,并且显示它的内容,1 和 Two。oMyForm = CREATEOBJECT(Form)ADDPROPERTY(oMyForm, MyArray(2), 1)oMyForm.MyArray(2) = TwoCLEAR? oMyForm.MyArray(1) ? oMyForm.MyArray(2)VFP关于表单(一)/s/blog_4c412f3401000ag9.html VFP表单问题(一)1.让VFP表单卸载时显示确认对话框我们有时希望表单在被关闭前能显示确认信息,给用户留有选择的余地。这在Windows程序中非常普遍,作用也是显而易见的。在VFP中要实现此功能,方法也很简单。首先,让我们来看一个VFP表单的卸载步骤:表单在卸载前,首先要询问表单的QueryUnload事件,然后再卸载表单。也就是说,QueryUnload事件是表单卸载时第一个被触发的事件。在 QueryUnload 事件过程中执行 NODEFAULT命令可以阻止表单卸载。这样我们通过在QueryUnload 事件中巧妙包含NODEFAULT,就能避免直接卸载表单。QueryUnload是怎样被触发的呢?当在代码中执行 CLEAR WINDOWS,RELEASE WINDOWS 或 QUIT 等命令时、或者当用户双击控制菜单框时、或者当用户从表单的控制菜单中选择执行“关闭”命令时,都会触发表单的 QueryUnload 事件。先在表单的QueryUnload事件中包含下面代码:*- 显示包含“是”、“否”两个按钮的对话框If MessageBox(确定要退出吗?,4+48+256,提示)=6 ThisForm.Release&如果选取了“是”,则退出Else &选取了“否” NODEFAULT & 不退出EndIf这样当有卸载表单的事件发生时,都会显示确认要退出的对话框:只有选取“是”,才能卸载表单。这样做是非常有用的,例如我们为了避免正在操作的数据没有保存就退出,可以在程序中使用这段代码,至于如何保存数据,不同的程序采取的方法不尽相同,这里我们不做详细讨论。需要说明的是,当在代码中直接执行 RELEASE 命令或直接调用表单的 Release 方法时,不会触发 QueryUnload 事件。因此,我们应尽量避免在代码中直接执行RELEASE 命令或调用表单的 Release 方法。取代的方法是,当要卸载表单时,转向调用表单的QueryUnload方法。例如,我们要在表单中放置一个标题为“退出”的命令按钮,用来退出这个表单,并希望在退出时能显示确认对话框,可以在这个“退出”命令按钮的Click事件代码中包含下面的命令:ThisForm.QueryUnload &执行表单的QueryUnload事件,询问用户是否真的要退出。2.做两个表单,在表单1的text1和text2输入数字,按按钮后把加得的结果输入表单2的text1中。在表单1的command1的click事件中写入:with thisforma=.text1.value+.text2.valuedo form 表单2 with aendwith在表单2的INIT里写入:LPARAMETERS clsjthisform.text1.value=clsj3. 创建表单集时, 没有明确的办法添加已存在的表单到表单集.本文向你展示如何添加已存在的表单到表单集.假设要添加表单 MyForm 到表单集, 按以下步骤:1 打开 MyForm.2 在文件菜单中, 单击另存为类, 并单击保存表单.3 为新类取一个类名和要保存的类库文件名(.VCX 文件).4 关闭 MyForm.5 进入表单设计器,打开你的表单集,单击表单设计工具条中的查看类,然后单
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 消化道出血病人的舒适护理与疼痛管理
- 护理实践中的创新思维应用
- 多发性骨髓瘤患者心血管系统并发症的护理
- 妇产科护理技能培训
- 香料分馏工安全生产能力强化考核试卷含答案
- 活性炭碳化工安全培训效果水平考核试卷含答案
- 轻烃回收装置操作工安全应急能力考核试卷含答案
- 搪瓷制品制造工安全教育测试考核试卷含答案
- 竹藤编艺师岗前安全宣教考核试卷含答案
- 井下胶轮车司机安全操作考核试卷含答案
- 2026年苯丙乳液行业分析报告及未来发展趋势报告
- (四模)新疆2026年高三普通高考五月适应性文科综合试卷(含答案及解析)
- 景德镇辅警考试2026真题
- 2026中国氢能源基础设施建设与政策支持分析报告
- 2025年河北省石家庄市八年级地生会考考试试题及答案
- 微生物学-第九章-传染与免疫-zh-v7
- 课件亚洲与非洲音乐 课件-2022-2023学年高中音乐人音版(2019) 必修 音乐鉴赏
- 《美术鉴赏》课程思政课堂教学设计
- 骨科全髋关节置换术的护理
- 摄影构图(共86张PPT)
- 图解钢结构的连接方法及构造计算
评论
0/150
提交评论