![]() |
Модераторы: Snowy, MetalFan, bems, Poseidon |
![]() ![]() ![]() |
|
boobie |
|
||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 162 Регистрация: 16.9.2011 Репутация: нет Всего: нет |
Добрый день!
Давно заметил такую штуку... Создаем одну кнопку и одну метку. Вешаем вот такое событие на кнопку:
Как я представлял себе работу цикла: i:=0, выводим i, ждем одну секунду; i:=1, выводим, ждем еще одну секунду... и так до 10. Но нет. После нажатия на кнопку программа замирает на 10 секунд (это ожидаемо... ведь у нас sleep() и отсутствие многопоточности)... А уже потом показывается "10". Почему не происходит перерисовка label1? Если немного "усложнить" и добавить ProgressBar, например, так:
"Гусеница" бежит нормально, а надпись 'Форматирование диска C:\' даже не появляется. Если убрать строчку
то надпись 'Форматирование диска C:\' появится после того, как пробежит "гусеница". Почему? Пользуюсь Delphi XE3. Это сообщение отредактировал(а) boobie - 3.1.2013, 13:40 |
||||||
|
|||||||
Illusion Dolphin |
|
||||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1198 Регистрация: 3.5.2003 Репутация: 5 Всего: 63 |
Потому что
Потому что она обновляется между sleep'ами (SendMessage, а не PostMessage). Есть глупая функция delay, если на неё заменить Sleep то выглядить всё будет красиво:
Пользоваться ею в проектах - крайне не рекомендую, а просто посмотреть - пожалуйста. Application.ProcessMessages обрабатывает все сообщения, которые пришли в программу. В данном случае надо как минимум WM_PAINT и ещё что-нибудь наверное чтобы прорисовать Label. -------------------- В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен. Шифрование и организация фотографий - Photo Database 4.5 |
||||||||
|
|||||||||
northener |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1361 Регистрация: 2.9.2010 Репутация: 12 Всего: 20 |
Достаточно TLabel.Refresh или TLabel.Repaint -------------------- Но только лошади летают вдохновенно. Иначе лошади разбились бы мгновенно! |
|||
|
||||
boobie |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 162 Регистрация: 16.9.2011 Репутация: нет Всего: нет |
Спасибо!
TLabel.Repaint - все как надо... А почему без него не обойтись? Это сообщение отредактировал(а) boobie - 3.1.2013, 14:32 |
|||
|
||||
Illusion Dolphin |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1198 Регистрация: 3.5.2003 Репутация: 5 Всего: 63 |
Без него можно обойтись через потоки или Application.ProcessMessages. Просто Repaint принудительно перерисовывает контрол. -------------------- В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен. Шифрование и организация фотографий - Photo Database 4.5 |
|||
|
||||
northener |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1361 Регистрация: 2.9.2010 Репутация: 12 Всего: 20 |
Вам бы стоит почитать что-нибудь про Windows. -------------------- Но только лошади летают вдохновенно. Иначе лошади разбились бы мгновенно! |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |