Need help!!!

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
intell
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 15.02.2004 (Вс) 1:49

Need help!!!

Сообщение intell » 18.05.2004 (Вт) 17:21

Люди, помогите! Нужно сделать так, чтобы картинка, находящаяся в пикчебоксе
двигалась только в ней, то есть не скравалась частично за ее бордером.
Есть код на передвижение. Визуально, передвижение должно быть таким же:

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 Sub ReleaseCapture Lib "User32" ()
Private Const WM_NCLBUTTONDOWN = &HA1
Private Const HTCAPTION = 2
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, x As Single, Y As Single)
Dim ReturnValue As Long
If Button = 1 Then
Call ReleaseCapture
ReturnValue = SendMessage(KARTINKA.hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&)
End If
End Sub

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 19.05.2004 (Ср) 9:35

С таким кодом это не выйдет.
Нужно использовать MouseMove. Набросок кода такой (Picture1 - контейнер, Image1 - картинка)
Код: Выделить всё
Option Explicit

Private X0 As Single, Y0 As Single, fMoved As Boolean, fBusy As Boolean

...

Private Sub Image1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button <> 1 Then Exit Sub
fMoved = True
X0 = X
Y0 = Y
End Sub

Private Sub Image1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim DX As Single, DY As Single
If fBusy Then Exit Sub
If Button <> 1 Then Exit Sub
fBusy = True
DX = X - X0
DY = Y - Y0
If Image1.Left + DX < Picture1.ScaleLeft Then DX = Picture1.ScaleLeft - Image1.Left
If Image1.Top + DY < Picture1.ScaleTop Then DY = Picture1.ScaleTop - Image1.Top
If Image1.Left + Image1.Width + DX > Picture1.ScaleLeft + Picture1.ScaleWidth Then DX = (Picture1.ScaleLeft + Picture1.ScaleWidth) - (Image1.Left + Image1.Width)
If Image1.Top + Image1.Height + DY > Picture1.ScaleTop + Picture1.ScaleHeight Then DY = (Picture1.ScaleTop + Picture1.ScaleHeight) - (Image1.Top + Image1.Height)
Image1.Move Image1.Left + DX, Image1.Top + DY
fBusy = False
End Sub

Private Sub Image1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button <> 1 Then Exit Sub
fMoved = False
End Sub
Lasciate ogni speranza, voi ch'entrate.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5

    TopList