VB窗体自适应有什么好的方法?

unsv29 2009-08-18 10:02:47
有什么好的控件或者是程序 请奉献一把!!!!

自适应好的方法 多谢!!!

...全文
559 39 打赏 收藏 转发到动态 举报
写回复
用AI写文章
39 条回复
切换为时间正序
请发表友善的回复…
发表回复
lingf_l 2010-05-16
  • 打赏
  • 举报
回复
厉害,这里的都是高手啊
nbabest23 2009-08-19
  • 打赏
  • 举报
回复
学习
unsv29 2009-08-19
  • 打赏
  • 举报
回复
28楼的好用啊 我再多次尝试一下!!!
jhone99 2009-08-19
  • 打赏
  • 举报
回复
见鬼了,你先用这个,我研究一下那个

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

unsv29 2009-08-19
  • 打赏
  • 举报
回复
这个问题看样子确实有难度。平时各位回答 本小菜鸟 的问题那是相当的踊跃啊。


今天咋的了???

说明什么??

说明本问题难度那是相当的大。
unsv29 2009-08-19
  • 打赏
  • 举报
回复
24楼 还是不行啊????晕了!!!!

多谢 多谢 哈哈哈 多谢

哈哈


还是image图片显示不出来。

你试一试 看看能显示么??
unsv29 2009-08-19
  • 打赏
  • 举报
回复
22楼 你以为这玩意简单啊 你稍微修改下试试!!!!
稍微修改下能搞定的话,那像jhone99这么高水平的牛人早就搞定了




你要多向jhone99学习!!!!


22楼 看你说话的语气 似乎22楼更牛???

看你表现


表现的好 本小皇帝给你个芝麻官当!OK???

jhone99 2009-08-19
  • 打赏
  • 举报
回复
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 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 & " " & Obj.FontSize & " "

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(4) * ScaleY
Obj.Move Pos(0) * ScaleX, Pos(1) * ScaleY, Pos(2) * ScaleX
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
If TypeOf Obj Is CommandButton Then Obj.FontSize = Pos(4) * ScaleY
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
unsv29 2009-08-19
  • 打赏
  • 举报
回复
回21楼



就用你19楼的代码 别的代码什么也不用 然后在窗体上加个image控件,然后将image的picture属性添加一个图片,然后将图片的stretch的属性改为true。 然后运行,结果图片没了。

如果用你8楼的代码 别的代码什么也不用 然后在窗体上加个image控件,然后将image的picture属性添加一个图片,然后将图片的stretch的属性改为true。 然后运行,结果图片可以看到,并且可以自适应。


另外:19楼的代码可以让字体大小变化

8楼的代码字体大小无法变化
无·法 2009-08-19
  • 打赏
  • 举报
回复
楼主属小皇帝类型,人家给了部分代码,也给了思路“fontsize或font.size”还在嚷嚷,其实自己稍微修改下就行了。

显示图片这个你自己就应该分析下,比如是不是autoredraw的设置问题等等。
jhone99 2009-08-19
  • 打赏
  • 举报
回复
你现在的代码贴出来
unsv29 2009-08-19
  • 打赏
  • 举报
回复
你这个代码是可以放大啊 但是把image图片给弄没了!!!显示不出图片了。

你在8楼的代码可以显示图片
jhone99 2009-08-19
  • 打赏
  • 举报
回复
这个可以改变字体大小

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 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 & " " & Obj.FontSize & " "

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(4) * ScaleY
Obj.Move Pos(0) * ScaleX, Pos(1) * ScaleY, Pos(2) * ScaleX
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.FontSize = Pos(4) * ScaleY
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
unsv29 2009-08-19
  • 打赏
  • 举报
回复
楼上各位 自适应!!!!要自适应!!!!
chinaboyzyq 2009-08-19
  • 打赏
  • 举报
回复
或者用#15楼的方式是一样的:
Command1.Font.Size = 9
Form1.Font.Size = 9
chinaboyzyq 2009-08-19
  • 打赏
  • 举报
回复
form1.FontSize=20
Command1.FontSize = 20
无·法 2009-08-19
  • 打赏
  • 举报
回复
字体的可以设置obj.font.size
unsv29 2009-08-19
  • 打赏
  • 举报
回复
那么 窗体里面的字体大小怎么办呢???
unsv29 2009-08-19
  • 打赏
  • 举报
回复
搞定啦 哈哈 用image 将strategy拉扯 改成true
unsv29 2009-08-19
  • 打赏
  • 举报
回复
最关键是如何将图片自适应!!!

因为窗体里面还有图片呢!!!!!
加载更多回复(19)

7,763

社区成员

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

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