Перетаскивание элементов

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

Перетаскивание элементов

Сообщение Vladimir! » 27.12.2005 (Вт) 22:29

Здравствуйте! Вопрос такой:
На форме есть PictureBox1, в нем располагается PictureBox2 + другие элементы. Как сделать, чтоб PictureBox2 можно было перемещать произвольно в пределах PictureBox1 в любой участок? Остальные элементы перемещаться не должны.
P.S. Просьба не отправлять в поиск по форуму. Пример http://bbs.vbstreets.ru/download.php?id=3187 видел. Сильно все загромождено, таскаются все элементы в боксе, а разбираться в километровом коде -
:cry:
:oops:

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сообщение Alexanbar » 27.12.2005 (Вт) 23:33

Нужно, чтобы
Остальные элементы
имели в качестве контейнера Picturebox1 или корректировать положение этих элементов вручную в зависимости от Picturebox2

Vladimir!
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 19.09.2005 (Пн) 21:47
Откуда: Пермь

Сообщение Vladimir! » 28.12.2005 (Ср) 15:45

Может я вообще иду не по верному пути?
Суть в том, что на форме должна быть прямая, строится она по 2-м точкам. Так вот, в кач-ве этих точек я хочу использ-ть Picture, т.е. произвольно перемещать их в контейнере в нужное положение, а потом по их координатам проводить Line. Мало того, должна быть возможность эту Line поворачивать и растягивать, что я и собираюсь делать, перемещая Picture.
Может есть способ реализовать это проще :?:

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 28.12.2005 (Ср) 19:52

:roll:
Код: Выделить всё
Option Explicit

Private WithEvents lblLeft As Label, WithEvents lblRight As Label, lnLine As Line
Private moving As Boolean, dx As Long, dy As Long

Private Sub Form_Load()
  Me.ScaleMode = vbPixels
 
  Set lnLine = Me.Controls.Add("VB.Line", "lnLine")
  With lnLine
    .X1 = 10: .Y1 = 10
    .X2 = 200: .Y2 = 200
    .Visible = True
    .BorderColor = vbBlack
  End With
 
  Set lblLeft = Me.Controls.Add("VB.Label", "lblLeft")
  With lblLeft
    .Move 8, 8, 5, 5
    .BackColor = vbBlack
    .Visible = True
  End With
 
  Set lblRight = Me.Controls.Add("VB.Label", "lblRight")
  With lblRight
    .Move 198, 198, 5, 5
    .BackColor = vbBlack
    .Visible = True
  End With
End Sub

Private Sub lblLeft_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
  dx = Me.ScaleX(X, vbTwips, Me.ScaleMode): dy = Me.ScaleY(Y, vbTwips, Me.ScaleMode)
  moving = True
End Sub

Private Sub lblLeft_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
  If moving Then
    lblLeft.Move lblLeft.Left + Me.ScaleX(X, vbTwips, Me.ScaleMode) - dx, lblLeft.Top + Me.ScaleY(Y, vbTwips, Me.ScaleMode) - dy
    lnLine.X1 = lblLeft.Left + lblLeft.Width / 2
    lnLine.Y1 = lblLeft.Top + lblLeft.Height / 2
  End If
End Sub

Private Sub lblLeft_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
  moving = False
End Sub

Private Sub lblRight_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
  dx = Me.ScaleX(X, vbTwips, Me.ScaleMode): dy = Me.ScaleY(Y, vbTwips, Me.ScaleMode)
  moving = True
End Sub

Private Sub lblRight_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
  If moving Then
    lblRight.Move lblRight.Left + Me.ScaleX(X, vbTwips, Me.ScaleMode) - dx, lblRight.Top + Me.ScaleY(Y, vbTwips, Me.ScaleMode) - dy
    lnLine.X2 = lblRight.Left + lblRight.Width / 2
    lnLine.Y2 = lblRight.Top + lblRight.Height / 2
  End If
End Sub

Private Sub lblRight_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
  moving = False
End Sub
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Vladimir!
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 19.09.2005 (Пн) 21:47
Откуда: Пермь

Сообщение Vladimir! » 28.12.2005 (Ср) 21:42

GSerg
Спасибо!


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

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

Сейчас этот форум просматривают: Yandex-бот и гости: 93

    TopList