zoukankan      html  css  js  c++  java
  • 为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,程序不需作变动;封装性好,易于使用和维护;留有接口,允许用户自由选择调整位置和大小的控件类型。

  • 相关阅读:
    MT【280】最小值函数
    MT【279】分母为根式的两个函数
    MT【278】二次齐次化
    selenium之 chromedriver与chrome版本映射表
    django使用数据库锁
    mysql添加行内锁
    Django 通过url 获取url名称
    Django Q的其他用法
    Django 的 QueryDict
    Django 获取带参数的url
  • 原文地址:https://www.cnblogs.com/FuYan/p/3538316.html
Copyright © 2011-2022 走看看