编程教程
您现在的位置: 中国个人站长站 >> 网络编程 >> Visual Basic >> 教程正文 常见问题:自动调整窗口内控间的大小
推荐位

常见问题:自动调整窗口内控间的大小

中国个人站长站 Visual Basic 点击数: 更新时间:2007-7-13 8:12:28

这是一个类模块:
1. 建立一个新的类模块,加入下列代码,并给类模块起名(例:autosize)
2. 加入一个窗口并且加入:Private el as new autosize
3. 在 Form_Load 事件中加入 el.init me
4. 在 Form_Resize 事件中加入 el.formresize me


Option ExplicitPrivate nFormHeight      As IntegerPrivate nFormWidth       As IntegerPrivate nNumOfControls   As IntegerPrivate nTop()           As IntegerPrivate nLeft()          As IntegerPrivate nHeight()        As IntegerPrivate nWidth()         As IntegerPrivate nFontSize()      As IntegerPrivate nRightMargin()   As IntegerPrivate bFirstTime       As Boolean

Sub Init(frm As Form, Optional nWindState As Variant)   Dim I          As Integer   Dim bWinMax    As Boolean   bWinMax = Not IsMissing(nWindState)   nFormHeight = frm.Height   nFormWidth = frm.Width   nNumOfControls = frm.Controls.Count - 1   bFirstTime = True   ReDim nTop(nNumOfControls)   ReDim nLeft(nNumOfControls)   ReDim nHeight(nNumOfControls)   ReDim nWidth(nNumOfControls)   ReDim nFontSize(nNumOfControls)   ReDim nRightMargin(nNumOfControls)   On Error Resume Next   For I = 0 To nNumOfControls      If TypeOf frm.Controls(I) Is Line Then         nTop(I) = frm.Controls(I).Y1         nLeft(I) = frm.Controls(I).X1         nHeight(I) = frm.Controls(I).Y2         nWidth(I) = frm.Controls(I).X2      Else         nTop(I) = frm.Controls(I).Top         nLeft(I) = frm.Controls(I).Left         nHeight(I) = frm.Controls(I).Height         nWidth(I) = frm.Controls(I).Width         nFontSize(I) = frm.FontSize         nRightMargin(I) = frm.Controls(I).RightMargin      End If   Next   If bWinMax Or frm.WindowState = 2 Then      frm.Height = Screen.Height      frm.Width = Screen.Width   Else      frm.Height = frm.Height * Screen.Height / 7290      frm.Width = frm.Width * Screen.Width / 9690   End If   bFirstTime = TrueEnd Sub

Sub FormResize(frm As Form)   Dim I             As Integer   Dim nCaptionSize  As Integer   Dim dRatioX       As Double   Dim dRatioY       As Double   Dim nSaveRedraw   As Long   On Error Resume Next   nSaveRedraw = frm.AutoRedraw   frm.AutoRedraw = True   If bFirstTime Then      bFirstTime = False      Exit Sub   End If   If frm.Height < nFormHeight / 2 Then      frm.Height = nFormHeight / 2   Endif   If frm.Width < nFormWidth / 2 Then      frm.Width = nFormWidth / 2   Endif     nCaptionSize = 400   dRatioY = 1# * (nFormHeight - nCaptionSize) _    / (frm.Height - nCaptionSize)   dRatioX = 1# * nFormWidth / frm.Width   On Error Resume Next   For I = 0 To nNumOfControls      If TypeOf frm.Controls(I) Is Line Then         frm.Controls(I).Y1 = Int(nTop(I) / dRatioY)         frm.Controls(I).X1 = Int(nLeft(I) / dRatioX)         frm.Controls(I).Y2 = Int(nHeight(I) / dRatioY)         frm.Controls(I).X2 = Int(nWidth(I) / dRatioX)      Else         frm.Controls(I).Top = Int(nTop(I) / dRatioY)         frm.Controls(I).Left = Int(nLeft(I) / dRatioX)         frm.Controls(I).Height = Int(nHeight(I) / dRatioY)         frm.Controls(I).Width = Int(nWidth(I) / dRatioX)         frm.Controls(I).FontSize = Int(nFontSize(I) / _        dRatioX) + Int(nFontSize(I) / dRatioX) Mod 2         frm.Controls(I).RightMargin = Int(nRightMargin(I) / dRatioY)      End If   Next   frm.AutoRedraw = nSaveRedrawEnd Sub
教程录入:swh    责任编辑:swh 
个人站长站与你风雨同舟!
本站所提供的资源均来源于互联网,如有侵权行为,请与本站管理员联系,我们会第一时间删除!
·如果您发现《常见问题:自动调整窗口内控间的大小》文章有错误,也请通知我们修改!
联系邮箱chinageren#126.com,谢谢支持!
站内搜索:
广告服务 | 友情链接 | 联系我们 | 免责声明 | 用户留言 | 网站导航
版权所有:中国个人站长站 2007-2008 未经授权禁止复制或建立镜像 客服QQ号:112731235
copyright © 2007-2008 www.ChinaGeRen.com online services. all rights reserved. 苏ICP备05000059号