永发信息网

如图,VB6.0做这样的窗口,如何随窗口大小改变按钮的大小?

答案:2  悬赏:50  手机版
解决时间 2021-11-15 16:12
如图,VB6.0做这样的窗口,如何随窗口大小改变按钮的大小?
最佳答案
Private Sub Form_Resize()
Dim i As Integer, w As Single, h As Single
w = Me.ScaleWidth / 5
h = Me.ScaleHeight / 5
For i = 0 To 8
    Me.Controls("Command" & i + 1).Move (i Mod 3) * 2 * w, (i  3) * 2 * h, w, h
Next
End Sub代码适用于VB6
追问我做的是用户控件(如图),代码似乎无效(一直显示要求对象)。。要怎么修改?

追答Private Sub UserControl_Resize()
Dim i As Integer, w As Single, h As Single
w = ScaleWidth / 5
h = ScaleHeight / 5
For i = 0 To 8
    Controls("Command" & i + 1).Move (i Mod 3) * 2 * w, (i  3) * 2 * h, w, h
Next
End Sub 另外建议你把那九个Command做成控件数组,这样代码可以简化,而且运行效率高:
Private Sub UserControl_Resize()
Dim i As Integer, w As Single, h As Single
w = ScaleWidth / 5
h = ScaleHeight / 5
For i = 0 To 8
    Command1(i).Move (i Mod 3) * 2 * w, (i  3) * 2 * h, w, h
Next
End Sub
全部回答

这是我收藏的部分源代码,你试一下第一个看看是不是,因为我忘记那个是了!

一、VB控件与窗口的等比缩放实现方法:

   '原始宽度
   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
 
 
Private Sub Form_Load()
Call ResizeInit(Me)      '在装入时必须加入
End Sub
 
Private Sub Form_Resize()
Call ResizeForm(Me)      '控件随之改变
End Sub
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
襄城区襄樊42摄氏度纳米生物波养生会所地址是
找直径2.2,2.6的热镀锌钢丝
伤感歌曲,一首《爱你流过多少泪》听的好心酸
上海贝乡农业科技有限公司怎么样?
中秋送新鲜人参合适吗?
有一个简约的火车游戏关于线条,类似策略
琦品私佳美场 未来国际店怎么样
炫酷联盟电玩城地址好找么,我有些事要过去,
烘焙香粉有几类?哪写是黄颜色的?
章光101是骗人的,大家不要相信它
已知a^2-8a+k是完全平方式,试求k的值
MIUI9有多强 小米5升级前后对比 结果惊人
你是泰国人吗?那9在泰语中有什么特殊意义么
别克路尊故障码;b0029
美国青少年的卧室是什么样子的?
推荐资讯
帮婶婶挪沙发她腰扭一下。然后我帮她按按腰,
长春地利生鲜超市和新天地超市哪个大?
正大广场停车场(出入口)(陆家嘴西路168号正大
临淄皇城镇曹村在张家村什么位置
广东中山盛大华企这公司怎么样?打电话叫我去
验证码中"9+9="什么意思
耶鲁本科有哪些专业
用搁、撕、溜、割写一段话,不论顺序
双登铁锂保护板15串怎么设置16串呢?进入电池
为什么我家8M的宽带和人家50M的宽带价格差不
更换轮毂应该注意哪些事项
雷克萨斯nx200t六方位绕车话术
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?