VB 怎么改变窗口大小

caoyuanshenju 2010-12-09 09:30:57
rt,比如,运行exe 的时候最大化,里面的控件也会跟着变,或者拖动的时候会按相应比例改变。。。
...全文
798 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
贝隆 2010-12-09
  • 打赏
  • 举报
回复

Option Explicit
Dim K_X As Double
Dim K_Y As Double

'
'Private Declare Function MoveWindow Lib "user32" (ByVal hwnd As Long, _
' ByVal x As Long, _
' ByVal y As Long, _
' ByVal nWidth As Long, _
' ByVal nHeight As Long, _
' ByVal bRepaint As Long) As Long
Private Sub Form_Load()
With Me
.Width = 4000
.Height = 3000
End With
With Command1
.Width = 1000
.Height = 800
End With
K_X = Command1.Width / Me.Width
K_Y = Command1.Height / Me.Height
End Sub

Private Sub Form_Resize()
Dim lngW As Long
Dim lngH As Long

Command1.Width = Me.Width * K_X
Command1.Height = Me.Height * K_Y

End Sub
贝隆 2010-12-09
  • 打赏
  • 举报
回复
API函数MoveWindow可以改变窗体的大小。控件也可。
lliai 2010-12-09
  • 打赏
  • 举报
回复
Private Sub Form_Load()
If WindowState <> vbMinimized Then
FrmW = Me.Width
frmH = Me.Height
'上面两句是初始化模块变量
End If
end sub



Private Sub Form_Resize()

If FrmW = 0 Or frmH = 0 Then Exit Sub

'dim MyCon as me.c
Dim sig1 As Single, sig2 As Single
sig1 = Me.Width / FrmW
sig2 = Me.Height / frmH

For I = 0 To Me.Controls.Count - 1
If (TypeOf Me.Controls(I) Is Timer) Or ((TypeOf Me.Controls(I) Is Menu)) Or ((TypeOf Me.Controls(I) Is ImageList)) Then
Else
With Me.Controls(I)
.Left = Int(.Left * sig1)
.Top = Int(.Top * sig2)
.Width = Int(.Width * sig1)
.Height = Int(.Height * sig2)
End With
End If
Next I

FrmW = Me.Width
frmH = Me.Height
choovy123 2010-12-09
  • 打赏
  • 举报
回复
帮顶 me.move属性
网上可查一下
li163 2010-12-09
  • 打赏
  • 举报
回复
参考


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
If TypeOf Obj Is ComboBox Then
Obj.Tag = Obj.Left & " " & Obj.Top & " " & Obj.Width & " " & Obj.FontSize & " "
ElseIf TypeOf Obj Is CommandButton Then
Obj.Tag = Obj.Left & " " & Obj.Top & " " & Obj.Width & " " & Obj.Height & " " & Obj.FontSize & " "
ElseIf TypeOf Obj Is Line Then
Obj.Tag = Obj.X1 & " " & Obj.X2 & " " & Obj.Y1 & " " & Obj.Y2 & " " & Obj.BorderWidth & " "
Else
Obj.Tag = Obj.Left & " " & Obj.Top & " " & Obj.Width & " " & Obj.Height & " "

End If
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 5
'读取控件的原始位置与大小
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
'根据控件的原始位置及窗体改变大小的比例对控件重新定位与改变大小
Next i

If TypeOf Obj Is ComboBox Then
Obj.FontSize = Pos(3) * ScaleY
Obj.Move Pos(0) * ScaleX, Pos(1) * ScaleY, Pos(2) * ScaleX
ElseIf TypeOf Obj Is CommandButton Then
Obj.FontSize = Pos(4) * ScaleY
Obj.Move Pos(0) * ScaleX, Pos(1) * ScaleY, Pos(2) * ScaleX, Pos(3) * ScaleY
ElseIf TypeOf Obj Is Line Then
Obj.X1 = Pos(0) * ScaleX
Obj.X2 = (Pos(1) - Pos(0)) * ScaleX + Obj.X1
Obj.Y1 = Pos(2) * ScaleY
Obj.Y2 = (Pos(3) - Pos(2)) * ScaleY + Obj.Y1
Obj.BorderWidth = Pos(4) * Sqr(ScaleX * ScaleX + ScaleY * ScaleY)
Else
Obj.Move Pos(0) * ScaleX, Pos(1) * ScaleY, Pos(2) * ScaleX, Pos(3) * ScaleY
End If
Next Obj
On Error GoTo 0
End Sub

Private Sub Form_Initialize()
Call ResizeInit(Me)
End Sub

Private Sub Form_Resize()
Call ResizeForm(Me)
End Sub
kimpkswm 2010-12-09
  • 打赏
  • 举报
回复
是比麻烦的,需要根据比例来设置窗体控件的大小的。
li163 2010-12-09
  • 打赏
  • 举报
回复
去.net版问吧
caoyuanshenju 2010-12-09
  • 打赏
  • 举报
回复
补充下我的是VB2005环境哈,一楼的不行吧
jiashie 2010-12-09
  • 打赏
  • 举报
回复
1楼的代码也是我常用的。呵呵
jumay 2010-12-09
  • 打赏
  • 举报
回复
from窗体最大化的时候,不能大于MDIForm窗体怎么设置(MDIForm是菜单主窗体)

7,785

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧