Option Explicit
Private ObjOldWidth As Long '保存窗体的原始宽度
Private ObjOldHeight As Long '保存窗体的原始高度
Private ObjOldFont As Single '保存窗体的原始字体比
Dim DisplayX As Integer, DisplayY As Integer, DisplayColor As Integer'在调用ResizeForm前先调用本函数
Public Sub ResizeInit(FormName As Form)
Dim Obj As Control
ObjOldWidth = FormName.ScaleWidth
ObjOldHeight = FormName.ScaleHeight
ObjOldFont = FormName.Font.Size / ObjOldHeight
On Error Resume Next
For Each Obj In FormName
Obj.Tag = Obj.Left & " " & Obj.Top & " " & Obj.Width & " " & Obj.Height & " "
Next Obj
On Error GoTo 0
End Sub'按比例改变表单内各元件的大小,
'在调用ReSizeForm前先调用ReSizeInit函数
Public Sub ResizeForm(FormName As Form) Dim Pos(4) As Double
Dim i As Long, TempPos As Long, StartPos As Long
Dim Obj As Control
Dim ScaleX As Double, ScaleY As Double
ScaleX = FormName.ScaleWidth / ObjOldWidth
'保存窗体宽度缩放比例
ScaleY = FormName.ScaleHeight / ObjOldHeight
'保存窗体高度缩放比例
On Error Resume Next
For Each Obj In FormName
StartPos = 1
For i = 0 To 4
'读取控件的原始位置与大小
TempPos = InStr(StartPos, Obj.Tag, " ", vbTextCompare)
If TempPos > 0 Then
Pos(i) = Mid(Obj.Tag, StartPos, TempPos - StartPos)
StartPos = TempPos + 1
Else
Pos(i) = 0
End If
'根据控件的原始位置及窗体改变大
'小的比例对控件重新定位与改变大小
Obj.Move Pos(0) * ScaleX, Pos(1) * ScaleY, Pos(2) * ScaleX, Pos(3) * ScaleY
Obj.Font.Size = ObjOldFont * FormName.ScaleHeight
Next i
Next Obj
On Error GoTo 0
End SubPrivate Sub Form_Resize()
'确保窗体改变时控件随之改变
Call ResizeForm(Me)
End SubPrivate Sub Form_Load()
'在程序装入时必须加入
Call ResizeInit(Me)
End Sub
上面是我找到一段关于自适应分辨率的代码,但是不对的地方在于程序已运行的时候窗体就已经超出界面了
大家能不能帮我看看(问题应该在红色的那段吧)
Private ObjOldWidth As Long '保存窗体的原始宽度
Private ObjOldHeight As Long '保存窗体的原始高度
Private ObjOldFont As Single '保存窗体的原始字体比
Dim DisplayX As Integer, DisplayY As Integer, DisplayColor As Integer'在调用ResizeForm前先调用本函数
Public Sub ResizeInit(FormName As Form)
Dim Obj As Control
ObjOldWidth = FormName.ScaleWidth
ObjOldHeight = FormName.ScaleHeight
ObjOldFont = FormName.Font.Size / ObjOldHeight
On Error Resume Next
For Each Obj In FormName
Obj.Tag = Obj.Left & " " & Obj.Top & " " & Obj.Width & " " & Obj.Height & " "
Next Obj
On Error GoTo 0
End Sub'按比例改变表单内各元件的大小,
'在调用ReSizeForm前先调用ReSizeInit函数
Public Sub ResizeForm(FormName As Form) Dim Pos(4) As Double
Dim i As Long, TempPos As Long, StartPos As Long
Dim Obj As Control
Dim ScaleX As Double, ScaleY As Double
ScaleX = FormName.ScaleWidth / ObjOldWidth
'保存窗体宽度缩放比例
ScaleY = FormName.ScaleHeight / ObjOldHeight
'保存窗体高度缩放比例
On Error Resume Next
For Each Obj In FormName
StartPos = 1
For i = 0 To 4
'读取控件的原始位置与大小
TempPos = InStr(StartPos, Obj.Tag, " ", vbTextCompare)
If TempPos > 0 Then
Pos(i) = Mid(Obj.Tag, StartPos, TempPos - StartPos)
StartPos = TempPos + 1
Else
Pos(i) = 0
End If
'根据控件的原始位置及窗体改变大
'小的比例对控件重新定位与改变大小
Obj.Move Pos(0) * ScaleX, Pos(1) * ScaleY, Pos(2) * ScaleX, Pos(3) * ScaleY
Obj.Font.Size = ObjOldFont * FormName.ScaleHeight
Next i
Next Obj
On Error GoTo 0
End SubPrivate Sub Form_Resize()
'确保窗体改变时控件随之改变
Call ResizeForm(Me)
End SubPrivate Sub Form_Load()
'在程序装入时必须加入
Call ResizeInit(Me)
End Sub
上面是我找到一段关于自适应分辨率的代码,但是不对的地方在于程序已运行的时候窗体就已经超出界面了
大家能不能帮我看看(问题应该在红色的那段吧)
http://d.download.csdn.net/down/1763009/flyingdragon168
对于ComboBox控件,你要使用Microsft Forms 2.0 Object Library也就是fm20.dll动态库中控件。
日期控件,需要通过字体来控制,我是使用自己写的日期控件。
我目前所有的项目,所有控件都基本OK了。字体大小,控件有个选项,是否缩放字体,当然,字体想完全按比例去调整,有点难,因为字体与高度或宽度根本没有一个准确的比例公式。
SizeFont表示字体缩放,
ExcludeFonts:表示那些控件字体不用缩放:||控件名1||控件名2||,这样表示控件1与控件2字体不变化。
ExcludeControls:表示那些控件不用缩放: ||控件1||控件2||,这样表示控件1与控件2不缩放尺寸。
不过还是很谢谢你!
像ToolBar控件。不放在窗体底部PictureBox中。
我都是放在窗体顶部,不去缩放它,因为缩放不缩放ToolBar,影响不大。
最顶上,一个ToolBar控件,这个控件不用缩放。
再下面,放一个Picture控件,这个控件随窗体缩放,缩放的高度要去掉ToolBar的高度。然后把窗体所有录入,显示的控件放在Picture控件中。然后调用缩放控件来缩放Picture中的控件即可。我现在都是这样使用的,窗体也不是很难看。
所以在不同的分辨率下面ToolBar还是要变的
楼主可以准备一个控件数组,为不同的分辨率各准备一个,启动时在Main中先判断是什么分辨率,根据分辨率来启动窗体。呵呵办法老土了些,但应该有用。
除非就是像上楼所讲,每种分辨率做一个窗体,但现在显示器种类太多,分辨率不只就是几种而已。