Страница: 1 |
Страница: 1 |
Вопрос: Image Move ??
Добавлено: 27.10.05 11:49
Автор вопроса: «UL.eXe» | ICQ: 197.895.916.247
Доброго времени суток,
подскажите пожалуйста:
(1) Как плавно передвигать изображение в пределах формы (не заходя за ее граници)
(2) И при прикосновении к границе формы изображение должно начинать плыть в другую сторону
зы: на подобии хранителя экрана - Летающие предметы?
Заранее спасибо!
Ответы
Всего ответов: 4
Номер ответа: 1
Автор ответа:
Sur
ICQ: 1249088
Вопросов: 10
Ответов: 304
Web-сайт:
Профиль | | #1
Добавлено: 27.10.05 13:29
чей пример не помню, картинка летает по экрану.
'На форме image1 с картинкой
'движение по таймеру
Dim FlagTimerMove As Boolean
Dim XStep As Single
Dim YStep As Single
Dim X0 As Single
Dim Y0 As Single
'всегда впереди
Private Const HWND_TOPMOST = -1
Private Const HWND_NOTOPMOST = -2
Private Const SWP_NOACTIVATE = &H10
Private Const SWP_SHOWWINDOW = &H40
Private Const SWP_NOMOVE = &H2
Private Const SWP_NOSIZE = &H1
Private Declare Sub SetWindowPos Lib "user32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long)
'двигаем форму за любое место
Dim FlagHandMove As Boolean
Dim X1 As Single
Dim Y1 As Single
Dim MeLeft As Single
Dim MeTop As Single
'выход
Private Sub Image1_DblClick()
Unload Me
End Sub
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
Unload Me
End Sub
Private Sub Form_Load()
Me.Width = Image1.Width
Me.Height = Image1.Height
SetWindowPos Me.hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE
XStep = Screen.TwipsPerPixelX * SgnRnd
YStep = Screen.TwipsPerPixelY * SgnRnd
FlagTimerMove = True
End Sub
'двигаем форму за любое место
Private Sub Image1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
FlagHandMove = True
X1 = X
Y1 = Y
FlagTimerMove = False
X0 = Me.Left
Y0 = Me.Top
End Sub
Private Sub Image1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
FlagHandMove = False
FlagTimerMove = True
End Sub
Private Sub Image1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If FlagHandMove Then
MeLeft = Me.Left + X - X1
MeTop = Me.Top + Y - Y1
If MeLeft > 0 And MeLeft < Screen.Width - Me.Width Then Me.Left = MeLeft
If MeTop > 0 And MeTop < Screen.Height - Me.Height Then Me.Top = MeTop
End If
End Sub
'движение от таймера
Private Sub Timer1_Timer()
If FlagTimerMove = True Then
If Me.Left < 0 Or Me.Left > Screen.Width - Me.Width Then XStep = -XStep
If Me.Top < 0 Or Me.Top > Screen.Height - Me.Height Then YStep = -YStep
Me.Left = Me.Left + XStep
Me.Top = Me.Top + YStep
End If
If FlagHandMove = True Then
XStep = Sgn(Me.Left - X0) * Screen.TwipsPerPixelX
YStep = Sgn(Me.Top - Y0) * Screen.TwipsPerPixelY
End If
End Sub
'генерация случайного направления
Private Function SgnRnd() As Integer
Randomize
If Int(2 * Rnd) = 0 Then SgnRnd = 1 Else SgnRnd = -1
End Function
Номер ответа: 2
Автор ответа:
«UL.eXe»
ICQ: 197.895.916.247
Вопросов: 72
Ответов: 540
Профиль | | #2
Добавлено: 28.10.05 11:12
зы: это чуть-чуть не тот пример..
этот пример демонстрирует, как перемещать форму по экрану за ресунок
зыы: а ресунок неподвижно смтрит на меня из недр формы..
Номер ответа: 3
Автор ответа:
Sur
ICQ: 1249088
Вопросов: 10
Ответов: 304
Web-сайт:
Профиль | | #3
Добавлено: 28.10.05 12:39
>это чуть-чуть не тот пример
так дальше сам!
Этот пример много чего демонстрирует, если таймер не забыть влепить на 10мс
Номер ответа: 4
Автор ответа:
«UL.eXe»
ICQ: 197.895.916.247
Вопросов: 72
Ответов: 540
Профиль | | #4
Добавлено: 28.10.05 15:38
2 Sur:
ОГО! Сенкс! Заработало я таймер ставил на 1000..