![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Останавливается информация о ходе выполнения процесса [D7, XP]
kyn66 © (2009-11-06 13:11:00)Добрый день, мастера. Во время загрузки данных в таблицу(процесс занимает определенное время) информирую пользователя о ходе выполнения процесса через ProgressBar и цифровую информацию в процентах http://yurec66.narod.ru/Vopros/proc.jpg. Если не совершать никаких действий, все идет нормально. Вот код обработки:
SL := TStringList.Create;
SL.LoadFromFile(ImportPath + FName);
PB1.Max := SL.Count;
PB1.Position := 0;
Nzap := 0;
NzapV := 0;
NzapC := Trunc(SL.Count/100);
for i := 0 to SL.Count - 1 do
begin
SS := SL[i];
...
// ряд некоторых операций
...
PB1.Position := PB1.Position + 1;
Inc(Nzap);
if Nzap >= NzapC then
begin
Inc(NzapV);
ProcLab.Caption := IntToStr(NzapV) + ' %';
ProcLab.Update;
Nzap := 0;
end;
// еще одна операция некоторая
end;
SL.Destroy;
PB1.Position := 0;
Стоит только перключиться на другое окно или это в фоне сделает любая юругая программа(т.е. окно с прогрессом теряет фокус) - прогресс сразу же замирает, цифры процентов не меняются. СОздается впечатление, что прога зависла, хотя процесс обработки данных выполняется. Как это выличить? ЧТобы и при потере фокуса прогресс с процентами не переставали информировать юзера?
Anatoly Podgoretsky (2009-11-06 14:38:00) [101]> kyn66 (06.11.2009 13:53:07) [7]
Ну так статья его собственность, а сообщение на форуме принадлежит форуму и он защищается от подчисток.
kyn66 (2009-11-06 14:36:00) [102]
> Впрочем "AVI-шным часикам", если ты имешь ввиду TAnimate,
> эта строчка нафих не нужна, если Animate.Timers = False.
>
Честно говоря на это свойство никогда не обращал внимания. Оно по умолчанию False. Из доки на ангельском сумел понять , что если False, то анимация выполняется отдельным потоком? И получается тогда Application.ProcessMessagesникчему? Но ведь не тикали то... Я обычно вешал эти часики на инфо-формочку, типа того:
MesFrm := TMesFrm.Create(nil);
MesFrm.Lab1.Caption := 'Формируется документ, ожидайте...';
MesFrm.Show;
MesFrm.Update;
for i := 0 to 2500 do
begin
// некий код
end;
MesFrm.Hide;
MesFrm.Free;
Подразумевается , что TAnimate.Active := True;? все остальное по дефолту.
Сергей М. (2009-11-06 14:21:00) [103]
> А прокатит
А куда оно денется !)
Впрочем "AVI-шным часикам", если ты имешь ввиду TAnimate, эта строчка нафих не нужна, если Animate.Timers = False.
kyn66 (2009-11-06 14:15:00) [104]Ясно. А прокатит это если на информационной формочке AVI-шные часики положить. Помню раньше была такая идея, но каждый раз затыкалась, т.к. часики не анимировались.
Сергей М. (2009-11-06 14:11:00) [105]В цикле конечно же.
kyn66 (2009-11-06 14:09:00) [106]
> Сергей М. © (06.11.09 14:03) [14]
Кстати, я вот ща подумал, что обновление меки процентов ProcLab.Update;у меня в цикле выполнялось. А ща я вместо этого поставил Application.ProcessMessagesЭто тоже должно быть в цикле или достаточно 1 раз вызвать перед началом цикла?
Сергей М. (2009-11-06 14:03:00) [107]
> Кто он?
Ну как кто ?
Тот у которого мысль в голове, разумеется)
Сергей М. (2009-11-06 14:01:00) [108]
> Леонид Ильич не чурался
Дык ыть у него и амплуа другое было - "трижды орденопросец")
А у меня другое - "не верь, не бойся, не проси")
sniknik (2009-11-06 14:00:00) [109]> все нормальные форумы предоставляют такую возможность.
почему ты тогда здесь, а не на одном из "нормальных"? ответь сам себе, мне не нужно, тогда может и дойдет.
и потом не надо сравнивать какой нибудь "потрепальный" форум, и технический.
kyn66 (2009-11-06 13:59:00) [110]
> Тогда он не туда зашел - ему в конференцию телепатов нужно
> было)
Кто он?
kyn66 (2009-11-06 13:58:00) [111]
> Куда мне их такая куча ? Солить ?)С этим-то не знаю что
> делать, а ты меня еще к одним веригам подталкиваешь))
Ну, Леонид Ильич не чурался навешивать себе их кучу.... Главное то содержимое, а не обертка. Если человек достоин похвалы - значит должен быть пощрен! :)
Сергей М. (2009-11-06 13:57:00) [112]
> но мысль то имел в голове верную
Тогда он не туда зашел - ему в конференцию телепатов нужно было)
kyn66 (2009-11-06 13:53:00) [113]
> sniknik © (06.11.09 13:44) [4]
> > ОЧЕНЬ ОЧЕНЬ правильно. заставляет отвечать за свои
> слова, а не править все втихую задним числом.
Да не скажи, все нормальные форумы предоставляют такую возможность. Внн, некоторые тоже статьи с ошибками пишут, а после указания на оную - исправляют.... Ну ошибся человек, но мысль то имел в голове верную. Что уж теперь казнить его за это? Кто захочет - тот поймет! (Модерам - сорри за офтоп)
Сергей М. (2009-11-06 13:53:00) [114]
> еще к одому
Куда мне их такая куча ? Солить ?)
С этим-то не знаю что делать, а ты меня еще к одним веригам подталкиваешь))
Сергей М. (2009-11-06 13:50:00) [115]
> А с прогрессом как быть?
А точно так же.
Один-единственный Application.ProcessMessages заменит кучу явных обновлений.
kyn66 (2009-11-06 13:49:00) [116]
> 2Сергей М.© (06.11.09 13:18) [1]
Сергей, если бы можно было бы голосовать за представление тебя еще к одому ордену Мастера, я бы был первым. Как всегда помощь помогла. То что доктор прописал. Все работает как надо. Спасибо добрый человек!!! :)
sniknik (2009-11-06 13:44:00) [117]> т.к. здесь напроч отсутствует редактирование постов.
что есть ОЧЕНЬ ОЧЕНЬ правильно. заставляет отвечать за свои слова, а не править все втихую задним числом.
kyn66 (2009-11-06 13:42:00) [118]
> Сергей М. © (06.11.09 13:18) [1]
> Вместо ЧегоТоТам.Update помести Application.ProcessMessages
> в тело цикла.
ProcLab.Update;это обновление(перерисовка) метки с процентами. Хоршо, cqxfc попробую. А с прогрессом как быть?
> "Личить" - это от слова "ликарь" ?)
Конечно же нет. Очепятка. Но это не в хорошую сторону форума будет подчеркнуто, т.к. здесь напроч отсутствует редактирование постов. Т.ч. звиняйте, если чаво не доглядел перед отправкой. ;)
sniknik (2009-11-06 13:42:00) [119]> "Личить" - это от слова "ликарь" ?)
от слова Личь (пиявка. тот кто качает но ничего не отдает взамен © emule)
Сергей М. (2009-11-06 13:18:00) [120]Вместо ЧегоТоТам.Update помести Application.ProcessMessages в тело цикла.
> выличить
"Л ичить" - это от слова "л икарь" ?)