У меня глюк с Form

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Anest
Начинающий
Начинающий
 
Сообщения: 1
Зарегистрирован: 28.02.2006 (Вт) 20:26

У меня глюк с Form

Сообщение Anest » 28.02.2006 (Вт) 20:52

В своей программе я использую следующий код:

Option Explicit
Dim n As Integer
Private Sub Command1_Click()
For n = 1 To 1500
Form1.Width = Width + 1
Form1.Height = Height + 1
Next n
For n = 1 To 1500
Form1.Width = Width - 1
Form1.Height = Height - 1
Next n
End Sub

Незадача заключается в том, что в процессе выполнения кода на месте растяжения-сжатия формы видна не форма, а просто синий цвет :( . Если кто знает, как убрать этот глюк, прошу откликнуться. Спасибо.

Vladimir!
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 19.09.2005 (Пн) 21:47
Откуда: Пермь

Сообщение Vladimir! » 28.02.2006 (Вт) 22:05

Поставь на форму 2 таймера, задай значение интервала каждому = 1
и enabled = false
Код: Выделить всё
Dim n As Integer
Private Sub Command1_Click()
Timer1.Enabled = True
n = Form1.Width
End Sub

Private Sub Timer1_Timer()
Form1.Width = Width + 100   'если надо быстрее, увеличивай это число, главное, чтоб
Form1.Height = Height + 100 'оно было кратно 1500
If Form1.Width = n + 1500 Then
Timer1.Enabled = False
Timer2.Enabled = True
End If
End Sub

Private Sub Timer2_Timer()
Form1.Width = Width - 100
Form1.Height = Height - 100
If Form1.Width = n Then
Timer2.Enabled = False
End If
End Sub

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 01.03.2006 (Ср) 7:47

Если так и хочется делать это циклами, то чтоб избежать появления "синего цвета" достаточно включить DoEvents в каждый цикл:
Код: Выделить всё
For n = 1 To 1500
    Width = Width + 1
    Height = Height + 1
    DoEvents
Next
For n = 1 To 1500
    Width = Width - 1
    Height = Height - 1
    DoEvents
Next
А я все практикую лечение травами...

CORBA
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 179
Зарегистрирован: 22.11.2003 (Сб) 13:41
Откуда: Ukraine-Crimea-Feodosia

Сообщение CORBA » 01.03.2006 (Ср) 18:04

DoEvents останавливает выполнение программы на время отсылки системных сообщений, которые как раз генерятся при попытке поменять размер окна, а так как ты своим циклом забираешь процессорное время, то они скапливаются в очередь и отрабатывают с опазданием, что и вызывает тормоза. Вообщем используй DoEvents во всех длительных циклах.
У каждой сложной задачи есть множество простых для понимания, но неправильных решений.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот, SemrushBot и гости: 41

    TopList