我的主窗口上就只有菜单工具栏和treeview,verticalMenu(类似工具箱的控件)两个控件,其中这两个控件对齐放在屏幕的最左边(width=3000)左右,然后其余整个屏幕均为显示区新增的每个窗口均在此区域内显示。底下还有一个statusbar控件。
问题是如何在程序运行当中保持这两个控件的拖放一致??如何让最大化后或者还原后能成比例缩放。
把问题简单化能解决也送分!!!!!
假设我把屏幕定死,即最大化显示,然后再formload事件里面写完其坐标确定,
但这样不同的分辨率下又会出错。800*600和1024*768不能互用。
简单点的问题是:我如何知道当前系统的分辨率??
还有为什么我的statusbar总是被其它控件所遮住???
谢谢(三日内有效结贴)
8 个解决方案
#1
没看懂,可以在form_resize中自定义大小啊
#2
Private Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long
Const SM_CXSCREEN = 0
Const SM_CYSCREEN = 1
Private Sub Form_Load()
Dim x As String
Dim y As String
n = Str(GetSystemMetrics(SM_CXSCREEN))
y = Str(GetSystemMetrics(SM_CYSCREEN))
Label1.Caption = "当前的显示器的分辨率是:" + n + "x" + y
End Sub
Const SM_CXSCREEN = 0
Const SM_CYSCREEN = 1
Private Sub Form_Load()
Dim x As String
Dim y As String
n = Str(GetSystemMetrics(SM_CXSCREEN))
y = Str(GetSystemMetrics(SM_CYSCREEN))
Label1.Caption = "当前的显示器的分辨率是:" + n + "x" + y
End Sub
#3
控件按比例缩放你可以搜索一下以前的帖子,很多的。
statusbar被遮住应该是你的坐标位置计算不正确。是代码的问题
statusbar被遮住应该是你的坐标位置计算不正确。是代码的问题
#4
对窗体中所有控件有效,不需要针对单独某个控件进行调整。
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 TControlInfo
Private Sub Form_Load()
mlngW = Form1.Width
mlngh = Form1.Height
'±£´æ¿Ø¼þµÄ״̬
ReDim SaveCtrl(Form1.Controls.Count - 1) As TControlInfo
Dim i As Integer
Dim ctrl As Control
For i = 0 To Form1.Controls.Count - 1
Set ctrl = Form1.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 Sub
Private Sub Form_Resize()
On Error Resume Next
Dim lngW As Long
Dim lngh As Long
Dim lngf As Single
Dim i As Integer
lngW = Form1.Width
lngh = Form1.Height
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
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 TControlInfo
Private Sub Form_Load()
mlngW = Form1.Width
mlngh = Form1.Height
'±£´æ¿Ø¼þµÄ״̬
ReDim SaveCtrl(Form1.Controls.Count - 1) As TControlInfo
Dim i As Integer
Dim ctrl As Control
For i = 0 To Form1.Controls.Count - 1
Set ctrl = Form1.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 Sub
Private Sub Form_Resize()
On Error Resume Next
Dim lngW As Long
Dim lngh As Long
Dim lngf As Single
Dim i As Integer
lngW = Form1.Width
lngh = Form1.Height
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
#5
你可以先在800*600的环境下设置好位置。然后就在程序里判断是否是1024*768
。如果是1024*768。就写一段代码控制在这个环境下的位置就好了。
你的stattusbar在右键菜单中选择移至顶层就好了。
。如果是1024*768。就写一段代码控制在这个环境下的位置就好了。
你的stattusbar在右键菜单中选择移至顶层就好了。
#6
谢谢金,这个API确实能得到分辨率的大小.
非常感谢你给我的代码,改了一下可以用.spfanghong的代码让我掌握了一种新的方法,再次感谢!
但还有一个问题?
如何能保证我的treeview和vercitalMenu拖拉时同步?即本来它们的width是相等的.
请回答看看,如果可以的话请帮帮忙!!
对了,bjiao确实可以让statusbar置前,谢谢!!
非常感谢你给我的代码,改了一下可以用.spfanghong的代码让我掌握了一种新的方法,再次感谢!
但还有一个问题?
如何能保证我的treeview和vercitalMenu拖拉时同步?即本来它们的width是相等的.
请回答看看,如果可以的话请帮帮忙!!
对了,bjiao确实可以让statusbar置前,谢谢!!
#7
你说的拖拉同步是什么意思?是不是用SPLITER那种效果?
#8
我不知道spliter,就是指拖拉一个控件另一个控件也有同样的动作.
即保持一致.
即保持一致.
#1
没看懂,可以在form_resize中自定义大小啊
#2
Private Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long
Const SM_CXSCREEN = 0
Const SM_CYSCREEN = 1
Private Sub Form_Load()
Dim x As String
Dim y As String
n = Str(GetSystemMetrics(SM_CXSCREEN))
y = Str(GetSystemMetrics(SM_CYSCREEN))
Label1.Caption = "当前的显示器的分辨率是:" + n + "x" + y
End Sub
Const SM_CXSCREEN = 0
Const SM_CYSCREEN = 1
Private Sub Form_Load()
Dim x As String
Dim y As String
n = Str(GetSystemMetrics(SM_CXSCREEN))
y = Str(GetSystemMetrics(SM_CYSCREEN))
Label1.Caption = "当前的显示器的分辨率是:" + n + "x" + y
End Sub
#3
控件按比例缩放你可以搜索一下以前的帖子,很多的。
statusbar被遮住应该是你的坐标位置计算不正确。是代码的问题
statusbar被遮住应该是你的坐标位置计算不正确。是代码的问题
#4
对窗体中所有控件有效,不需要针对单独某个控件进行调整。
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 TControlInfo
Private Sub Form_Load()
mlngW = Form1.Width
mlngh = Form1.Height
'±£´æ¿Ø¼þµÄ״̬
ReDim SaveCtrl(Form1.Controls.Count - 1) As TControlInfo
Dim i As Integer
Dim ctrl As Control
For i = 0 To Form1.Controls.Count - 1
Set ctrl = Form1.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 Sub
Private Sub Form_Resize()
On Error Resume Next
Dim lngW As Long
Dim lngh As Long
Dim lngf As Single
Dim i As Integer
lngW = Form1.Width
lngh = Form1.Height
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
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 TControlInfo
Private Sub Form_Load()
mlngW = Form1.Width
mlngh = Form1.Height
'±£´æ¿Ø¼þµÄ״̬
ReDim SaveCtrl(Form1.Controls.Count - 1) As TControlInfo
Dim i As Integer
Dim ctrl As Control
For i = 0 To Form1.Controls.Count - 1
Set ctrl = Form1.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 Sub
Private Sub Form_Resize()
On Error Resume Next
Dim lngW As Long
Dim lngh As Long
Dim lngf As Single
Dim i As Integer
lngW = Form1.Width
lngh = Form1.Height
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
#5
你可以先在800*600的环境下设置好位置。然后就在程序里判断是否是1024*768
。如果是1024*768。就写一段代码控制在这个环境下的位置就好了。
你的stattusbar在右键菜单中选择移至顶层就好了。
。如果是1024*768。就写一段代码控制在这个环境下的位置就好了。
你的stattusbar在右键菜单中选择移至顶层就好了。
#6
谢谢金,这个API确实能得到分辨率的大小.
非常感谢你给我的代码,改了一下可以用.spfanghong的代码让我掌握了一种新的方法,再次感谢!
但还有一个问题?
如何能保证我的treeview和vercitalMenu拖拉时同步?即本来它们的width是相等的.
请回答看看,如果可以的话请帮帮忙!!
对了,bjiao确实可以让statusbar置前,谢谢!!
非常感谢你给我的代码,改了一下可以用.spfanghong的代码让我掌握了一种新的方法,再次感谢!
但还有一个问题?
如何能保证我的treeview和vercitalMenu拖拉时同步?即本来它们的width是相等的.
请回答看看,如果可以的话请帮帮忙!!
对了,bjiao确实可以让statusbar置前,谢谢!!
#7
你说的拖拉同步是什么意思?是不是用SPLITER那种效果?
#8
我不知道spliter,就是指拖拉一个控件另一个控件也有同样的动作.
即保持一致.
即保持一致.