扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:许瑞军 来源:开发高手 2007年10月14日
关键字:
在本页阅读全文(共4页)
’给分割条控件指定所在的窗体、Label控件、分割条类型等 Public Sub Attach(f As Form, sp As Label, hv As Integer,min As Long, max As Long) Set mForm = f ’设置窗体变量 ’设置分割条控件变量为传入的Label控件 Set SplitBar = sp ’给分割条做个标记,表明这个Label是分割条 SplitBar.Tag = "SPLIT" If hv = 0 Then ’如果是水平分割条 HorV = 0 ’设置分割条类型 ’ 设置Label控件的鼠标光标为左右箭头 SplitBar.MousePointer = 9 ’最小位置与最大位置设置 If max < min + SplitBar.Width Then iMin = 100 iMax = mForm.ScaleWidth - SplitBar.Width - 100 Else iMin = min iMax = max End If Else HorV = 1 ’如果是水平分割条 ’设置Label控件的鼠标光标为上下箭头 SplitBar.MousePointer = 7 If max < min + SplitBar.Height Then iMin = 100 iMax = mForm.ScaleWidth - SplitBar.Height - 100 Else iMin = min iMax = max End If End If End Sub ’添加分割条左侧的控件 如果不是水平分割条则退出 Public Sub SetLeftBind(c As Control) If HorV = 1 Then Exit Sub AddBindControl c, 1 End Sub ’添加分割条上方的控件 如果不是垂直分割条则退出 Public Sub SetUpBind(c As Control) If HorV = 0 Then Exit Sub AddBindControl c, 2 End Sub ’添加分割条下方的控件 如果不是垂直分割条则退出 Public Sub SetDownBind(c As Control) If HorV = 0 Then Exit Sub AddBindControl c, 3 End Sub ’帮助函数 私有 往控件数组里加入一个控件 Private Sub AddBindControl(c As Control, ipos As Integer) If numControls < 10 Then ’确保控件数组不溢出 numControls = numControls + 1 Set myBindControls(numControls - 1).binControl = c myBindControls(numControls - 1).pos = ipos End If End Sub ’计算控件位置 Public Sub ArrangePosition() On Error GoTo err Dim i As Integer If HorV = 0 Then ’水平分割条 设置高度为窗体的高度 SplitBar.Height = mForm.ScaleHeight - _ SplitBar.Top - 10 Else ’垂直分割条 设置宽度为窗体的宽度 如果要将垂直分割条嵌入水平分割条中 则将此分支去掉(见本文例图) ’SplitBar.Width = mForm.ScaleWidth - SplitBar. Left - 10 End If Dim i1 As Integer Dim i2 As Integer Dim lf1 As Integer ’控件右侧或底部的边界 Dim lf2 As Integer ’控件右侧或底部的边界 ’垂直分割 找到最右端的控件 上方为i1,下方为i2 If HorV = 1 Then For i = 0 To numControls - 1 With myBindControls(i) If .pos = 2 Then If .binControl.Left + .binControl.Width > lf1 Then lf1 = .binControl.Left + .binControl.Width i1 = i End If ElseIf .pos = 3 Then If .binControl.Left + .binControl.Width > lf2 Then lf2 = .binControl.Left + .binControl.Width i2 = i End If End If End With Next i Else ’水平分割 找到最底部的控件 左边为i1,右边为i2 For i = 0 To numControls - 1 With myBindControls(i) If .pos = 0 Then If .binControl.Top + .binControl.Height > lf1 Then lf1 = .binControl.Top + .binControl.Height i1 = i End If ElseIf .pos = 1 Then If .binControl.Top + .binControl.Height > lf2 Then lf2 = .binControl.Top + .binControl.Height i2 = i End If End If End With Next i End If ’遍历控件数组进行位置计算 For i = 0 To numControls - 1 With myBindControls(i) .binControl Select Case myBindControls(i).pos Case 0 ’左侧控件 .Width = SplitBar.Left - .Left - 10 If i = i1 Then ’如果是最底部的控件 .Height = SplitBar.Top + SplitBar.Height - .Top End If Case 1 ’右侧控件 .Left = SplitBar.Left + SplitBar.Width + 10 .Width = mForm.ScaleWidth - SplitBar.Left - SplitBar.Width - 10 If i = i2 Then ’如果是最底部的控件 .Height = SplitBar.Top + SplitBar.Height - .Top End If Case 2 ’上方控件 .Height = SplitBar.Top - .Top - 10 If i = i1 Then ’如果是最右侧的控件 .Width = SplitBar.Left + SplitBar.Width - .Left End If Case 3 ’下方控件 .Top = SplitBar.Top + SplitBar.Height + 10 .Height = mForm.ScaleHeight - SplitBar.Top- SplitBar.Height - 10 If i = i2 Then ’如果是最右侧的控件 .Width = SplitBar.Left + SplitBar.Width - .Left End If End Select End With Next i err: End Sub |
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者