Форум: "Начинающим";
Текущий архив: 2009.12.27;
Скачать: [xml.tar.bz2];
ВнизОстанавливается информация о ходе выполнения процесса Найти похожие ветки
← →
kyn66 © (2009-11-06 13:11) [0]Добрый день, мастера. Во время загрузки данных в таблицу(процесс занимает определенное время) информирую пользователя о ходе выполнения процесса через 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-06 13:18) [1]Вместо ЧегоТоТам.Update помести Application.ProcessMessages в тело цикла.
> выличить
"Личить" - это от слова "ликарь" ?)
← →
kyn66 © (2009-11-06 13:42) [2]
> Сергей М. © (06.11.09 13:18) [1]
> Вместо ЧегоТоТам.Update помести Application.ProcessMessages
> в тело цикла.
ProcLab.Update; это обновление(перерисовка) метки с процентами. Хоршо, cqxfc попробую. А с прогрессом как быть?
> "Личить" - это от слова "ликарь" ?)
Конечно же нет. Очепятка. Но это не в хорошую сторону форума будет подчеркнуто, т.к. здесь напроч отсутствует редактирование постов. Т.ч. звиняйте, если чаво не доглядел перед отправкой. ;)
← →
sniknik © (2009-11-06 13:42) [3]> "Личить" - это от слова "ликарь" ?)
от слова Личь (пиявка. тот кто качает но ничего не отдает взамен © emule)
← →
sniknik © (2009-11-06 13:44) [4]> т.к. здесь напроч отсутствует редактирование постов.
что есть ОЧЕНЬ ОЧЕНЬ правильно. заставляет отвечать за свои слова, а не править все втихую задним числом.
← →
kyn66 © (2009-11-06 13:49) [5]
> 2Сергей М. © (06.11.09 13:18) [1]
Сергей, если бы можно было бы голосовать за представление тебя еще к одому ордену Мастера, я бы был первым. Как всегда помощь помогла. То что доктор прописал. Все работает как надо. Спасибо добрый человек!!! :)
← →
Сергей М. © (2009-11-06 13:50) [6]
> А с прогрессом как быть?
А точно так же.
Один-единственный Application.ProcessMessages заменит кучу явных обновлений.
← →
kyn66 © (2009-11-06 13:53) [7]
> sniknik © (06.11.09 13:44) [4]
> > ОЧЕНЬ ОЧЕНЬ правильно. заставляет отвечать за свои
> слова, а не править все втихую задним числом.
Да не скажи, все нормальные форумы предоставляют такую возможность. Внн, некоторые тоже статьи с ошибками пишут, а после указания на оную - исправляют.... Ну ошибся человек, но мысль то имел в голове верную. Что уж теперь казнить его за это? Кто захочет - тот поймет! (Модерам - сорри за офтоп)
← →
Сергей М. © (2009-11-06 13:53) [8]
> еще к одому
Куда мне их такая куча ? Солить ?)
С этим-то не знаю что делать, а ты меня еще к одним веригам подталкиваешь))
← →
Сергей М. © (2009-11-06 13:57) [9]
> но мысль то имел в голове верную
Тогда он не туда зашел - ему в конференцию телепатов нужно было)
← →
kyn66 © (2009-11-06 13:58) [10]
> Куда мне их такая куча ? Солить ?)С этим-то не знаю что
> делать, а ты меня еще к одним веригам подталкиваешь))
Ну, Леонид Ильич не чурался навешивать себе их кучу.... Главное то содержимое, а не обертка. Если человек достоин похвалы - значит должен быть пощрен! :)
← →
kyn66 © (2009-11-06 13:59) [11]
> Тогда он не туда зашел - ему в конференцию телепатов нужно
> было)
Кто он?
← →
sniknik © (2009-11-06 14:00) [12]> все нормальные форумы предоставляют такую возможность.
почему ты тогда здесь, а не на одном из "нормальных"? ответь сам себе, мне не нужно, тогда может и дойдет.
и потом не надо сравнивать какой нибудь "потрепальный" форум, и технический.
← →
Сергей М. © (2009-11-06 14:01) [13]
> Леонид Ильич не чурался
Дык ыть у него и амплуа другое было - "трижды орденопросец")
А у меня другое - "не верь, не бойся, не проси")
← →
Сергей М. © (2009-11-06 14:03) [14]
> Кто он?
Ну как кто ?
Тот у которого мысль в голове, разумеется)
← →
kyn66 © (2009-11-06 14:09) [15]
> Сергей М. © (06.11.09 14:03) [14]
Кстати, я вот ща подумал, что обновление меки процентов ProcLab.Update; у меня в цикле выполнялось. А ща я вместо этого поставил Application.ProcessMessages Это тоже должно быть в цикле или достаточно 1 раз вызвать перед началом цикла?
← →
Сергей М. © (2009-11-06 14:11) [16]В цикле конечно же.
← →
kyn66 © (2009-11-06 14:15) [17]Ясно. А прокатит это если на информационной формочке AVI-шные часики положить. Помню раньше была такая идея, но каждый раз затыкалась, т.к. часики не анимировались.
← →
Сергей М. © (2009-11-06 14:21) [18]
> А прокатит
А куда оно денется !)
Впрочем "AVI-шным часикам", если ты имешь ввиду TAnimate, эта строчка нафих не нужна, если Animate.Timers = False.
← →
kyn66 © (2009-11-06 14:36) [19]
> Впрочем "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;? все остальное по дефолту.
← →
Anatoly Podgoretsky © (2009-11-06 14:38) [20]> kyn66 (06.11.2009 13:53:07) [7]
Ну так статья его собственность, а сообщение на форуме принадлежит форуму и он защищается от подчисток.
← →
Сергей М. © (2009-11-06 14:42) [21]
> если False, то анимация выполняется отдельным потоком?
Да.
> Но ведь не тикали
У меня тикали.
Что я делал неправильно ?
← →
kyn66 © (2009-11-06 14:48) [22]
> Что я делал неправильно ?
:)))) вот же напартачил(для лексиглазов вариант напортачил) ты, что у тебя все работало... :))) Надо поискать в нэте красивые аничасики и проверить. Вроде стандартный дэльфовый не очень как -то...
← →
kyn66 © (2009-11-06 14:50) [23]
> Anatoly Podgoretsky © (06.11.09 14:38) [20]
> > kyn66 (06.11.2009 13:53:07) [7]Ну так статья его собственность,
> а сообщение на форуме принадлежит форуму и он защищается
> от подчисток.
О каких подчистках идет речь, не морочьте голову. Я говорю о банальных очепятках, которые сразу то и не заметишь, а когда пост ушел, блин, смотришь и угараешь от своей криворукости. Посмотрите в сетке... Все форумы позволяют корректировать свои посты. ДА ладно, чего пену пускать. Приходится принимать что есть. И на том спасибо.
← →
kyn66 © (2009-11-06 14:59) [24]
> У меня тикали.Что я делал неправильно ?
Ну не знаю, вот эти http://yurec66.narod.ru/Hlam/1.AVI вешаю. Стоят как вкопанные и не тикают.
← →
Сергей М. © (2009-11-06 15:02) [25]
> красивые аничасики и проверить. Вроде стандартный дэльфовый
> не очень
И чем же якобы некрасявость дельфовых аничасиков может повлиять на сабж ?)
Ничем)
Либо они шевелятся в принципе либо не шевелятся вовсе, а уж цифровые они или аналоговые, с живой они или дохлой кукушкой - то без разницы)
← →
Сергей М. © (2009-11-06 15:05) [26]
> Стоят как вкопанные и не тикают
У меня крутятся и тикают)
Что я делаю неправильно ?)
← →
kyn66 © (2009-11-06 15:10) [27]
> с живой они или дохлой кукушкой - то без разницы)
:))))))))
А может по коду сравним? Я свой привел, в котором они стоят. Может на их "живучесть" влияет набор операторов внутри "обложки" инфо-формы?
← →
Сергей М. © (2009-11-06 15:18) [28]В дизайн-тайме шмякнул на чистую форму в чистом проекте компонент Animate, установил его св-ва
FileName = твой файл
Active = True
Шмякнул еще кнопку, назначил обработчик клика с текстомwhile True do;
Все.
Жму F9 - часы идут.
Жму кнопку - часы идут.
)
← →
kyn66 © (2009-11-06 15:20) [29]Вроде чтото прояснилось. Но ты Сергей сдесь не прав получился
> Впрочем "AVI-шным часикам", если ты имешь ввиду TAnimate,
> эта строчка нафих не нужна, если Animate.Timers = False.
>
Я не зря предложил сравнить по кодам твой рабочий вариант и мой. Дело в том, что у меня внутри "Инфо-обложки" находятся несколько блоков с цикоами типа
....
while not CpsQuery.EOF do
begin
SQL.Clear;
SQL.Add("SELECT ");
SQL.Add("SUM(Kol1) As SKol1, SUM(Sum1) As SSum1,");
...
Так вот, я попытался вставить Application.ProcessMessages; в кождое тело циклов.
....
while not CpsQuery.EOF do
begin
Application.ProcessMessages;
SQL.Clear;
SQL.Add("SELECT ");
SQL.Add("SUM(Kol1) As SKol1, SUM(Sum1) As SSum1,");
...
Только после этого часики ожили. ЧТо МАстер имеет сказать по этому поводу?
← →
Сергей М. © (2009-11-06 15:24) [30]
> ЧТо МАстер имеет сказать по этому поводу?
А то и скажу - у меня намного более тяжелый цикл чем у тебя
while True do;
Однако анимация успешно крутится и безо всяких притом Application.ProcessMessages
← →
kyn66 © (2009-11-06 15:34) [31]
> Однако анимация успешно крутится и безо всяких притом Application.
> ProcessMessages
Ну не собираюсь же я тебя обманывать.... Говорю как есть.
> у меня намного более тяжелый цикл чем у тебя
А чем он тяжелее? Что бесконечный? А у меня еще и механизмы доступа к БД задействуются , и физическая запись на диск и т.д. Так шта.... где ешшо тяжелее. Но от этоге не легче. У меня даже инфо-форма не успевает перерисоваться во время выполнения циклов, и как бы обрезаная получается от наложения предыдущей "запускающей на старт циклы" формы. Вот где то так объяснил...
← →
Сергей М. © (2009-11-06 15:47) [32]
> чем он тяжелее?
Тем что полностью и безусловно захватывает временные ресурсы основного потока.
> А у меня еще и механизмы доступа к БД задействуются
Да фиолетово что у тебя там задействуется, если при этом не изменяются приоритеты потоков тек.процесса.
Ты вместо своих премудростей попробуй вставь мой цикл.
Не работает ?)
← →
Anatoly Podgoretsky © (2009-11-06 15:57) [33]> kyn66 (06.11.2009 15:34:31) [31]
У нас нет повода тебе верить.
← →
kyn66 © (2009-11-06 16:05) [34]
Anatoly Podgoretsky ©
> У нас нет повода тебе верить.
Ну так приезжай в гости... чайком напою... заодно.... А там и на кодик глянем...
> Не работает ?)
Ща гляну
Жму F9 - часы идут.
Жму кнопку - часы идут.
А это из какой оперы?
← →
Anatoly Podgoretsky © (2009-11-06 16:08) [35]
> чайком напою... заодно
Это значит, что можешь и не напость - это жестоко!
← →
Сергей М. © (2009-11-06 16:09) [36]
> это из какой оперы?
Ты давай уже щагляди)
Про оперов потом потолкуем)
← →
kyn66 © (2009-11-06 16:14) [37]
> Ты давай уже щагляди)Про оперов потом потолкуем)
Дествительно все работает. И после
procedure TForm1.Button1Click(Sender: TObject);
begin
while True do;
end;
Тоже...
Однако заметил одну вестч. После запуска прожки (F9) часики на форме стоят неподвижно, где-то сек. 2, потом оживают. МОжет я поэтому и не успевал заметить анимации, что часики в моем коде не смогли вовремя стартануть?
← →
kyn66 © (2009-11-06 16:19) [38]В дополнение. Подсчитал. Анимация начинает работать через 4 сек. после появления формы.
← →
Сергей М. © (2009-11-06 16:19) [39]Так а куда ж ты торопился ?)
← →
Сергей М. © (2009-11-06 16:20) [40]
> Анимация начинает работать через 4 сек. после появления
> формы
Клиент не успеет застрелиться за это время от скуки, а остальным можно пренебречь
Страницы: 1 2 3 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.12.27;
Скачать: [xml.tar.bz2];
Память: 0.57 MB
Время: 0.008 c