Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 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-сайт: sur.hotbox.ru/
 Профиль | | #1
Добавлено: 27.10.05 13:29
чей пример не помню, картинка летает по экрану.

Option Explicit
'На форме 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-сайт: sur.hotbox.ru/
 Профиль | | #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..

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам