Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

Страница: 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
Private Sub Form_Load()
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-сайт: hw.t-k.ru
 Профиль | | #3
Добавлено: 04.11.04 18:18
не работает с дробными, т.к. на пол пикселя еще никто ничего не перемещал ;)

Ответить

Номер ответа: 4
Автор ответа:
 cresta



Вопросов: 117
Ответов: 1538
 Профиль | | #4 Добавлено: 04.11.04 18:36
Shape1.left не может быть дробным, когда ты "присваиваешь" ему дробное значение, он всё равно отбросит твою дробную часть, поэтому надо менять переменную:

    Dim x As Single
    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-сайт: intermult.boom.ru
 Профиль | | #5
Добавлено: 04.11.04 18:54
на пол пикселя еще никто ничего не перемещал ;)
Ну это спорный вопрос, в VB есть twip, а он поменьше пикселя будет вроде ;) Хотя если смотреть с материальной точки зрения, то конечно на пол пикселя ниче нельзя двигать :)

Ответить

Номер ответа: 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
    ;Do Until Timer > tmr + 0.5
        ;DoEvents
    Loop
    lngIndex = lngIndex + 1
    ;Debug.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, опять не мерцает :(
Если никаких других операций не производится пока движется рамка, то остаётся только железо поменять на более быстродействующее

Ответить

Страница: 1 | 2 |

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



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