常见问题:自动调整窗口内控间的大小
2008-05-01 05:19
369 查看
这是一个类模块:
1. 建立一个新的类模块,加入下列代码,并给类模块起名(例:autosize)
2. 加入一个窗口并且加入:Private el as new autosize
3. 在 Form_Load 事件中加入 el.init me
4. 在 Form_Resize 事件中加入 el.formresize me
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
相关文章推荐
- VB窗口大小,控件自动调整的问题
- 窗口根据屏幕分辨率自动调整大小
- powerbuilder 中使用flash,flash无法根据窗口的大小自动调整
- 根据内容自动调整弹出窗口大小的JS解决方案
- 弹出窗口根据内容自动调整大小的JS解决方案
- 多个iframe自动调整大小的问题
- qt 窗口控件自动调整大小
- VMware虚拟机下窗口大小自动调整的…
- showModalDialog根据内容自动调整窗口大小
- 根据内容自动调整弹出窗口大小的JS解决方案
- 关于UITableViewCell的大小随文本大小自动调整的问题
- 要想让控件的长宽比随着窗口大小变化而自动调整,下面两个属性必须好好领会掌握。
- 如何让字体随窗口缩放自动调整大小
- 窗口根据屏幕分辨率自动调整大小
- 根据内容自动调整弹出窗口大小的JS解决方案
- 让ListControl控件随窗口自动调整大小
- VMware 根据窗口大小自动调整虚拟机分辨率(命令行,Arch为例)
- 根据内容自动调整弹出窗口大小的JS解决方案
- qt中让控件位置岁窗口大小自动调整,并且自身大小不变
- CentOS6 在VirtualBox中实现全屏和根据窗口大小自动调整分辨率 | Install Guest additions and run fullscreen mode on VirtualB