#firemonkey #c builder #rad-studio
#firemonkey #конструктор c #rad-studio
Вопрос:
У меня есть индикатор выполнения и много задач, которые нужно выполнить. Я просто хочу увеличить значение индикатора выполнения, когда задача (функции bool и void) была завершена. Например:
changeClothes();
progressBar1->Value = 20;
eatSandwich();
progressBar1->Value = 40;
if(isWeekend()){
progressBar1->Value = 60;
ShowMessage("Weekend!");
}else
ShowMessage("Not Weekend");
haveDinner();
progressBar1->Value = 80;
timeToSleep();
progressBar1->Value = 100;
Я пытался сделать это с помощью for
, но без хороших результатов. Пытался сделать так, как я упоминал, но он делает все и показывает панель уже с value
в 100.
Ответ №1:
Попробуйте это:
for(int i = 1; i <= 100; i ){
ProgressBar1->Value = i;
Sleep(50);
Application->ProcessMessages();
}
Хотя рекомендуется вызывать ее ProcessMessages
не очень часто, так как это замедлит работу приложения. Может быть, так было бы лучше:
if(!(i % 10))
Application->ProcessMessages();
В вашем случае попробуйте сделать это следующим образом:
changeClothes();
progressBar1->Value = 20;
Application->ProcessMessages();
eatSandwich();
progressBar1->Value = 40;
Application->ProcessMessages();
if(isWeekend()){
progressBar1->Value = 60;
Application->ProcessMessages();
ShowMessage("Weekend!");
}else
ShowMessage("Not Weekend");
haveDinner();
progressBar1->Value = 80;
Application->ProcessMessages();
timeToSleep();
progressBar1->Value = 100;
Application->ProcessMessages();
Комментарии:
1. Не работает, я не могу вставить
for
весь код целиком.ProcessMessages()
для этого тоже не работает. Мне просто нужен способ «задача выполнена? Итак, 20 (или 30, 40, просто пример) к значениюProgressBar
, подождите 1 секунду и перейдите к другому «.2. После увеличения значения (позиции)
ProgressBar1
вам нужно вызватьProcessMessages()
и все. Это гарантирует, что положение индикатора выполнения обновляется в тот самый момент.3. Да, я сделал это, как показано выше, но никаких хороших результатов. Я думаю, что решение не в
for
, просто функция или что-то в этом роде, чтобы остановиться на несколько миллисекунд(sleep())
и функция, чтобы сказать «эй, сделай это, покажи», а затем перейти к следующему шагу. Для возобновления мне нужно обновить индикатор выполнения…4. Вам нужно вызывать
ProcessMessages
после каждого изменения положения панели выполнения (а не только один раз).ProcessMessages
сделает именно это — позволит приложению обрабатывать все текущие сообщения, включая сообщение об обновлении индикатора выполнения.5. Как я уже сказал: я это сделал. Я вставил
for
, функцию,ProgressBar->Value = i, Sleep, if condition
иProcessMessages()
, но никаких результатов.