在17寸液晶上写的程序,为在15的一般显示器上能正常显示,在程序中五个窗体上每个上画了一个resize控件,但每一次按F5运行都有一些窗体不能正常显示,而且每一次出错的窗体都不固定,这是什么原因,是不是还需要设置?
解决方案 »
- 关于VBA里Cells函数的问题,超级奇怪,求解答
- Microsoft VBScript runtime error '800a01ad'
- 论坛首页进来时太慢了,要改进啊!
- 使用datareport时遇到的一个问题,不知各位见过否???
- MSFlexGrid1和ADODC能连么``?
- 请问:如何将MS—SQL中的数据库导入、导出?
- 做用户控件,这怎样实现?
- IE式浮动工具栏
- VBA高手指点一下!!!
- 用MScomm控件有没有拨传呼的功能呢??比如先拨一个台号后,再拨一个传呼号呢?(我是说自动台的)
- 我想做个类似MSN那样,有人登陆的时候,从窗体右下角弹出提示的窗口。
- VB中如何提高读写文件的效率?
http://search.csdn.net/Expert/topic/1192/1192552.xml?temp=.4811518
---------------------------------------
Option ExplicitType MyControl
mcName As String
mcTop As Single
mcLeft As Single
mcHeight As Single
mcWidth As Single
mcIsArr As Boolean
mcIndex As Long
End Type
Type MyForm
mfID As Long
mfControl() As MyControl
End Type
Public MyFrm() As MyForm
'****************************************************
'函数说明:可以让多个窗体的控件随窗体的大小而改变。
'****************************************************
'调用代码:cResize(Me,Load用True Resize用False可以省略)
'****************************************************
Public Function cResize(frm As Form, Optional Install As Boolean = False) As Long
'On Error Resume Next '窗体中有Combo、DriveList等控件时用到。
If frm.WindowState = 1 Then Exit Function '窗体最小化时略
Dim i As Long '控件的编号
Dim j As Long '窗体的编号
Dim k As Long
Dim Obj As Object '控件的集合
'********************************(Form_Load调用的代码)******************************
If Install = True Then
Static FrmID As Long
FrmID = FrmID + 1
ReDim Preserve MyFrm(FrmID) As MyForm
MyFrm(FrmID).mfID = frm.hWnd
For Each Obj In frm.Controls
If HasIndex(Obj) Then
i = i + 1
ReDim Preserve MyFrm(FrmID).mfControl(i) As MyControl
With MyFrm(FrmID).mfControl(i)
.mcName = Obj.Name
.mcLeft = Obj.Left / frm.ScaleWidth
.mcTop = Obj.Top / frm.ScaleHeight
.mcWidth = Obj.Width / frm.ScaleWidth
.mcHeight = Obj.Height / frm.ScaleHeight
.mcIsArr = True
.mcIndex = Obj.Index
End With
Else
i = i + 1
ReDim Preserve MyFrm(FrmID).mfControl(i) As MyControl
With MyFrm(FrmID).mfControl(i)
.mcName = Obj.Name
.mcLeft = Obj.Left / frm.ScaleWidth
.mcTop = Obj.Top / frm.ScaleHeight
.mcWidth = Obj.Width / frm.ScaleWidth
.mcHeight = Obj.Height / frm.ScaleHeight
.mcIsArr = False
End With
End If
Next
Exit Function
End If
'********************************(Form_Resize调用的代码)****************************
For j = 1 To UBound(MyFrm)
If frm.hWnd = MyFrm(j).mfID Then Exit For
Next
For Each Obj In frm
For i = 1 To UBound(MyFrm(j).mfControl)
If Obj.Name = MyFrm(j).mfControl(i).mcName Then Exit For
Next
If MyFrm(j).mfControl(i).mcIsArr Then
For i = 1 To UBound(MyFrm(j).mfControl)
k = Obj.Index
If (MyFrm(j).mfControl(i).mcIndex = k) And (Obj.Name = MyFrm(j).mfControl(i).mcName) Then
Obj.Left = MyFrm(j).mfControl(i).mcLeft * frm.ScaleWidth
Obj.Top = MyFrm(j).mfControl(i).mcTop * frm.ScaleHeight
Obj.Width = MyFrm(j).mfControl(i).mcWidth * frm.ScaleWidth
Obj.Height = MyFrm(j).mfControl(i).mcHeight * frm.ScaleHeight
End If
Next i
Else
Obj.Left = MyFrm(j).mfControl(i).mcLeft * frm.ScaleWidth
Obj.Top = MyFrm(j).mfControl(i).mcTop * frm.ScaleHeight
Obj.Width = MyFrm(j).mfControl(i).mcWidth * frm.ScaleWidth
Obj.Height = MyFrm(j).mfControl(i).mcHeight * frm.ScaleHeight
End If
Next
End Function
Public Function HasIndex(CTL As Object) As BooleanDim i As Long
On Error Resume Next
Err.Clear
i = CTL.Index '如果是控件数组,有Index属性,否则没有,会引发一个错误
HasIndex = (Err = 0)
Debug.Print CTL.Name
End Function
------------
这是最后的那个回复。
Private w(), h(), l(), t(), f() As Long
Public Sub Getoldsize(xfrm As Form)
Dim i, n As Integer
n = xfrm.Controls.Count - 1
ReDim w(n), h(n), l(n), t(n), f(n) As Long
w0 = Main.ScaleWidth
h0 = Main.ScaleHeight
For i = 0 To xfrm.Controls.Count - 1
On Error Resume Next
w(i) = xfrm.Controls(i).Width
h(i) = xfrm.Controls(i).Height
l(i) = xfrm.Controls(i).Left
t(i) = xfrm.Controls(i).Top
f(i) = xfrm.Controls(i).Font.Size
Next i
End SubPublic Sub Adjustsize(xfrm As Form)
Dim str As String
Dim m As Integer
Dim scaleX, scaleY As Double
scaleX = Main.ScaleWidth / w0
scaleY = Main.ScaleHeight / h0
For i = 0 To xfrm.Controls.Count - 1
On Error Resume Next
xfrm.Controls(i).Left = l(i) * scaleX
xfrm.Controls(i).Top = t(i) * scaleY
xfrm.Controls(i).Width = w(i) * scaleX
xfrm.Controls(i).Height = h(i) * scaleY
xfrm.Controls(i).Font.Size = Int(f(i) * scaleX)
Next i
End Sub自己写的,简单易懂,基本可以模拟,Main为窗体名称
在formload调用getoldsize me,在formresize调用adjustsize meresize确实不好用