|
楼主 |
发表于 2009-5-8 17:02
|
显示全部楼层
第8部分 控件与用户窗体
技巧147 窗体运行时调整控件大小
用户窗体中的控件在运行时是不能调整大小的,而在某些情况下需要在窗体运行时调整控件的大小,此时可以利用控件的MouseMove事件。
步骤1,在VBE窗口中单击菜单“插入”→“用户窗体”,在窗体中添加两个框架控件,在框架控件中间添加一个Image控件,如图所示。
步骤2,Image控件是用来在窗体运行时拖动调整框架控件大小的,所以需要在Image控件的属性窗口将BackStyle属性设置为fmBackStyleTransparent,使控件的背景为透明;将BorderStyle属性设置为fmBorderStyleNone,使控件无可见的边框线;MousePointer属性设置为fmMousePointerSizeWE,当用户把鼠标放到Image控件上时,鼠标指针的类型为东西向的双箭头。关于控件的MousePointer属性请参阅技巧141。
步骤3,在窗体中调整好控件的位置后双击Image控件写入下面的代码:- #001 Dim Abscissa As Single
- #002 Private Sub Image1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Single, ByVal y As Single)
- #003 Abscissa = x
- #004 End Sub
- #005 Private Sub Image1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Single, ByVal y As Single)
- #006 If Button = 1 Then
- #007 If Abscissa - x > Frame1.Width Or x > Frame2.Width Then Exit Sub
- #008 Frame1.Width = Frame1.Width - Abscissa + x
- #009 Image1.Left = Image1.Left - Abscissa + x
- #010 Frame2.Left = Frame2.Left - Abscissa + x
- #011 Frame2.Width = Frame2.Width + Abscissa - x
- #012 End If
- #013 End Sub
复制代码 代码解析:
第2行到第4行代码,Image控件的MouseDown事件过程,用户按下鼠标按键时发生,语法如下:
Private Sub object_MouseDown( ByVal Button As fmButton, ByVal Shift As fmShiftState, ByVal X As Single, ByVal Y As Single)
其中参数x是可选的,控件位置的横坐标,以磅为单位,从左边开始测量。
第3行代码将控件的横坐标赋给变量Abscissa。
第5行到第12行代码,Image控件的MouseMove事件过程,用户移动鼠标时该事件发生,语法如下:
Private Sub object_MouseMove( ByVal Button As fmButton, ByVal Shift As fmShiftState, ByVal X As Single, ByVal Y As Single)
其中参数Button是必需的,标识鼠标按键状态的整数值,其设置值如表格所示。
参数x是可选的,控件位置的水平坐标,以磅为单位,从左边开始测量。
在MouseMove事件过程中,当用户在窗体上按下左键移动鼠标时,调整两个框架控件的Width属性和框架2的Left属性,使其达到窗体运行时可以进行拖动调整大小的效果。
当鼠标指针在对象上移动时,MouseMove事件是连续发生的,只要鼠标位于对象的边界之内,对象就会不断的识别MouseMove事件,所以框架控件可以连续的进行拖动调整大小。
运行窗体的,选择两个框架控件的中间位置,当鼠标指针变成东西向的双箭头时按下鼠标左键拖动可以进行拖动调整框架控件的大小,如图所示。
|
|