Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Отображение текста в StatusBar

335
15 августа 2005 года
enola
379 / / 25.01.2005
Добрый день!
Изменяю в цикле текст в панели статусбара, а он "мигает", как от этого избавиться?
 
Код:
for(int j = 0; j <= 15000; j ++) {
    Application->ProcessMessages();
    StatusBar->Panels->Items[1]->Text = "Считывается запись " + IntToStr(j) + " из 15000";
}
299
15 августа 2005 года
3D Bob
885 / / 18.04.2005
Цитата:
Originally posted by enola
Добрый день!
Изменяю в цикле текст в панели статусбара, а он "мигает", как от этого избавиться?
 
Код:
for(int j = 0; j <= 15000; j ++) {
    Application->ProcessMessages();
    StatusBar->Panels->Items[1]->Text = "Считывается запись " + IntToStr(j) + " из 15000";
}


Я думаю никак.

10
15 августа 2005 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by enola
Изменяю в цикле текст в панели статусбара, а он "мигает", как от этого избавиться?


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

Если же операция продолжительна вне зависимости от привязки к интерфейсу, можно попробовать использовать TProgressBar с отключенным свойством Smooth (как у него по умолчанию). Это тоже неспроста сделано - ступенчатое изменение полосы позволяет системе перерисовывать ее не каждый раз при изменении текущего значения, а более крупными шагами.

Если с ProgressBar-ом возиться неохота, можно попробовать взять на вооружение его способ и рисовать свое сообщение на каждый 10-1 или даже 100-й шаг цикла. Или на 128-й, например. ;)

406
15 августа 2005 года
vitaly2003s
481 / / 27.07.2004
Постарайся не выводить все 15000 раз как у тебя в коде за несколько секунд,разбей эти 15000 на 100% и тогда вывод понадобится только через 150 элементов что поверь не через каждый 1. Мерцание должно умешиться если не помогает,то увелич процентный промежуток скажем до 5-10 и т.д,а в статусе пиши "обработано 1%" и т.д. Или делай собственный контрол.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог