窗体中加入下面的代码,那么窗体上的所有控件都能随窗体变化等比例变化Option Explicit Private mlngW As Long Private mlngh As Long Private Type TControlInfo ctrl As Control Left As Single Top As Single Width As Single Height As Single FontSize As Single End Type Dim SaveCtrl() As TControlInfoPrivate Sub Form_Initialize() On Error Resume Next mlngW = Me.Width mlngh = Me.Height '±£´æ¿Ø¼þµÄ״̬ ReDim SaveCtrl(Me.Controls.Count - 1) As TControlInfo Dim i As Integer Dim ctrl As Control For i = 0 To Me.Controls.Count - 1 Set ctrl = Me.Controls(i) With SaveCtrl(i) Set .ctrl = ctrl .Left = ctrl.Left .Top = ctrl.Top .Width = ctrl.Width .Height = ctrl.Height .FontSize = ctrl.Font.Size End With Next End SubPrivate Sub Form_Resize() On Error Resume Next Dim lngW As Long Dim lngh As Long Dim lngf As Single Dim i As Integer lngW = Me.Width lngh = Me.Height ' take the lesser of the two If (lngW / mlngW) < (lngh / mlngh) Then lngf = (lngW / mlngW) Else lngf = (lngh / mlngh) End If For i = 0 To UBound(SaveCtrl) With SaveCtrl(i) If .ctrl.Left < 0 Then .ctrl.Left = ((.ctrl.Left + 75000) * (lngW / mlngW)) - 75000 ElseIf .Left < 0 Then .ctrl.Left = (.Left + 75000) * (lngW / mlngW) Else .ctrl.Left = .Left * (lngW / mlngW) End If .ctrl.Top = .Top * (lngh / mlngh) .ctrl.Width = .Width * (lngW / mlngW) .ctrl.Height = .Height * (lngh / mlngh)
If .FontSize > 0 Then If (.FontSize * lngf) < 8 Then If (.FontSize * lngf) > 7 Then .ctrl.Font.Size = 7 Else .ctrl.Font.Size = .FontSize * lngf End If Else .ctrl.Font.Size = .FontSize * lngf End If End If End With Next End Sub
设置分辨率nScreenWidth = Screen.Width / 15 '屏幕宽度 nScreenHeight = Screen.Height / 15 '屏幕高度 Dim K As Integer Dim nAnswer As Long If nScreenWidth <> 1024 And nScreenHeight <> 768 Then nAnswer = MsgBox("警告:显示器当前分辨率为 " & Trim(str(nScreenWidth)) & "x" & _ Trim(str(nScreenHeight)) & ",为使系统正常运行" & Chr(13) & _ "请将分辨率设置为 1024x768 增强色(16位)" & _ ",是否继续?", vbYesNo, cProgramName) Select Case nAnswer Case vbYes K = SetDisplayMode(1024, 768, 16) Case vbNo End End Select End If'************************************************************* '* 名称:WinMode '* 用途:改变分辨率 '************************************************************* Const SPI_GETWORKAREA = 48 Private Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long, lpvParam As Any, ByVal fuWinIni As Long) As Long Private Declare Function lstrcpy Lib "kernel32" Alias "lstrcpyA" (lpString1 As Any, lpString2 As Any) As Long Const CCHDEVICENAME = 32 Const CCHFORMNAME = 32 Const DM_PELSWIDTH = &H80000 Const DM_PELSHEIGHT = &H100000 Const DM_BITSPERPEL = &H40000 ' Private Type winmode dmDeviceName As String * CCHDEVICENAME dmSpecVersion As Integer dmDriverVersion As Integer dmSize As Integer dmDriverExtra As Integer dmFields As Long dmOrientation As Integer dmPaperSize As Integer dmPaperLength As Integer dmPaperWidth As Integer dmScale As Integer dmCopies As Integer dmDefaultSource As Integer dmPrintQuality As Integer dmColor As Integer dmDuplex As Integer dmYResolution As Integer dmTTOption As Integer dmCollate As Integer dmFormName As String * CCHFORMNAME dmUnusedPadding As Integer dmBitsPerPel As Integer dmPelsWidth As Long dmPelsHeight As Long dmDisplayFlags As Long dmDisplayFrequency As Long End Type Private Declare Function ChangeDisplaySettings Lib "user32" Alias "ChangeDisplaySettingsA" (ByVal lpwinmode As Long, ByVal dwflags As Long) As LongPublic Function SetDisplayMode(Width As Integer, Height As Integer, Color As Integer) As Long Dim Newwinmode As winmode Dim p As Long With Newwinmode .dmSize = 122 If Color = -1 Then .dmFields = DM_PELSWIDTH Or DM_PELSHEIGHT Else .dmFields = DM_PELSWIDTH Or _ DM_PELSHEIGHT Or DM_BITSPERPEL End If .dmPelsWidth = Width .dmPelsHeight = Height
If Color <> -1 Then .dmBitsPerPel = Color End If End With p = lstrcpy(Newwinmode, Newwinmode) SetDisplayMode = ChangeDisplaySettings(p, 0) End Function
Private mlngW As Long
Private mlngh As Long
Private Type TControlInfo
ctrl As Control
Left As Single
Top As Single
Width As Single
Height As Single
FontSize As Single
End Type
Dim SaveCtrl() As TControlInfoPrivate Sub Form_Initialize()
On Error Resume Next
mlngW = Me.Width
mlngh = Me.Height
'±£´æ¿Ø¼þµÄ״̬
ReDim SaveCtrl(Me.Controls.Count - 1) As TControlInfo
Dim i As Integer
Dim ctrl As Control
For i = 0 To Me.Controls.Count - 1
Set ctrl = Me.Controls(i)
With SaveCtrl(i)
Set .ctrl = ctrl
.Left = ctrl.Left
.Top = ctrl.Top
.Width = ctrl.Width
.Height = ctrl.Height
.FontSize = ctrl.Font.Size
End With
Next
End SubPrivate Sub Form_Resize()
On Error Resume Next
Dim lngW As Long
Dim lngh As Long
Dim lngf As Single
Dim i As Integer lngW = Me.Width
lngh = Me.Height
' take the lesser of the two
If (lngW / mlngW) < (lngh / mlngh) Then
lngf = (lngW / mlngW)
Else
lngf = (lngh / mlngh)
End If
For i = 0 To UBound(SaveCtrl)
With SaveCtrl(i)
If .ctrl.Left < 0 Then
.ctrl.Left = ((.ctrl.Left + 75000) * (lngW / mlngW)) - 75000
ElseIf .Left < 0 Then
.ctrl.Left = (.Left + 75000) * (lngW / mlngW)
Else
.ctrl.Left = .Left * (lngW / mlngW)
End If
.ctrl.Top = .Top * (lngh / mlngh)
.ctrl.Width = .Width * (lngW / mlngW)
.ctrl.Height = .Height * (lngh / mlngh)
If .FontSize > 0 Then
If (.FontSize * lngf) < 8 Then
If (.FontSize * lngf) > 7 Then
.ctrl.Font.Size = 7
Else
.ctrl.Font.Size = .FontSize * lngf
End If
Else
.ctrl.Font.Size = .FontSize * lngf
End If
End If
End With
Next
End Sub
nScreenHeight = Screen.Height / 15 '屏幕高度
Dim K As Integer
Dim nAnswer As Long
If nScreenWidth <> 1024 And nScreenHeight <> 768 Then
nAnswer = MsgBox("警告:显示器当前分辨率为 " & Trim(str(nScreenWidth)) & "x" & _
Trim(str(nScreenHeight)) & ",为使系统正常运行" & Chr(13) & _
"请将分辨率设置为 1024x768 增强色(16位)" & _
",是否继续?", vbYesNo, cProgramName)
Select Case nAnswer
Case vbYes
K = SetDisplayMode(1024, 768, 16)
Case vbNo
End
End Select
End If'*************************************************************
'* 名称:WinMode
'* 用途:改变分辨率
'*************************************************************
Const SPI_GETWORKAREA = 48
Private Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long, lpvParam As Any, ByVal fuWinIni As Long) As Long
Private Declare Function lstrcpy Lib "kernel32" Alias "lstrcpyA" (lpString1 As Any, lpString2 As Any) As Long
Const CCHDEVICENAME = 32
Const CCHFORMNAME = 32
Const DM_PELSWIDTH = &H80000
Const DM_PELSHEIGHT = &H100000
Const DM_BITSPERPEL = &H40000
'
Private Type winmode
dmDeviceName As String * CCHDEVICENAME
dmSpecVersion As Integer
dmDriverVersion As Integer
dmSize As Integer
dmDriverExtra As Integer
dmFields As Long
dmOrientation As Integer
dmPaperSize As Integer
dmPaperLength As Integer
dmPaperWidth As Integer
dmScale As Integer
dmCopies As Integer
dmDefaultSource As Integer
dmPrintQuality As Integer
dmColor As Integer
dmDuplex As Integer
dmYResolution As Integer
dmTTOption As Integer
dmCollate As Integer
dmFormName As String * CCHFORMNAME
dmUnusedPadding As Integer
dmBitsPerPel As Integer
dmPelsWidth As Long
dmPelsHeight As Long
dmDisplayFlags As Long
dmDisplayFrequency As Long
End Type
Private Declare Function ChangeDisplaySettings Lib "user32" Alias "ChangeDisplaySettingsA" (ByVal lpwinmode As Long, ByVal dwflags As Long) As LongPublic Function SetDisplayMode(Width As Integer, Height As Integer, Color As Integer) As Long
Dim Newwinmode As winmode
Dim p As Long
With Newwinmode
.dmSize = 122
If Color = -1 Then
.dmFields = DM_PELSWIDTH Or DM_PELSHEIGHT
Else
.dmFields = DM_PELSWIDTH Or _
DM_PELSHEIGHT Or DM_BITSPERPEL
End If
.dmPelsWidth = Width
.dmPelsHeight = Height
If Color <> -1 Then
.dmBitsPerPel = Color
End If
End With
p = lstrcpy(Newwinmode, Newwinmode)
SetDisplayMode = ChangeDisplaySettings(p, 0)
End Function
如果你不想改程序的话,那就把显示器分辨率再调整到1024,没有人规定软件一定要适应任何分辨率才好,DOS就一种分辨率下运行,不也长久不衰?
如果你觉得改显示器分辨率太对不起自己,那就改程序吧,说起来也没什么,做一次就知道,只要小学数学学得好就一定能搞定。
[email protected]
我发给你,
或者到网上下载