Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.09.2010, 13:26   #1
huale768
Новичок
Джуниор
 
Регистрация: 16.09.2010
Сообщений: 2
По умолчанию ProgressBar. Показать что программа работает скучающему пользователю

Здравствуйте. Помогите пожалуйста. Есть процедура, в который очень много раз выполняется цикл. при чем выполняется долго. чтобы пользователь не умер от ожидания, пытаюсь выводить в ProgressBar шкалу выполнения (да и в StatusBar тоже пыталась). все чудесно..., но если переключиться в это время на какое-нибудь другое приложение или просто свернуть форму, а потом ее развернуть - все, труба, процесс не ползет, статус бар не меняется и не понятно долго ли еще до конца. подскажите, как с этим бороться? Cтолкнулся с такой проблемой при использовании Application.ProcessMessages. - Если в цикле выполняется математическое вычисление, то результирующие данные могут быть искажены. (Или я где-то затупил с переменными).

From Stilet:
1) Не лезь в чужие темы - это наказуемо
2) Не нужно тут рекламу в подписи пихать - это наказуемо еще жестче. Для рекламы есть раздел Спам

Последний раз редактировалось Stilet; 16.09.2010 в 13:38.
huale768 вне форума Ответить с цитированием
Старый 16.09.2010, 13:46   #2
DIgorevich
Погулять вышел
Участник клуба
 
Аватар для DIgorevich
 
Регистрация: 17.05.2010
Сообщений: 1,573
По умолчанию

А саму процедуру мы телепатически должны узнать?
Никогда не знаешь, где тебе повезет... (Фрай)
DIgorevich вне форума Ответить с цитированием
Старый 16.09.2010, 16:26   #3
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Цитата:
Application.ProcessMessages. - Если в цикле выполняется математическое вычисление, то результирующие данные могут быть искажены.
Никогда с подобным не сталкивался.
По теме:
1. Есть сторонние компоненты, где есть такой ProgressBar. Просто полоска бегает туда-сюда.
2. можно установить range от 0 до ... и по-таймеру заполнять. Доходишь до конца, начинаешь сначала.
3. Можно использовать TAnimate. Если подставить свой avi-файл, то можно сделать очень эффектно.
... да способов миллион... Можно даже на панели фильм запустить, чтобы "пользователь не умер от ожидания"
_SERGEYX_ вне форума Ответить с цитированием
Старый 16.09.2010, 17:31   #4
OLEG'arh
Пользователь
 
Аватар для OLEG'arh
 
Регистрация: 23.11.2006
Сообщений: 42
По умолчанию

Я сталкивался в 7-м делфи с косяком цикла FOR

бывало в программах for i:=1 to 9 do ..... переменная i получала заначения не входящие в диапазон 1-9. возвращались кривые заначения из диапазона используемого типа.

короче)))
если используешь for попробуй заменить на While
OLEG'arh вне форума Ответить с цитированием
Старый 16.09.2010, 17:39   #5
_Engine_
Форумчанин
 
Регистрация: 29.06.2008
Сообщений: 603
По умолчанию

Цитата:
Сообщение от OLEG'arh Посмотреть сообщение
Я сталкивался в 7-м делфи с косяком цикла FOR
Очень сильно сомневаюсь, что косяк был связан непосредственно с FOR
_Engine_ вне форума Ответить с цитированием
Старый 16.09.2010, 18:08   #6
OLEG'arh
Пользователь
 
Аватар для OLEG'arh
 
Регистрация: 23.11.2006
Сообщений: 42
По умолчанию

тогда ещё писал "школьные" программы. i типа интеджер простой цикл фор. никаких сложных формул. причина неизвестна. но с тех пор стараюсь использовать while или repeat until. и тогда всё работало как задумано...
OLEG'arh вне форума Ответить с цитированием
Старый 27.09.2010, 01:24   #7
yasic
Пользователь
 
Регистрация: 27.09.2010
Сообщений: 44
По умолчанию

Попробуйте поюзать ProgressBar в TThread
yasic вне форума Ответить с цитированием
Старый 27.09.2010, 09:20   #8
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Цитата:
Сообщение от yasic Посмотреть сообщение
Попробуйте поюзать ProgressBar в TThread
Вот ведь чудесный совет обычно делается наоборот, изменения UI выполняются в главном потоке, а долгие операции в дочерних тредах.
BOBAH13 вне форума Ответить с цитированием
Старый 27.09.2010, 09:29   #9
Gambler
Игрок
Форумчанин
 
Аватар для Gambler
 
Регистрация: 29.10.2006
Сообщений: 367
По умолчанию

вообще должно хватить Application.ProcessMessages ну и на край ProgressBar.refresh.
По поводу ошибок в циклах - иногда бывают, но видно это только в дебагере. Ловил такую тему на неотлаженых приложениях. Причина - оптимизатор делфи. Да и массивы с конца считаются. А еще можно накосячить и случайно менять счетчик вылетом за пределы массива. ИМХО - ищи ошибки в коде.
Жизнь всегда игра. Но смерть - не всегда поражение.

#define true (Math.random()>0.5) //Удачной отладки
Gambler вне форума Ответить с цитированием
Старый 27.09.2010, 14:13   #10
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Цитата:
А еще можно накосячить и случайно менять счетчик вылетом за пределы массива
Угу, бывало такое, и я теперь вместо
if count = 0 then
всегда пишу
if count < 1 then
_SERGEYX_ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как работает программа и что делает dragun4ik Помощь студентам 0 23.05.2010 15:51
Не работает программа, что делать? St1mkA Помощь студентам 6 28.04.2010 20:22
Как проге показать, что поля 1 и2 связаны с кнопкой1 ,а поле 3 и 4 с кнопкой2 Mikhail91 Общие вопросы C/C++ 5 21.03.2010 21:43
Программа для веб-дизайна. Что модно, а что функционально? Web-Gangsta Свободное общение 12 03.02.2010 20:59
Как с помощью ProgressBar показать процесс загрузки файла? blackstersl Общие вопросы Delphi 5 20.03.2009 11:31