Страница: 1 |
Страница: 1 |
Вопрос: Бегущая строка
Добавлено: 06.07.07 15:03
Автор вопроса: Andrew_nik
Написал код для бегущей строки на форме, которую назвал mega. Есть небольшая проблема - при выполнении кода экран ристмично моргает. Пробовал Application.ScreenUpdating - не помогает. Что можно сделать???
Private Sub CommandButton1_Click()
Dim a1 As String, a2 As String, a3 As String
Dim Start As Date, PauseTime As Date
mega.Label1.Caption = ""
1 a1 = Len(mega.TextBox1.Value)
a2 = Len(mega.Label1.Caption)
If a1 = a2 Then 'если уже конец :-(
Exit Sub
End If
'чего бы добавить?
a3 = Left(TextBox1.Value, a2 + 1)
Application.ScreenUpdating = False
PauseTime = 0.1 ' Set duration.
Start = timer
While timer < Start + PauseTime
Label1.Caption = a3 ' Yield to other processes.
Application.ScreenUpdating = False
mega.Repaint
Application.ScreenUpdating = True
Wend
GoTo 1
Application.ScreenUpdating = True
End Sub
Public Sub UserForm_Activate()
Me.Caption = "Бегущая строка"
Me.TextBox1.Value = "Уже пора начинать!!!"
End Sub
Ответы
Всего ответов: 7
Номер ответа: 1
Автор ответа:
EUGY
Вопросов: 0
Ответов: 454
Профиль | | #1
Добавлено: 07.07.07 20:07
...
mega.Repaint
While Timer < Start + PauseTime
Label1.Caption = a3 ' Yield to other processes.
DoEvents
' Application.ScreenUpdating = False
' mega.Repaint
' Application.ScreenUpdating = True
Wend
Номер ответа: 2
Автор ответа:
Wamark
Вопросов: 2
Ответов: 22
Web-сайт:
Профиль | | #2
Добавлено: 07.07.07 21:22
Да ниче тут не сделаеш . Когда присваиваешь свойство Textbox1.Value эта хренотень перерисовывает все полностью... Та же проблеиа была с функциями GDI API. Так и забил на это всё... Хотя с помощью фунуций API GDI попробуй (DrawText???) даж не помню. А со стандартными функциями завязывай...
Номер ответа: 3
Автор ответа:
Millenium
ICQ: 629966
Вопросов: 118
Ответов: 903
Web-сайт:
Профиль | | #3
Добавлено: 07.07.07 23:05
Form1.AutoRedraw - менять пробовал?
Длину символа или текста? Опечатка подправь textbox1.value на textbox1.text - И всё заработает!
Номер ответа: 4
Автор ответа:
EUGY
Вопросов: 0
Ответов: 454
Профиль | | #4
Добавлено: 07.07.07 23:22
Господа Wamark, RA.
Вы вообще поняли, что речь идет об Excel?
А "бегущая строка" на Label?
Если и ругать автора, то за безобразное написание цикла.
Номер ответа: 5
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #5
Добавлено: 08.07.07 04:29
Господа, не силен я в экселе, но попробую удачно вставить и свои пять копеек Смотря на код не наблюдаю ничего вроде Label1.Left (Top) соответственно ТС работает со строкой, и перемещение текста хочет добится шаманским методом изменяя саму строку которая отображается в лабеле. И пользуясь своим даром телепатии, предположу что лабел вовсе не мерцает, а именно ретмично дергается.. (т.к. в цикле именно строка меняется) нетрудно предположить что минимальный свдиг текста будет на то количество пикселей, которое занимает самый маленький знак (наверное это точка) от этого собственно и рыки при движение, и ничего не сделать...
Второй вариант использовать таки Label1.Left, но и при этом варианте возможно небольшое мерцание, на этот раз именно мерцания. Связано оно будет с прорисовкой контролов на форме.
Наиболее безглючный вариант обернуть лабел в активикс, причём так чтобы работал в отдельном потоке. Причем перемещать ессно не объект (активикс), а сам лабел в нём.
Сорр за груз, детское время давно закончилось, а я никак спать не улягусь... )))
Номер ответа: 6
Автор ответа:
EUGY
Вопросов: 0
Ответов: 454
Профиль | | #6
Добавлено: 08.07.07 18:05
Ну надо же, это просто какая-то поэзия, а не код.
Каждый в нем что-то свое находит. Это "бегушая строка" никуда не бежит, а просто с каждой итерацией добавляется по букве. Видимо, этого автор и хотел добиться. И добьется таки, дайте время.
Номер ответа: 7
Автор ответа:
Andrew_nik
Вопросов: 15
Ответов: 30
Профиль | | #7
Добавлено: 09.07.07 09:21
Спасибо за советы! Задача уже решена!