请搜索一下以前的帖子这个可能对你有用
'******************************************************
'原作者:邓勇
'收集整理:小聪明 [email protected]
'欢迎访问小聪明的主页VB版: http://coolzm.533.net
'******************************************************
'功能::窗体大小改变时窗体内的控件大小也随之动态改变
'使用方法:
'在相应的窗体程序中加入如下语句:
'---------------------------------------------------
'Private Sub Form_Load()
' Call ResizeInit(Me) '在程序装入时必须加入
'End Sub'Private Sub Form_Resize()
' Call ResizeForm(Me) '确保窗体改变时控件随之改变
'End Sub
'---------------------------------------------------
Option Explicit
Private FormOldWidth As Long '保存窗体的原始宽度
Private FormOldHeight As Long '保存窗体的原始高度
'在调用ResizeForm前先调用本函数
Public Sub ResizeInit(FormName As Form)
Dim Obj As Control
FormOldWidth = FormName.ScaleWidth
FormOldHeight = FormName.ScaleHeight
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 / FormOldWidth '保存窗体宽度缩放比例
ScaleY = FormName.ScaleHeight / FormOldHeight '保存窗体高度缩放比例
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
Next i
Next Obj
On Error GoTo 0
End Sub
'******************************************************
'原作者:邓勇
'收集整理:小聪明 [email protected]
'欢迎访问小聪明的主页VB版: http://coolzm.533.net
'******************************************************
'功能::窗体大小改变时窗体内的控件大小也随之动态改变
'使用方法:
'在相应的窗体程序中加入如下语句:
'---------------------------------------------------
'Private Sub Form_Load()
' Call ResizeInit(Me) '在程序装入时必须加入
'End Sub'Private Sub Form_Resize()
' Call ResizeForm(Me) '确保窗体改变时控件随之改变
'End Sub
'---------------------------------------------------
Option Explicit
Private FormOldWidth As Long '保存窗体的原始宽度
Private FormOldHeight As Long '保存窗体的原始高度
'在调用ResizeForm前先调用本函数
Public Sub ResizeInit(FormName As Form)
Dim Obj As Control
FormOldWidth = FormName.ScaleWidth
FormOldHeight = FormName.ScaleHeight
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 / FormOldWidth '保存窗体宽度缩放比例
ScaleY = FormName.ScaleHeight / FormOldHeight '保存窗体高度缩放比例
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
Next i
Next Obj
On Error GoTo 0
End Sub
解决方案 »
- VB6用XML对象下载网页的奇怪问题?
- ACTIVEX 如何打开一个新窗口
- MSHFlexgrid中怎样获得当前列的下一列的cellTop,cellLeft,cellWidth,cellHeight等值
- 天哪!谁来帮我解决一下有关Mscomm拨号的问题? 急!!!!!!!!!!!!!!!!!
- GetTextExtentPoint32 得到的字符大小怎么总是要小一点
- 如何让 tdbgrid 可以选择多行,以它相关的属性有那些
- 请教高手:如何设置MSFlexGrid里每列文字颜色!!!
- 关于ADODB
- 如何去掉子窗体的关闭按钮.右上角的那个X
- 用VB实现telnet?
- 关于媒体播放器控件的一些问题!多媒体高手请进!我的全部分数都送给你!!!
- 请问父子关联表内增加记录的方法。
Submitted by Nicholas L. Otley, [email protected]; www.kalamazoo.co.uk
您可以用下面给出这一小段代码检测当前屏幕分辨率,然后根据结果作出反应──例如,重新调整窗体大小以适应用程序户分辨率。Public Function CheckRez(pixelWidth As Long, pixelHeight As Long) As Boolean
'
Dim lngTwipsX As Long
Dim lngTwipsY As Long
'
' convert pixels to twips
lngTwipsX = pixelWidth * 15
lngTwipsY = pixelHeight * 15
'
' check against current settings
If lngTwipsX <> Screen.Width Then
CheckRez = False
Else
If lngTwipsY <> Screen.Height Then
CheckRez = False
Else
CheckRez = True
End If
End If
'
End FunctionNext, run the following code at the start of the program: If CheckRez(640, 480) = False Then
MsgBox "Incorrect screen size!"
Else
MsgBox "Screen Resolution Matches!"
End If
'先判断用户的显示分辨率,根据不同的分辨率调整控件的位置、大小
'显示分辨率 =
Print Screen.Width / Screen.TwipsPerPixelX
Print Screen.Height / Screen.TwipsPerPixelY
End Sub
分辨率改变后,窗体大小如何相应改变
这种做法好像很少用,大多是在程序执行的时候
把分辨率调整的合适的大小。
如何设定屏幕分辨率原始来源:??原则上,只改这一次,下一次开机会还原,但如果需重开机,才会Update
Registry中的设定,并重开机。
如果要永久设定其设定值,请将
b = ChangeDisplaySettings(DevM, 0) 改成
b = ChangeDisplaySettings(DevM, CDS_UPDATEREGISTRY)Option Explicit
Private Declare Function EnumDisplaySettings Lib "user32" Alias _
"EnumDisplaySettingsA" (ByVal lpszDeviceName As Long, _
ByVal iModeNum As Long, lpDevMode As Any) As LongPrivate Declare Function ChangeDisplaySettings Lib "user32" Alias _
"ChangeDisplaySettingsA" (lpDevMode As Any, ByVal dwflags As Long) As Long
Private Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, _
ByVal dwReserved As Long) As LongConst EWX_REBOOT = 2 ' 重开机
Const CCDEVICENAME = 32
Const CCFORMNAME = 32
Const DM_PELSWIDTH = &H80000
Const DM_PELSHEIGHT = &H100000Const DISP_CHANGE_SUCCESSFUL = 0
Const DISP_CHANGE_RESTART = 1
Const CDS_UPDATEREGISTRY = 1Private Type DEVMODE
dmDeviceName As String * CCDEVICENAME
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 * CCFORMNAME
dmUnusedPadding As Integer
dmBitsPerPel As Integer
dmPelsWidth As Long
dmPelsHeight As Long
dmDisplayFlags As Long
dmDisplayFrequency As Long
End Type
Private DevM As DEVMODEPrivate Sub Command1_Click()
Dim i As Long
Dim b As Long
Dim ans as Long
Dim a As Long a = EnumDisplaySettings(0, 0, DevM) 'Initial Setting DevM.dmFields = DM_PELSWIDTH Or DM_PELSHEIGHT
DevM.dmPelsWidth = 800 '设定成想要的分辨率
DevM.dmPelsHeight = 600
b = ChangeDisplaySettings(DevM, 0) 'Changed Only this time
If b = DISP_CHANGE_RESTART Then
ans = MsgBox("要重开机设定才能完成,重开?", vbOKCancel)
If ans = 1 Then
b = ChangeDisplaySettings(DevM, CDS_UPDATEREGISTRY)
'after this , Will Update in Registry
Call ExitWindowsEx(EWX_REBOOT, 0)
End If
Else
If b <> DISP_CHANGE_SUCCESSFUL Then
Call MsgBox("设定有误", vbCritical)
End If
End If
End Sub
const screenMode=15Screenwidth=screen.width/screenMode
Screenwidth=screen.height/screenMode
text1.text="屏幕分辩率" & screenwidth & "*" screenheight
二、
可用 一个timer来控制,如果屏幕分辩率改变了,那窗体的width与height也相应的加上一定的长度就行了。
主 题: 关于分辨率的问题 这样的问题在前面的帖子子里很多了 请按搜索 输入 分辨率 按 回车 就 可以搜到一大堆和你差不多的问题
x = Screen.Width \ Screen.TwipsPerPixelX
y = Screen.Height \ Screen.TwipsPerPixelY