Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.12.27;
Скачать: CL | DM;

Вниз

Останавливается информация о ходе выполнения процесса   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.58 MB
Время: 0.133 c
2-1257351706
_
2009-11-04 19:21
2009.12.27
Узнать информацию о видеокарточке.


1-1230592103
ivanoff
2008-12-30 02:08
2009.12.27
Форма MDIChild не разворачвается полностью


15-1256842565
Piter
2009-10-29 21:56
2009.12.27
IE6 не воспринимает "return false;" в событии onclick в ссылках


1-1229944689
dmitry_12_08_73
2008-12-22 14:18
2009.12.27
Получение ссылки на файл после нажатия в проводнике "Копировать"


2-1257865044
monyk
2009-11-10 17:57
2009.12.27
Время в delphi