![]() |
| ||
|
|
Новости |
Поиск |
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;
Стоит только перключиться на другое окно или это в фоне сделает любая юругая программа(т.е. окно с прогрессом теряет фокус) - прогресс сразу же замирает, цифры процентов не меняются. СОздается впечатление, что прога зависла, хотя процесс обработки данных выполняется. Как это выличить? ЧТобы и при потере фокуса прогресс с процентами не переставали информировать юзера?
Сергей М. (2009-11-07 21:50:00) [41]
> это типа Delay()?
Да.
> Ты же сказал он не нужен, если Animate.Timers = False
Так у тебя де на форме не только Animate, но и какие-то другие виз.контролы !
Их то надо обновить..
> Кого тогда конкретно слип тормозить будет?
Я же сказал - вызывающий поток. Т.е. основной в дан.случае.
А поскольку анимация выполнаяется в дополнительном, слип основного потока не должен никак на нее повлиять
kyn66 (2009-11-07 21:45:00) [42]
> Он "заморозит" выполнение вызывающегопотока на указанное
> время.
Т.е. программа не прервется визуально, это типа Delay()?
> pplication.ProcessMessages
Ты же сказал он не нужен, если Animate.Timers = False.Т.е. он будет в отдельном потоке работать. Кого тогда конкретно слип тормозить будет?
Сергей М. (2009-11-07 21:37:00) [43]
> что он даст
Он "заморозит" выполнение вызывающего потока на указанное время.
> где его нужно ставить
Где угодно, но, разумеется, после
MesFrm.Show
pplication.ProcessMessages
kyn66 (2009-11-07 21:32:00) [44]
> Понатыкай слипов в свой премудрый цикл, так чтобы он выполнялся
> заведомо дольше той самой задержки,
Sleep() ?
Никогда не использовал. А что он даст. В каком плане будет выглядеть задержка? Точнее где его нужно ставить, в цикле, перед, после и т.д?
Сергей М. (2009-11-07 21:31:00) [45]
> MesFrm := TMesFrm.Create(nil);
> MesFrm.Lab1.Caption := 'Формируется документ, ожидайте.
> ..';
> MesFrm.Show;
> MesFrm.Update; //это замени на Application.ProcessMessages
Сергей М. (2009-11-07 21:25:00) [46]
> За тот промежуток времени пока они видны
Да упарил ты уже своим "промежутком" !)
Понатыкай слипов в свой премудрый цикл, так чтобы он выполнялся заведомо дольше той самой задержки, да посмотри наконец что там на самом деле происходит !
Как дитя малое, ей-богу)
kyn66 (2009-11-07 21:22:00) [47]
> Так не тикают вообще или все же тикают, но с задержкой ?
> )
За тот промежуток времени пока они видны на экране(~ 3 сек) - не тикают
Сергей М. (2009-11-07 21:20:00) [48]Так не тикают вообщеили все же тикают, но с задержкой ?)
Сергей М. (2009-11-07 21:20:00) [49]Так не тикают вообщеили все же тикают, но с задержкой ?)
kyn66 (2009-11-07 21:10:00) [50]
> Сказка про белого бычка)..Ну ты же сам в [41] сказал, что
> при активайии компонента в OnShow задержка исчезает ?
Говорил, не отрицаю. В примере все работало. Когда задействовал в своем коде - нет. Мистика?
Сергей М. (2009-11-07 21:08:00) [51]
> возможно 4-х сек. задержка виновата
Сказка про белого бычка)..
Ну ты же самв [41] сказал, что при активайии компонента в OnShow задержка исчезает ?
> напорциклов
))
Мощно задвинул)
Ну понатыкай ты в этот цикл слипов побольше да подольше и посмотри, есть ли анимация или нет ..
kyn66 (2009-11-07 20:57:00) [52]В том то и дело, что не тикают. Яж говорю, возможно 4-х сек. задержка виновата, возможно напорциклов перебора таблиц не дает стартануть, напрягает перерисовку инфо-формы... Вот поэтому и спрашиваю, что это могет быть
Сергей М. (2009-11-07 20:55:00) [53]
> Пока он выполняется в фоне, часики на инфо-панели должны
> тикать
И что, не тикают ?)
kyn66 (2009-11-07 20:51:00) [54]Жалко в твоем профайле мало инфы о тебе. Если бы у тя была указана ася, я бы быстрее смог объяснить, чем через форум. Ато товарищ из города Эстония уже сделал намек, что обсуждение слишком затянулось.
Так вот, как еще обэяснить то.. ДА и у меня никакие формы не исчезают. Просмотри внимательно мой код после этого коммента попунктно:
1) Тыкаем по пункту меню для формирования отчета procedure TMainFrm.RepRupsItemClick(Sender: TObject);
2)Прявляется форма выбора отчетного периода , чтобы указать месяц и год отчета PeriodFrm := TPeriodFrm.Create(Application);. Если выбрано и все Окейно, if PeriodFrm.ShowModal = mrOK thenто появляется инфо-окошко, форма MesFrmна котором и расположены аничасики.
MesFrm := TMesFrm.Create(nil);
MesFrm.Lab1.Caption := 'Формируется документ, ожидайте...';
MesFrm.Show;
MesFrm.Update;
3) Пошел выполняться основной этап отбора данных для отчета. Пока он выполняется в фоне, часики на инфо-панели должны тикать
....
НУ вот как то так. Понятно ща?
Сергей М. (2009-11-07 20:43:00) [55]А как мой пример пересекается с твоим ?)
В моем примере форма не исчезает и позволяет видеть работает или не работает компонент как положено ..
А у тебя форма, как ты говоришь, исчезает, так что ты сам не знаешь, то ли есть анимация. толи нет, то ли есть задержка, то ли нет)
kyn66 (2009-11-07 20:38:00) [56]В твоем,
procedure TForm1.Button6Click(Sender: TObject);
begin
while true do;
end;
Сергей М. (2009-11-07 20:35:00) [57]В каком примере-то ?)
kyn66 (2009-11-07 20:33:00) [58]
[54]
> Но зато в примереубралась за счет этого 4-секундная пауза
PS
Кстати, рад тебя видеть в эфире в выходные :)
Сергей М. (2009-11-07 20:31:00) [59]Как это "не успевает", если [54] ?)
kyn66 (2009-11-07 20:27:00) [60]
> Сергей М. © (07.11.09 19:45) [60]
> И при этом ты утверждаешь, что запуск RepRupsItemClick в
> том виде, в котором он у тебя реализован, останавливает
> анимацию,
Я не сказал что останавливает. Я сказал , что анимация не успевает(возможно) стартануть, как инфо окно уже закрывается.