分类：电脑/网络-软件
问题：vfp9能自动调整表单及适应屏幕吗 
vfp9 能自动调整表单及适应屏幕吗
回答：让表单自动适应屏幕分辨率为了避免表单在屏幕上显示的过大或过小，就要求表单的大小与屏幕的分辨率相适应。由于用户计算机的屏幕分辨率不可能都一致，更不可能强制用户只选用一种屏幕分辨率。所以，频繁的根据表单调整屏幕分辨率是不可取的。只能寄希望于让表单的尺寸能自动变换，来适应用户的计算机。为了解决这个问题，一直没找到合适的范例。我下了一定功夫，得到了相当效果，现贴出来，与梅子论坛的朋友们共享。要使表单大小适应屏幕分辨率，主要需要使用一个函数和两个属性：一个函数是： sysmetric(n)。它可以返回当前屏幕宽度或高度；（参数含义及返回值：1 当前屏幕宽度；2 当前屏幕高度　）两个属性是：ControlCount和Controls。ControlCount属性可返回表单包含的控件的数目。Controls属性可返回各控件指定属性的有关数据。使表单大小适应屏幕分辨率，就是让计算机根据屏幕分辨率的改变状况，把表单及其中的各个控件重写一次。上面的函数和属性，就为我们创造了这些条件。下面是我在梅子论坛网友代码的基础上，经研究、修改写出的代码，把它贴到表单的“init”事件代码中，就可以获得理想的结果。（注意：不能贴到表单的“load”事件代码中，因为这时还不能查到表单上的控件。）PK1=1024 &&编程机屏幕宽度，这要根据你编程用的填。PG1=768&&编程机屏幕高度，这也要根据你编程用的电脑填。PK2=SYSMETRIC(1) &&运行机屏幕宽度PG2=SYSMETRIC(2) &&运行机屏幕高度WITH THIS* 重新调整表单的大小和位置.Width = .Width*PK2/PK1.Height = .Height*PG2/PG1.Left = .Left*PK2/PK1.Top = .Top*PG2/PG1* 重新调整表单上各控件的大小和位置FOR nControlLoop = 1 TO .ControlCount.Controls[nControlLoop].Width = .Controls[nControlLoop].Width*PK2/PK1.Controls[nControlLoop].Height = .Controls[nControlLoop].Height*PG2/PG1.Controls[nControlLoop].Left = .Controls[nControlLoop].Left*PK2/PK1.Controls[nControlLoop].Top = .Controls[nControlLoop].Top*PG2/PG1*-- 调整控件字体大小IF PEMSTATUS(.Controls[nControlLoop],\"FontSize\",5).Controls[nControlLoop].FontSize = INT(.Controls[nControlLoop].FontSize*PK2/PK1)endifENDFORENDWITHENDIFthis.AutoCenter= .T.&&.让表单保持自动居屏幕中央的特性。如果您的表单中还有PageFrame，上面代码的效果就不理想了。因为上面的WITH THIS循环只进行了一级，PageFrame内部的控件就没有修改，改用下面的代码，就可以了：PK1=1024 &&编程机屏幕宽度，这要根据你编程用的电脑填。PG1=768&&编程机屏幕高度，这也要根据你编程用的电脑填。PK2=SYSMETRIC(1) &&运行机屏幕宽度PG2=SYSMETRIC(2) &&运行机屏幕高度WITH THIS* 重新调整表单的大小和位置.Width = .Width*PK2/PK1.Height = .Height*PG2/PG1.Left = .Left*PK2/PK1.Top = .Top*PG2/PG1* 重新调整表单上各控件的大小和位置FOR nControlLoop = 1 TO .ControlCount.Controls[nControlLoop].Width = .Controls[nControlLoop].Width*PK2/PK1.Controls[nControlLoop].Height = .Controls[nControlLoop].Height*PG2/PG1.Controls[nControlLoop].Left = .Controls[nControlLoop].Left*PK2/PK1.Controls[nControlLoop].Top = .Controls[nControlLoop].Top*PG2/PG1*-- 调整控件字体大小IF PEMSTATUS(.Controls[nControlLoop],\"FontSize\",5).Controls[nControlLoop].FontSize = INT(.Controls[nControlLoop].FontSize*PK2/PK1)endifENDFORENDWITHYMS=THIS.Pageframe1.PageCountIF YMS>0FOR I=1 TO YMSYM1=\"THIS.Pageframe1.PAGE\"+ALLTRIM(STR(I))YM2=YM1+\".FontSize\"WITH &YM1.FontSize=&YM2*PK2/PK1FOR nControlLoop = 1 TO .ControlCount.Controls[nControlLoop].Width = .Controls[nControlLoop].Width*PK2/PK1.Controls[nControlLoop].Height = .Controls[nControlLoop].Height*PG2/PG1.Controls[nControlLoop].Left = .Controls[nControlLoop].Left*PK2/PK1.Controls[nControlLoop].Top = .Controls[nControlLoop].Top*PG2/PG1IF PEMSTATUS(.Controls[nControlLoop],\"FontSize\",5).Controls[nControlLoop].FontSize= INT(.Controls[nControlLoop].FontSize*PK2/PK1)ENDIFENDFORENDWITHENDFORENDIFthis.AutoCenter= .T.如果加上这些代码，改变一下屏幕的分辨率，试试看，效果如何？你就不用为用户电脑的分辨率不同而发愁了。 诚心为你解答，给个好评吧亲，谢谢啦