Страница: 1 |
Страница: 1 |
Вопрос: Строку состояния сделать
Добавлено: 16.02.08 23:59
Автор вопроса: Zahar | Web-сайт:
Я хочу в своей программе сделать строку состояния, которая бы отраждала текущее действие программы.
Бросил на форму Label1.
Написал программный код типа:
Label1.Caption="Программа выполняет действие №1"
<...програмный код...>
Label1.Caption="Программа выполняет действие №2"
<...програмный код...>
Label1.Caption="Программа выполняет действие №3"
<...програмный код...>
Label1.Caption="Программа завершила свою работу"
End
Но почему-то значения на Label1 либо меняются не своевременно, либо вообще не меняются. Хотя если запустить программу в пошаговом режиме, они меняются, как положено. такое ощущение, что Label1 просто не успевает сменить значение за ходом программы. Поясните, что я сделал не так, как сделать правильно.
Ответы
Всего ответов: 7
Номер ответа: 1
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #1
Добавлено: 17.02.08 01:12
Label1.Caption="Программа выполняет действие №1"
Label1.Refresh
<...програмный код...>
...
Номер ответа: 2
Автор ответа:
Администратор
ICQ: 278109632
Вопросов: 42
Ответов: 3949
Web-сайт:
Профиль | | #2
Добавлено: 17.02.08 01:15
А вообще есть славный контрол StatusBar
Номер ответа: 3
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #3
Добавлено: 17.02.08 09:38
Label1.Caption="Программа выполняет действие №1"
DoEvents
<...програмный код...>
Label1.Caption="Программа выполняет действие №2"
DoEvents
<...програмный код...>
Label1.Caption="Программа выполняет действие №3"
DoEvents
<...програмный код...>
Label1.Caption="Программа завершила свою работу"
DoEvents
Номер ответа: 4
Автор ответа:
VβÐUηìt
Вопросов: 246
Ответов: 3333
Web-сайт:
Профиль | | #4
Добавлено: 17.02.08 10:10
Label1 не меняется, так как прога не вызывает перерисовку всего окна. Оператор DoEvents не только выполняет прорисовку окна, но еще пропускает события пользователя (можно сделать кнопку отмена) и замедляет работу программы в том месте, где он стоит. Но без него туго, поэтому его и юзают)))
Номер ответа: 5
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #5
Добавлено: 17.02.08 13:27
можешь объяснить почему?
Номер ответа: 6
Автор ответа:
Администратор
ICQ: 278109632
Вопросов: 42
Ответов: 3949
Web-сайт:
Профиль | | #6
Добавлено: 17.02.08 14:40
потому что освобождается процессорное время для системных событий
Номер ответа: 7
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #7
Добавлено: 17.02.08 16:57
Наверняка я скажу всем известный факт, но цикл с DoEvents можно ускорить при помощи АПИ
Private Const QS_SENDMESSAGE As Long = &H40
Private Const QS_PAINT As Long = &H20
Private Const QS_TIMER As Long = &H10
Private Const QS_POSTMESSAGE As Long = &H8
Private Const QS_MOUSEBUTTON As Long = &H4
Private Const QS_MOUSEMOVE As Long = &H2
Private Const QS_HOTKEY As Long = &H80
Private Const QS_KEY As Long = &H1
Private Const QS_ALLINPUT As Long = (QS_SENDMESSAGE Or QS_PAINT Or QS_TIMER Or QS_POSTMESSAGE Or QS_MOUSEBUTTON Or QS_MOUSEMOVE Or QS_HOTKEY Or QS_KEY)
Public Sub DoEventsEx()
If GetQueueStatus(QS_ALLINPUT) Then DoEvents
End Sub