为Form中的控件增加自适应功能 转

创建一个基于Custom的类resizeable,并新建属性和方法程序,其说明如下:
  a) 新建属性:
 posiTyperList   可调整位置的控件类型列表
sizeTypeList    可调整大小的控件类型列表
acontrolStats[1,4]存放Form初始状态下所有控件的大小
initformHeight   Form的初始高度
initformWidth    Form的初始宽度
initResize     初次调整否
  b) 新建方法程序:
  procontrols   处理Form中所有控件位置和大小
  savecontrols  保存Form中所有控件的大小和比例
  setposition   重新设置控件位置
  setsize     重新设置控件大小
  具体实现的程序代码清单如下:
Procedure procontrols  &&处理Form中所有控件位置和大小
 IF This.InitResize    &&是初次调整
  This.InitResize=.F.  &&设为非初次调整
 ENDIF
 Thisform.LockScreen=.T.   &&禁止屏幕刷新
 nPos=0    &&控件计数器
 FOR m.i=1 TO Thisform.ControlCount   &&遍历所有控件
  oControl=Thisform.Controls[m.i]
   nPos=nPos+1
   If This.InitResize    &&初次调整
    This.Savecontrols(oControl)    &&保存原Form中所有控件的大小比例
   ENDIF
   IF oControl.Class$This.posiTypeList   &&控件是否为用户指定类型
    This.SetPosition(oControl,nPos)   &&设置控件位置
   ENDIF
   IF oControl.Class$This.SizeTypeList  &&控件是否为用户指定类型
    This.SetSize(oControl,nPos)   &&设置控件大小
   ENDIF
 ENDFOR
 Thisform.LockScreen=.F.    &&允许屏幕刷新
Procedure savecontrols   &&保存Form初始状态下所有控件的大小比例
Para oControl
 nLen=ALEN(This.aControlStats,1)
 This.aControlStats[nLen,1]=oControl.Height/This.InitFormHeight
 This.aControlStats[nLen,2]=oControl.Width/This.InitFormWidth
 This.aControlStats[nLen,3]=oControl.Top/This.InitlFormHeight
 This.aControlStats[nLen,4]=oControl.Left/This.InitFormWidth
 DIMENSION This.aControlStats[nLen+1,4]
Procedure setposition    &&重新设置控件位置
 Para oControl,nPos
  oControl.Top=Thisform.Height*This.aControlStats[nPos,3]
  oControl.Left=Thisform.Width*This.aControlStats[nPos,4]
Procedure setsize   &&重新设置控件大小
 Para oControl,nPos
  oControl.Width=Thisform.Width*This.aControlStats[nPos,2]
  IF !oControl.Baseclass $ "Textbox Spinner"
   oControl.Height=Thisform.Height * This.aControlStats[nPos,1]
  ENDIF
Procedure Init   &&初始化
 This.InitFormHeight=Thisform.Height
 This.InitFormWidth=Thisform.Width
 InitResize=.T.

 

2 实际应用

  将resizeable类应用到Form中,需完成以下工作:
  (1) Form中添加resizeable类对象,且向其Resize Event添加代码:
This.Resizable1.procontrols
  (2) Form中resizeable1对象的posiTypeList和sizeTypeList分别输入属性值。posiTypeList指定了允许调整位置的控件类型,例如:
Commandbutton Combobox Checkbox Listbox Grid Textbox Label Shape Editbox Spinner
  同样,sizeTypeList由用户指定允许调整大小的控件类型。posiTypeList值和sizeTypeList值可以不一致。
  在Form运行状态下,当点击Form的最大/恢复按钮或拖动Form边框时,Form中所有控件会随窗口的变化自动改变大小。
  与调整尺寸有关的Form属性有: ZoomBox 、Minheight、 MinWidth、MaxHeight 、MaxLeft 、MaxTop 、MaxWidth。若允许用户调整Form 尺寸必须设置 Form.ZoomBox=.F.。
  用户可根据Form的页面布局,选定Form的高度和宽度的最值。
  所设计的resizable类有以下特点:通用性强,适用于任何Form,程序不需作变动;封装性好,易于使用和维护;留有接口,允许用户自由选择调整位置和大小的控件类型。

原文地址:https://www.cnblogs.com/FuYan/p/3538316.html