Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1257749650
Alex_C
2009-11-09 09:54
2009.12.27
Скрыть кнопку на панели задач


3-1232350553
Альф
2009-01-19 10:35
2009.12.27
Как отключить кеш в IB5.6 или что это было ?


15-1256543859
Kerk
2009-10-26 10:57
2009.12.27
Заметки посла США в СССР (1937-1938 гг.)


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


4-1226011581
AnarchyMob
2008-11-07 01:46
2009.12.27
Создание главного меню на WinCE





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский