Страница: 1 | 2 |
Вопрос: ПОЧЕМУ НЕ РАБОТАЕТ С ДРОБНЫМИ ЦИФРАМИ?
Добавлено: 04.11.04 16:19
Автор вопроса: Slavian | ICQ: 342202174
вот такой вопрос... или цепь вопросов...
как замедлить цикл с
Do
Loop
???
я сделал
Do
Shape1.left = shape1.left + 1
DoEvents
Loop
Для примера, но это очень быстро... писал вместо 1 - 0.5, но картинка не движется писал + x, где x as single, тоже никак, писал +1/3 тоже не идёт... а с 1 норм...
и ещё как сделать чтобы картинка не мерцала при пепремещении?
P.S. Я бы обошёлся таймером =( но у него Interval дробный тоже не ставится
Ответы
Всего ответов: 18
Номер ответа: 1
Автор ответа:
ole
Вопросов: 2
Ответов: 16
Профиль | | #1
Добавлено: 04.11.04 16:54
замедлить цикл? зачем не понятно, но используй в теле цикла тогда sleep
а картинку, чтобы не мерцала, лучше двигать через move
Номер ответа: 2
Автор ответа:
ZagZag
ICQ: 295002202
Вопросов: 87
Ответов: 1684
Профиль | | #2
Добавлено: 04.11.04 17:20
Dim lngIndex As Long
Dim tmr As Double ' Дробный тип, довольно точный
Do Until lngIndex = 10
tmr = Timer
Do Until Timer > tmr + 0.5
DoEvents
Loop
lngIndex = lngIndex + 1
Debug.Print "Ja-ja, sehr gut!"
Loop
End Sub
Номер ответа: 3
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #3
Добавлено: 04.11.04 18:18
не работает с дробными, т.к. на пол пикселя еще никто ничего не перемещал
Номер ответа: 4
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #4
Добавлено: 04.11.04 18:36
Shape1.left не может быть дробным, когда ты "присваиваешь" ему дробное значение, он всё равно отбросит твою дробную часть, поэтому надо менять переменную:
x = Shape1.Left
Do
x = x + 0.001
Shape1.Move x
DoEvents
Loop
Поменяешь 0,001 на 0,01 - побежит в 10 раз быстрее
Номер ответа: 5
Автор ответа:
ISpy
Разработчик Offline Client
Вопросов: 47
Ответов: 621
Web-сайт:
Профиль | | #5
Добавлено: 04.11.04 18:54
Номер ответа: 6
Автор ответа:
Slavian
ICQ: 342202174
Вопросов: 2
Ответов: 14
Профиль | | #6
Добавлено: 04.11.04 19:26
Private Sub Form_Load()
Dim lngIndex As Long
Dim tmr As Double ' Дробный тип, довольно точный
Do Until lngIndex = 10
tmr = Timer
 o Until Timer > tmr + 0.5
 oEvents
Loop
lngIndex = lngIndex + 1
 ebug.Print "Ja-ja, sehr gut!"
Loop
End Sub
1. Ччто за объект Debug?
2. Если в Do Loop, есть ещё Do Loop то писатьь в каждом цикле не обязательно DoEvents не обязательно?
Ок, буду пользоваться shape1.move
Номер ответа: 7
Автор ответа:
Black Dragon
ICQ: 321186096
Вопросов: 30
Ответов: 347
Web-сайт:
Профиль | | #7
Добавлено: 04.11.04 21:16
Debug - это объект Immediate (для отладки программы). У него есть метод Print, т. е. написать в Immediate что-нибудь
Номер ответа: 8
Автор ответа:
ZagZag
ICQ: 295002202
Вопросов: 87
Ответов: 1684
Профиль | | #8
Добавлено: 05.11.04 03:12
Инцидент-то исчерпан?
Slavian, ты бы еще спросил как переводтся "Ja-ja, sehr gut!"
Номер ответа: 9
Автор ответа:
Slavian
ICQ: 342202174
Вопросов: 2
Ответов: 14
Профиль | | #9
Добавлено: 05.11.04 10:18
Почти, тока почему картинка всё равно мерцает при shape1.move ?
Номер ответа: 10
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #10
Добавлено: 05.11.04 13:11
Какая картинка? Репина что-ли? Код можешь показать?
Номер ответа: 11
Автор ответа:
Slavian
ICQ: 342202174
Вопросов: 2
Ответов: 14
Профиль | | #11
Добавлено: 05.11.04 21:16
не картинка а фигура если уж те так важно
ну допустим
dim x as double
Private sub form_load()
x=0
shape1.left=0
shape1.top=3000
do
x=x+0.01
shape1.move x
doevents
loop
достатотчно?
Номер ответа: 12
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #12
Добавлено: 05.11.04 22:17
Специально сделал рамку в полэкрана, чтобы перерисовывать тяжелей было, сделал другого цвета, чем форма, чтоб заметней было, если мерцает, и не поверишь: не мерцает
К тому же этот код, что ты привел, ничего показывать не может принципиально, т.е. перед Do-Loop хотя бы Me.Show вставь, а то и до прорисовки формы с shape'ом дело не дойдёт, так и будет в цикле крутиться. Это не пример рабочего кода. Или ты думаешь, что я в твоём коде что-то сворую? Думаешь, там есть что-то чего я не знаю, твой ноу-хау?
А мерцать может, если кроме этого цикла, выполняются ещё какие-то операции, требующие машинного времени, и на рисование рамки меньше остается времени. Но раз твой код настолько секретен, то остается развести руками ))
Номер ответа: 13
Автор ответа:
Slavian
ICQ: 342202174
Вопросов: 2
Ответов: 14
Профиль | | #13
Добавлено: 06.11.04 12:07
Private sub command1_click()
do
x=x+0.01
shape1.move x
doevents
loop
end sub
так будет работатьъ
а какого Х у меня тогда мерцает?
Номер ответа: 14
Автор ответа:
Slavian
ICQ: 342202174
Вопросов: 2
Ответов: 14
Профиль | | #14
Добавлено: 06.11.04 12:15
Dim x As Double
Private Sub Command1_Click()
Do
DoEvents
x = x + 0.01
Shape1.Move x
Loop
End Sub
Private Sub Form_Load()
Me.WindowState = 2
Shape1.Left = 0
Shape1.Top = 4000
End Sub
P.S. Shape1 - прямоугольник размером 3135х2415 белого цвета, причём чем больше х поставить тем больше и интенсивнее будут полоски
Номер ответа: 15
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #15
Добавлено: 06.11.04 12:55
Сделал рамку 10500х8500, белого цвета, для х сделал приращение по 0.1, опять не мерцает
Если никаких других операций не производится пока движется рамка, то остаётся только железо поменять на более быстродействующее