Dim bolExit As Boolean ' Выход из цикла (а то процесс висит еще после закрытия гл. формы)
Private Sub Form_Activate()
Dim vX As Integer, vY As Integer ' Значения -1/1, направление движения
Dim iStep As Integer ' Шаг смещения
Dim iSizeCaption As Integer ' Высота заголовка формы
' Начальная инициализация
vX = 1
vY = 1
iStep = 1
iSizeCaption = 380
Do
' проверка выхода за границы формы по горизонтали
If Command1.Left + Command1.Width + vX * iStep > Form1.Width Or _
Command1.Left + vX * iStep < 0 Then
' меняем направление движения на против.
vX = -1 * vX
End If
' проверка выхода за границы формы по вертикали
If Command1.Top + Command1.Height + vY * iStep > Form1.Height - iSizeCaption Or _
Command1.Top + vY * iStep < 0 Then
' меняем направление движения на против.
vY = -1 * vY
End If
' изменяем положение
Command1.Left = Command1.Left + vX * iStep
Command1.Top = Command1.Top + vY * iStep
' остановка программы для принудительной обработки сообщений,
' например: перерисовка формы
DoEvents
Loop Until bolExit
End Sub
Ограничение площади движения объекта
Подскажите пожалуйста, как ограничить площадь движения объекта по форме?
Т.е. имеется объект, который при нажатии клавиши влево или вправо двигается соответственно по форме,
и постоянно "улетает" за её пределы, надо ограничить площадь его движения. Заранее спасибо.
Цитата:
Originally posted by Midnight_shadow
Здравствуйте!
Подскажите пожалуйста, как ограничить площадь движения объекта по форме?
Т.е. имеется объект, который при нажатии клавиши влево или вправо двигается соответственно по форме,
и постоянно "улетает" за её пределы, надо ограничить площадь его движения. Заранее спасибо.
Здравствуйте!
Подскажите пожалуйста, как ограничить площадь движения объекта по форме?
Т.е. имеется объект, который при нажатии клавиши влево или вправо двигается соответственно по форме,
и постоянно "улетает" за её пределы, надо ограничить площадь его движения. Заранее спасибо.
Непонятно, чего тебе надо. Выразись яснее. Может у тебя клавиши влево и вправо просто залипают.
Наверное он не знает как поставить проверку на достижение границ формы...
Цитата:
Originally posted by SergeySV
Наверное он не знает как поставить проверку на достижение границ формы...
Наверное он не знает как поставить проверку на достижение границ формы...
Да, об этом я и спрашиваю....ну так как??=)
Например так:
Цитата:
Originally posted by SergeySV
Например так:
Например так:
Код:
Dim bolExit As Boolean ' Выход из цикла (а то процесс висит еще после закрытия гл. формы)
Private Sub Form_Activate()
Dim vX As Integer, vY As Integer ' Значения -1/1, направление движения
Dim iStep As Integer ' Шаг смещения
Dim iSizeCaption As Integer ' Высота заголовка формы
' Начальная инициализация
vX = 1
vY = 1
iStep = 1
iSizeCaption = 380
Do
' проверка выхода за границы формы по горизонтали
If Command1.Left + Command1.Width + vX * iStep > Form1.Width Or _
Command1.Left + vX * iStep < 0 Then
' меняем направление движения на против.
vX = -1 * vX
End If
' проверка выхода за границы формы по вертикали
If Command1.Top + Command1.Height + vX * iStep > Form1.Height - iSizeCaption Or _
Command1.Top + vX * iStep < 0 Then
' меняем направление движения на против.
vY = -1 * vY
End If
' изменяем положение
Command1.Left = Command1.Left + vX * iStep
Command1.Top = Command1.Top + vY * iStep
' остановка программы для принудительной обработки сообщений,
' например: перерисовка формы
DoEvents
Loop Until bolExit
End Sub
Private Sub Form_Activate()
Dim vX As Integer, vY As Integer ' Значения -1/1, направление движения
Dim iStep As Integer ' Шаг смещения
Dim iSizeCaption As Integer ' Высота заголовка формы
' Начальная инициализация
vX = 1
vY = 1
iStep = 1
iSizeCaption = 380
Do
' проверка выхода за границы формы по горизонтали
If Command1.Left + Command1.Width + vX * iStep > Form1.Width Or _
Command1.Left + vX * iStep < 0 Then
' меняем направление движения на против.
vX = -1 * vX
End If
' проверка выхода за границы формы по вертикали
If Command1.Top + Command1.Height + vX * iStep > Form1.Height - iSizeCaption Or _
Command1.Top + vX * iStep < 0 Then
' меняем направление движения на против.
vY = -1 * vY
End If
' изменяем положение
Command1.Left = Command1.Left + vX * iStep
Command1.Top = Command1.Top + vY * iStep
' остановка программы для принудительной обработки сообщений,
' например: перерисовка формы
DoEvents
Loop Until bolExit
End Sub
Большое Вам спасибо. Сейчас попробую. Ещё раз спасибо.
Ага, токо я там ошибку небольшую нашел, уже подправил - где по вертикали vX на vY надо заменить