告诉我,你的心事……──用VB实现控件移动一例
?牐牬ゾ吧椋收咭灿肰B编了这么一个小东东,同时也浅谈一下VB中控件的移动问题。
?牐犖颐侵繴B中控件的移动可以在MOUSE_MOVE事件中发生。以command控件为例,一种最简单的方法就是在该事件中改变command的坐标(这也是笔者今天要介绍的方法之一)。另外,一种方法就是利用VB中的容器控件,VB中可以作为容器的基本控件有picture(图片框)、frame(框架)和最常用的窗体form。这里笔者就介绍这两种不同的方法来制作这个小程序,下面是具体操作。
#1 一、利用容器控件
?牐犘陆üこ?1,将窗体caption属性改为“告诉我,你的心事……”,并把controlbox属性设置为false,目的是屏蔽窗口的关闭、最大、最小按钮。在窗体顶部位置添加标签label1,caption属性为“Do You Love Me?”在窗体内添加一picture控件数组(具体方法就不再赘述),index值分别为0、1、2、3。并将其borderstyle属性设置为0-none,这样图片框的边框就不可见了。然后在picture1(0)控件中添加command1控件,caption属性设置为“否”,另再添加command2控件,caption为“是”。然后就是编写代码的过程了。在编写过程中,利用了api函数SetParent来实现command1控件在各个图片框间的移动。其代码如下:(^28020501a^)??
?牐燩rivate Declare Function SetParent Lib "user32" _(ByVal hWndChild As Long,ByVal hWndNewParent As Long) As Long '利用api函数setparent实现控件的移动
?牐燩rivate Sub Command1_MouseMove(Button As Integer,Shift As Integer,X As Single,Y As Single)
?牐燬tatic w 'w为picture1控件数组的索引号(即index)
?牐營f w = 3 Then w = -1
?牐爓 = w + 1
?牐燬elect Case w
?牐燙ase 0 '把command1从第一个图片框移到第二个内
?牐燙all SetParent(Command1.hWnd,Picture1(1).hWnd)
?牐燙ase 1 '把command1从第二个图片框移到第三个内
?牐燙all SetParent(Command1.hWnd,Picture1(2).hWnd)
?牐燙ase 2 '把command1从第三个图片框移到第四个内
?牐燙all SetParent(Command1.hWnd,Picture1(3).hWnd)
?牐燙ase 3 '把command1从第四个图片框移到第一个内
?牐燙all SetParent(Command1.hWnd,Picture1(0).hWnd)
?牐燛nd Select
?牐燛nd Sub
?牐燩rivate Sub Command2_Click()
?牐燛nd '结束程序
?牐燛nd Sub
?牐犝飧龀绦蛴捎诓捎昧硕喔鐾计蚩丶云淙钡闶俏薹ㄉ柚昧谋尘巴及福诒收叩恼飧龀绦蚶铮墙浔尘把丈栉撕谏ㄊ遣皇怯械阃痘∏蒦_^),并把command的style属性也设为了1-Graphical,设置了背景图案。这里顺便说一下,VB中设置的背景图案不一定要在程序的目录下,在生成.exe文件时,VB会自动加载。
#1 二、改变command1控件的坐标
?牐犜谡飧龇椒ɡ铮颐且玫絘pi函数GetCursorPos来取得鼠标的坐标。其窗体界面设置与第一种方法一样,就不再赘述了,下面就是编写代码过程:
?牐燩rivate Declare Function GetCursorPos Lib "user32"(lppoint As POINTAPI)As Long
?牐牐?Getcursorpos用于取得鼠标坐标
?牐燩rivate Type POINTAPI '定义变量类型
?牐燲 As Long
?牐燳 As Long
?牐燛nd Type
?牐燩rivate Sub Command1_MouseMove(Button As Integer,Shift As Integer,X As Single,Y As Single)
?牐燚im lppoint As POINTAPI
?牐牐г诓怀龃疤宸段У那榭鱿赂谋鋍ommand1的坐标值
?牐營f Command1.Left <> Screen.Width And Command1.Top <> Screen.Height Then
?牐燙ommand1.Left = lppoint.X + 1000 * (1 + Rnd) 'rnd 取得的0到1之间的随机数
?牐燙ommand1.Top = lppoint.Y + 500 * (1 + Rnd)
?牐燛nd If
?牐牐Ы玞ommand1按钮限制在form容器以内
?牐營f Command1.Left = Screen.Width Then
?牐燙ommand1.Left = lppoint.X - 1000 * Rnd - 500
?牐燛nd If
?牐營f Command1.Top = Screen.Height Then
?牐燙ommand1.Top = lppoint.Y - 500 * Rnd - 250
?牐燛nd If
?牐燛nd Sub
?牐燩rivate Sub Command2_Click()
?牐燛nd
?牐燛nd Sub
?牐燩rivate Sub Form_click()
?牐燙ommand1.Left = 2880
?牐燙ommand1.Top = 1920 '单击窗体按钮command1回到原位置
?牐燛nd Sub
?牐燩rivate Sub Label1_Click()
?牐燜orm_click
?牐燛nd Sub
?牐犝飧龀绦蛴氲谝桓鱿啾龋梢陨柚么疤宓谋尘巴及噶耍健俺哂兴蹋缬兴ぁ保谝恢址椒ǖ拇胂匀灰虻バ?,对一个程序而言,这一点是相当重要的。
?牐犞链耍飧龀绦蛩闶谴蠊Ω娉闪恕0阉桑甧xe文件,发给自己的梦中情人,嘿嘿,说不定还能有事半功倍的成效呢,呵呵(以上程序在Windows 98中调试通过)!