能不能帮我调出正确的效果

baoyufu 2009-10-23 10:18:21
Option Explicit
Private ObjOldWidth As Long '保存窗体的原始宽度
Private ObjOldHeight As Long '保存窗体的原始高度
Private ObjOldFont As Single '保存窗体的原始字体比
Dim DisplayX As Integer, DisplayY As Integer, DisplayColor As Integer

'在调用ResizeForm前先调用本函数
Public Sub ResizeInit(FormName As Form)
Dim Obj As Control

ObjOldWidth = FormName.ScaleWidth
ObjOldHeight = FormName.ScaleHeight
ObjOldFont = FormName.Font.Size / ObjOldHeight
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 / ObjOldWidth
'保存窗体宽度缩放比例
ScaleY = FormName.ScaleHeight / ObjOldHeight
'保存窗体高度缩放比例
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
Obj.Font.Size = ObjOldFont * FormName.ScaleHeight
Next i


Next Obj

On Error GoTo 0
End Sub

Private Sub Form_Resize()
'确保窗体改变时控件随之改变
Call ResizeForm(Me)
End Sub

Private Sub Form_Load()
'在程序装入时必须加入
Call ResizeInit(Me)
End Sub


上面是我找到一段关于自适应分辨率的代码,但是不对的地方在于程序已运行的时候窗体就已经超出界面了
大家能不能帮我看看(问题应该在红色的那段吧)
...全文
174 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
baoyufu 2009-10-26
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 chen8013 的回复:]
已经看了,只是不想折腾这玩意儿.............


[/Quote]
帮个忙吧 谢谢啦
舉杯邀明月 2009-10-26
  • 打赏
  • 举报
回复
已经看了,只是不想折腾这玩意儿.............

baoyufu 2009-10-26
  • 打赏
  • 举报
回复
大家帮忙看下啊
baoyufu 2009-10-26
  • 打赏
  • 举报
回复
虽然没有达到想要的效果,但是帖子还是得结的
getemail 2009-10-25
  • 打赏
  • 举报
回复
up
Flyingdragon168 2009-10-25
  • 打赏
  • 举报
回复
其实分辨率的变化,也就是窗体尺寸的变化了。因为不同分辨率下,其窗体大小是不相同的,也就只各个控件尺寸需要变化,所以楼主所要想是的,如何让ToolBar尺寸变化,其实楼主可以参照360卫士或瑞星那样,自己设计类似ToolBar功能控件,什么事都解决了。
除非就是像上楼所讲,每种分辨率做一个窗体,但现在显示器种类太多,分辨率不只就是几种而已。
贝隆 2009-10-25
  • 打赏
  • 举报
回复
这是一个比较麻烦的问题
楼主可以准备一个控件数组,为不同的分辨率各准备一个,启动时在Main中先判断是什么分辨率,根据分辨率来启动窗体。呵呵办法老土了些,但应该有用。
baoyufu 2009-10-24
  • 打赏
  • 举报
回复
ok,其实我主要还是要满足分辨率的变化,因为我们的用户一般不需要去调整窗体的大小(都是最大化的)
所以在不同的分辨率下面ToolBar还是要变的
Flyingdragon168 2009-10-23
  • 打赏
  • 举报
回复
除了高度不能修改的控件,所有控件都是可以的(主要是ComboBox),所以让你使用fm20.dll中ComboBox。
我目前所有的项目,所有控件都基本OK了。字体大小,控件有个选项,是否缩放字体,当然,字体想完全按比例去调整,有点难,因为字体与高度或宽度根本没有一个准确的比例公式。
baoyufu 2009-10-23
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 flyingdragon168 的回复:]
LZ,给你一个我个人的自动缩放的控件,给你配了一个例子。
http://d.download.csdn.net/down/1763009/flyingdragon168
对于ComboBox控件,你要使用Microsft Forms 2.0 Object Library也就是fm20.dll动态库中控件。
日期控件,需要通过字体来控制,我是使用自己写的日期控件。
[/Quote]
有没有能控制好控件的字体和大小的?
baoyufu 2009-10-23
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 flyingdragon168 的回复:]
LZ,给你一个我个人的自动缩放的控件,给你配了一个例子。
http://d.download.csdn.net/down/1763009/flyingdragon168
对于ComboBox控件,你要使用Microsft Forms 2.0 Object Library也就是fm20.dll动态库中控件。
日期控件,需要通过字体来控制,我是使用自己写的日期控件。
[/Quote]

好的 我去看看
Flyingdragon168 2009-10-23
  • 打赏
  • 举报
回复
LZ,给你一个我个人的自动缩放的控件,给你配了一个例子。
http://d.download.csdn.net/down/1763009/flyingdragon168
对于ComboBox控件,你要使用Microsft Forms 2.0 Object Library也就是fm20.dll动态库中控件。
日期控件,需要通过字体来控制,我是使用自己写的日期控件。
king06 2009-10-23
  • 打赏
  • 举报
回复
在网上找找吧,应该很多的,我没有现成的...
baoyufu 2009-10-23
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 king06 的回复:]
对不同的分辨率下的窗体设置好不同的显示比例,当程序运行时判断是何种分辨率,然后来根据显示比例确定窗口的大小
[/Quote]

是的,是这个思路
有没有代码可以参考下
king06 2009-10-23
  • 打赏
  • 举报
回复
对不同的分辨率下的窗体设置好不同的显示比例,当程序运行时判断是何种分辨率,然后来根据显示比例确定窗口的大小
baoyufu 2009-10-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 king06 的回复:]
你这代码是改变控件位置的,根本没有改窗口大小的。

For Each Obj In FormName 遍历的是窗口内的控件,没有窗口大小调整。
[/Quote]

那要怎样才能到达自适应分辨率呢?
king06 2009-10-23
  • 打赏
  • 举报
回复
你这代码是改变控件位置的,根本没有改窗口大小的。

For Each Obj In FormName 遍历的是窗口内的控件,没有窗口大小调整。
Flyingdragon168 2009-10-23
  • 打赏
  • 举报
回复
我所有窗体,在布局上都是这样:
最顶上,一个ToolBar控件,这个控件不用缩放。
再下面,放一个Picture控件,这个控件随窗体缩放,缩放的高度要去掉ToolBar的高度。然后把窗体所有录入,显示的控件放在Picture控件中。然后调用缩放控件来缩放Picture中的控件即可。我现在都是这样使用的,窗体也不是很难看。
Flyingdragon168 2009-10-23
  • 打赏
  • 举报
回复
有些控件是不支持缩放的。
像ToolBar控件。不放在窗体底部PictureBox中。
我都是放在窗体顶部,不去缩放它,因为缩放不缩放ToolBar,影响不大。
baoyufu 2009-10-23
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 chenjl1031 的回复:]
既然是函数,将Sub改成Function。
[/Quote]
Sub和Function他们最终带来的效果都是一样的吧
加载更多回复(4)

1,451

社区成员

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

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