关于vb控件拖动!!!!!求教 在线等 急急急!谢谢
我采用如下方法 在form上拖动1个控件Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function ReleaseCapture Lib "user32" () As Long
Private Const SC_MOVE = &HF010&
Private Const WM_SYSCOMMAND = &H112
Private Const HTCAPTION = 2
ReleaseCapture
Call SendMessage(Command1.hwnd, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0)
请问一下 我现在要实现的是拖动控件1 让控件2跟随移动 有办法吗?
谢谢高人!!! --------------------编程问答-------------------- 可以结合为组。
--------------------编程问答-------------------- 能不能说详细点 或者给个代码 万分感谢 --------------------编程问答-------------------- 直接用控件的move方法就可以了。
不必调用API的 --------------------编程问答-------------------- 抱歉,没仔细看。
你要拖动的话,用drag and drop。也不需要用API的。
具体可查MSDN的VB用户手册里关于拖放那一章。 --------------------编程问答-------------------- 看看drag and drop这方面 --------------------编程问答-------------------- 把要拖放的控件放到picture里,如果不想让用户看出来看到picture里,可以将picture的边框设置为none
然后拖动picture控件即可。
天狼工作室 http://www.j2soft.cn/ --------------------编程问答--------------------
Option Explicit
Private bMoveing As Boolean
Private Sub Init_Ctrl()
With tvw
.Nodes.Add , tvwFirst, "first", "第一节点"
End With
With lvw
.GridLines = True
.View = lvwReport
.ColumnHeaders.Add 1, "first", "第一列", .Width / 4
.ColumnHeaders.Add 2, "second", "第二列", .Width / 4
.ColumnHeaders.Add 3, "third", "第三列", .Width / 4
.ColumnHeaders.Add 4, "forth", "第四列", .Width / 4
End With
With pbxV
.Visible = False
End With
End Sub
Private Sub Form_Load()
Call Init_Ctrl
End Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, x As Single, Y As Single)
With Screen
.MousePointer = 0
End With
End Sub
Private Sub Form_Resize()
With Me
If .ScaleHeight = 0 Or .ScaleWidth = 0 Then Exit Sub
End With
With tvw
.Top = 60
.Left = 60
.Height = Me.ScaleHeight - 120
End With
With imgSpliter
.Left = tvw.Left + tvw.Width
.Top = tvw.Top
.Width = 60
.Height = tvw.Height
End With
With lvw
.Left = tvw.Left + tvw.Width + 60
.Top = tvw.Top
.Height = tvw.Height
End With
With pbxV
.Top = tvw.Top
.Height = tvw.Height
.Left = imgSpliter.Left + imgSpliter.Width
End With
End Sub
Private Sub imgSpliter_MouseDown(Button As Integer, Shift As Integer, x As Single, Y As Single)
With imgSpliter
pbxV.Move .Left, .Top, .Width - 20, .Height - 20
End With
pbxV.Visible = True
bMoveing = True
End Sub
Private Sub imgSpliter_MouseMove(Button As Integer, Shift As Integer, x As Single, Y As Single)
Screen.MousePointer = 9
With imgSpliter
pbxV.Move .Left + .Width + x, .Top, .Width - 20, .Height - 20
End With
End Sub
Private Sub imgSpliter_MouseUp(Button As Integer, Shift As Integer, x As Single, Y As Single)
With pbxV
.Visible = False
End With
Call Size_Ctrl
End Sub
Private Sub lvw_MouseMove(Button As Integer, Shift As Integer, x As Single, Y As Single)
Screen.MousePointer = 0
End Sub
Private Sub tvw_MouseMove(Button As Integer, Shift As Integer, x As Single, Y As Single)
Screen.MousePointer = 0
End Sub
Private Sub Size_Ctrl()
With tvw
.Width = pbxV.Left - .Left
End With
With imgSpliter
.Left = tvw.Left + tvw.Width
End With
With lvw
.Left = pbxV.Left + pbxV.Width
End With
End Sub
'窗体中放置一个TreeView名为tvw,一个ListView名为lvw,一个PictureBox名为pbxV,一个Image名为imgSpliter
这段代码,未经严格测试,只是本人闲暇时间写的,楼主可以大概看下.
另外VB IDE本身是有示例的. --------------------编程问答--------------------
对,可以放在picture里 --------------------编程问答-------------------- 我在7楼的代码可能不符合你的拖动,那段属于拉伸. --------------------编程问答-------------------- 控件有专门的拖到事件,你可以在被拖动的控件的事件中修改另一个控件的Left和Top属性。即可实现拖动一个控件,另一个控件也跟着移动的效果。 --------------------编程问答--------------------
Option Explicit
Dim cX As Long
Dim cY As Long
Private Sub Form_DragDrop(Source As Control, X As Single, Y As Single)
Source.Move X - cX, Y - cY
End Sub
Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Picture1.Drag 1
cX = X: cY = Y
End Sub
Private Sub Picture1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
Picture1.Drag 2
End Sub
补充:VB , 控件