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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.10.2011, 09:52   #1
max_prorok
Форумчанин
 
Регистрация: 06.10.2011
Сообщений: 181
По умолчанию Как сделать Progress Bar?

Доброго времени суток, уважаемые программисты.
Задача следующая... У меня есть программа, которая выполняет определенные действия в течение... ну примерно 7-8 минут... и для отображения этого процесса я хочу воткнуть прогресс бар... читал на форумах, пробовал вставлять, но в итоге ничего так и не заработало...
Ошибок при компиляции нет. Ошибка, связанная с ЦПУ, возникает при нажатии на кнопку... Подскажите пожалуйста как сделать программку работоспособной. Заранее спасибо.

Вот коротенький листинг.
--------------------------------------------------------------------------
void kalibr()
{

for (int q=0;q<9;q++)
{
for (int w=0;w<21;w++)
{
I=In*K[w];
//действие 1
Sleep(10000);
//действие 2
//действие 3
}
Sleep(15000);
for (int w;w>-1;w--)
{
I=In*K[w];
//действие 1
Sleep(10000);
//действие 2
//действие 3

}
Sleep(15000);
}

}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
kalibr();
}
--------------------------------------------------------------------------
Подскажите пожалуйста, что и куда надо вставить, чтобы заработало.
P.S. Черт... Забыл указать, что работаю в С++ Билдере

Последний раз редактировалось max_prorok; 20.10.2011 в 09:57.
max_prorok вне форума Ответить с цитированием
Старый 20.10.2011, 10:10   #2
max_prorok
Форумчанин
 
Регистрация: 06.10.2011
Сообщений: 181
По умолчанию

Если использовать вот такой код:
--------------------------------------------------------------------------
void kalibr()
{

for (int q=0;q<9;q++)
{
for (int w=0;w<21;w++)
{
I=In*K[w];
//действие 1
Sleep(10000);
//действие 2
//действие 3
Form1->ProgressBar1->StepIt();
}
Sleep(15000);
for (int w;w>-1;w--)
{
I=In*K[w];
//действие 1
Sleep(10000);
//действие 2
//действие 3
Form1->ProgressBar1->StepIt();
}
Sleep(15000);
}

}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
kalibr();
}
--------------------------------------------------------------------------
То вылетает вот такая ошибка:
max_prorok вне форума Ответить с цитированием
Старый 20.10.2011, 11:04   #3
JUDAS
фонатик DELPHI
Форумчанин
 
Аватар для JUDAS
 
Регистрация: 14.01.2008
Сообщений: 714
По умолчанию

Form1->ProgressBar1->Position = значение;
при этом:
1. свойства Max = 100 Min=0
2. Smooth = true (полоса прокрутни будет плавной)
3. для вычисления значения ->Position воспользуйтесь формулой:
Round(Form1->ProgressBar1->Max*текущее/всего_в_цикле)
то есть, при значении Max = 100 Min=0 и значении Вашего цикла -3..24
Код:
for (int i=-3;i<=24;i++) {
 Form1->ProgressBar1->Position = Round(Form1->ProgressBar1->Max*i/(24-(-3)));
}
95% сбоев и ошибок приложений, находится в полу метрах от монитора
JUDAS вне форума Ответить с цитированием
Старый 20.10.2011, 12:00   #4
max_prorok
Форумчанин
 
Регистрация: 06.10.2011
Сообщений: 181
По умолчанию

Цитата:
Сообщение от JUDAS Посмотреть сообщение
Form1->ProgressBar1->Position = значение;
при этом:
1. свойства Max = 100 Min=0
2. Smooth = true (полоса прокрутни будет плавной)
3. для вычисления значения ->Position воспользуйтесь формулой:
Round(Form1->ProgressBar1->Max*текущее/всего_в_цикле)
то есть, при значении Max = 100 Min=0 и значении Вашего цикла -3..24
Код:
for (int i=-3;i<=24;i++) {
 Form1->ProgressBar1->Position = Round(Form1->ProgressBar1->Max*i/(24-(-3)));
}
Так исходя из вычислений, получается, что при значении от -3 до -1 значения Position будут отрицательными. Или я чего-то недопонимаю?

а почему бы просто не подсчитать общее количество циклов, и просто внести это значение в Мах в обджект инспекторе? в моем случае Min=0 и Max=335??
max_prorok вне форума Ответить с цитированием
Старый 24.10.2011, 10:03   #5
max_prorok
Форумчанин
 
Регистрация: 06.10.2011
Сообщений: 181
По умолчанию

up.
Помогите дорешить проблему...
max_prorok вне форума Ответить с цитированием
Старый 24.10.2011, 11:05   #6
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,544
По умолчанию

передайтте ссылку на форму(или на ProgressBar) в качестве параметра
Код:
void kalibr(TForm1 formX)
и пользуйтесь для показа ДАННЫМ параметром. вместо вот этого
Form1->ProgressBar1->StepIt();
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Progress bar и кнопка Seger17 Общие вопросы Delphi 1 05.04.2011 21:07
Progress Bar Trizael Компоненты Delphi 3 07.12.2010 01:25
Progress bar SKS Компоненты Delphi 10 15.08.2009 21:09
Progress Bar без рамки. Mitron Компоненты Delphi 5 21.01.2008 16:33
Progress Bar Alexander X Компоненты Delphi 2 17.12.2007 03:18