Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Останавливается информация о ходе выполнения процесса [D7, XP]


Страницы:   1 2 3 4 5 6

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 в тело цикла.


> выличить


"Л ичить" - это от слова "л икарь" ?)


Страницы:   1 2 3 4 5 6

Наверх

Титульная страница Поиск, карта сайта Написать письмо