Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 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-сайт: kiev.ua
 Профиль | | #2
Добавлено: 07.07.07 21:22
Да ниче тут не сделаеш :-( . Когда присваиваешь свойство Textbox1.Value эта хренотень перерисовывает все полностью... Та же проблеиа была с функциями GDI API. Так и забил на это всё... Хотя с помощью фунуций API GDI попробуй (DrawText???) даж не помню. А со стандартными функциями завязывай...

Ответить

Номер ответа: 3
Автор ответа:
 Millenium



ICQ: 629966 

Вопросов: 118
Ответов: 903
 Web-сайт: www.aliyev.us
 Профиль | | #3
Добавлено: 07.07.07 23:05
Form1.AutoRedraw - менять пробовал?

1 a1 = Len(mega.TextBox1.Value)
???


Длину символа или текста? Опечатка подправь 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
Спасибо за советы! Задача уже решена!

Ответить

Страница: 1 |

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



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