Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.12.27;
Скачать: [xml.tar.bz2];

Вниз

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

 
Сергей М. ©   (2009-11-06 16:20) [40]


> Анимация начинает работать через 4 сек. после появления
> формы


Клиент не успеет застрелиться за это время от скуки, а остальным можно пренебречь


 
kyn66 ©   (2009-11-06 16:30) [41]


> Так а куда ж ты торопился ?)


Не понял?

В твоем примере сделал так

procedure TMesFrm.FormShow(Sender: TObject);
begin
 Animate1.Active := True;
end;

Заработал сразу. Переношу на свой код - нифига не работает. Вот и не понятно, что напрягает?


 
Сергей М. ©   (2009-11-06 16:38) [42]

А так

procedure TForm1.Button6Click(Sender: TObject);
begin
 Animate1.Active := true;
 while true do;
end;


?


 
Anatoly Podgoretsky ©   (2009-11-06 16:41) [43]

> kyn66  (06.11.2009 16:19:38)  [38]

Это нормальное поведение.


 
kyn66 ©   (2009-11-06 16:41) [44]


> Сергей М. ©   (06.11.09 16:38) [42]
> А так


А так - это "проверка на выносливость" . Мне то нужно чтобы часики заработали при самом первом появлении инфо-формы и продолжали работать во время цикла. У меня не стартуют, чтото задерживает их старт. Могу выложить полный кусок кода


 
Сергей М. ©   (2009-11-06 16:51) [45]


> и продолжали работать во время цикла


А цикл-то твой при каком событии формы стартует ?


 
kyn66 ©   (2009-11-06 16:55) [46]

КОроче, вот весь кусок, на котором они запираются(часики)

procedure TMainFrm.RepRupsItemClick(Sender: TObject);
Var
 i, j : Integer;
begin
 try
   HaveChild := False; // Эмуляция параметра
   PeriodFrm := TPeriodFrm.Create(Application);
   if PeriodFrm.ShowModal = mrOK then
    begin
      MesFrm := TMesFrm.Create(nil);
      MesFrm.Lab1.Caption := "Формируется документ, ожидайте...";
      MesFrm.Show;
      MesFrm.Update;
      MesP := PeriodFrm.MesComboBox.ItemIndex + 1;
      GodP := PeriodFrm.GodSpinEdit.AsInteger;
      With DM1 do
       begin
         if SborTbl.Active then
          SborTbl.Close;
         SborTbl.Exclusive := True;
         SborTbl.EmptyTable;
         SborTbl.Exclusive := False;
         SborTbl.Open;

         CpsTbl.Close;
         CpsTbl.Exclusive := True;
         CpsTbl.EmptyTable;
         CpsTbl.Exclusive := False;
         CpsTbl.Open;

         RegionTbl.Open;
         PeriodTbl.Open;
         OpsTbl.Open;
         OpsTbl.First;
         while not OpsTbl.EOF do
          begin
            if PeriodTbl.Locate("RegKod;Mes;God", VarArrayOf([OpsTblKod.Value, MesP, GodP]), []) then
             begin
              // Отбор по основным РУПС
               OborotQuery.SQL.Clear;
               OborotQuery.SQL.Add("SELECT * FROM Oborot WHERE RegKod < 200 AND PerID = :p0 ORDER BY TovKod, Cena");
               OborotQuery.Params[0].Value := PeriodTblID.Value;
               OborotQuery.Open;
               OborotQuery.First;
                while not OborotQuery.EOF do
                 begin
                   SborTbl.InsertRecord([OpsTblKod.Value, OborotQueryTovKod.Value, OborotQueryCena.Value,
                                         OborotQueryKolOst.Value, OborotQuerySumOst.Value,
                                         OborotQueryKolPol.Value, OborotQuerySumPol.Value,
                                         OborotQueryKolReal.Value, OborotQuerySumReal.Value,
                                         OborotQueryOstMesKol.Value, OborotQueryOstMesSum.Value]);
                   OborotQuery.Next;
                 end;
               // Отбор для ЦПС
               OborotQuery.SQL.Clear;
               OborotQuery.SQL.Add("SELECT * FROM Oborot WHERE RegKod > 200 AND PerID = :p0 ORDER BY TovKod, Cena");
               OborotQuery.Params[0].Value := PeriodTblID.Value;
               OborotQuery.Open;
               OborotQuery.First;
                while not OborotQuery.EOF do
                 begin
                   CpsTbl.InsertRecord([OpsTblKod.Value, OborotQueryTovKod.Value,
                                        OborotQueryCena.Value,
                                        OborotQueryKolOst.Value, OborotQuerySumOst.Value,
                                        OborotQueryKolPol.Value, OborotQuerySumPol.Value,
                                        OborotQueryKolReal.Value, OborotQuerySumReal.Value,
                                        OborotQueryOstMesKol.Value, OborotQueryOstMesSum.Value]);
                   OborotQuery.Next;
                 end;
             end;
            OpsTbl.Next;
          end;
.....


и далее БОльше форум не дает вставить


 
kyn66 ©   (2009-11-06 16:57) [47]

продолжение

        CpsQuery.SQL.Clear;
         CpsQuery.SQL.Add("SELECT DISTINCT TovKod,TovCena FROM Cps");
         CpsQuery.Open;
         CpsQuery.First;
         with TADSQuery.Create(nil) do
          try
            ADSConnection := DM1.AdsConnection1;
            ParamCheck := True;
            while not CpsQuery.EOF do
             begin
               SQL.Clear;
               SQL.Add("SELECT ");
               SQL.Add("SUM(Kol1) As SKol1, SUM(Sum1) As SSum1,");
               SQL.Add("SUM(Kol2) As SKol2, SUM(Sum2) As SSum2,");
               SQL.Add("SUM(Kol3) As SKol3, SUM(Sum3) As SSum3,");
               SQL.Add("SUM(Kol4) As SKol4, SUM(Sum4) As SSum4");
               SQL.Add(" FROM Cps");
               SQL.Add(" WHERE TovKod = :p0 AND TovCena = :p1");
               Params[0].Value := CpsQueryTovKod.Value;
               Params[1].Value := CpsQueryTovCena.Value;
               Open;
               SborTbl.InsertRecord([105, CpsQueryTovKod.Value, CpsQueryTovCena.Value,
                                     Fields[0].Value, Fields[1].Value,
                                     Fields[2].Value, Fields[3].Value,
                                     Fields[4].Value, Fields[5].Value,
                                     Fields[6].Value, Fields[7].Value]);
               CpsQuery.Next;
             end;
          finally
            Free;
          end;
         CpsQuery.Close;
         CpsQuery.AdsCloseSQLStatement;
         CpsTbl.Close;


 
Anatoly Podgoretsky ©   (2009-11-06 16:57) [48]

> kyn66  (06.11.2009 16:41:44)  [44]

> Могу выложить полный кусок кода

Ты что хочешь обсуждение не на одну сотню сообщений?


 
kyn66 ©   (2009-11-06 16:58) [49]

Продолжение
Вывод на печать

      Case (Sender As TMenuItem).Tag of
           1 : // Вывод отчета на печать
               if SborTbl.RecordCount <> 0 then
                begin
                  SborTbl.MasterSource := RegionDataSource;
                  SborTbl.MasterFields := "Kod";
                  EkRTF1.InFile := ShablonPath + "Rep2.rtf";
                  EkRTF1.OutFile := GetTempDir + "Остатки по гофроящикам.doc";
                  RepName1 := EkRTF1.OutFile;
                  EkRTF1.ClearVars;
                  EkRTF1.CreateVar("per_in", PeriodStr(MesP, GodP));
                  EkRTF1.CreateVar("per_rep", AnsiLowerCase(mes_A[MesP]));
                  EkRTF1.CreateVar("per_out", NextPeriodStr(MesP, GodP));
                  EkRTF1.CreateVar("god_rep", IntToStr(GodP));
                  EkRTF1.CreateVar("Rups", "по филиалу ");
                  Screen.Cursor := crDefault;
                  EkRTF1.ExecuteOpen([RegionTbl, SborTbl], SW_SHOW);
                end
               else
                WarnMsg("Данные отсутствуют !");
           2 : begin
                 // Дополнительный отбор данных для Области
                 for i := 1 to 8 do
                  ParZ_A[i] := 0;
                 SborTbl.Close;
                 OblTbl.Open;
                 GBoxTbl.Open;
                 GBoxTbl.First;
                 with TADSQuery.Create(nil) do
                  try
                    ADSConnection := DM1.AdsConnection1;
                    ParamCheck := True;
                    for i := 0 to Pred(GBoxTbl.RecordCount) do
//                     while not GBoxTbl.EOF do
                     begin
                       SQL.Clear;
                       SQL.Add("SELECT ");
                       SQL.Add("SUM(Kol1) As SKol1, SUM(Sum1) As SSum1,");
                       SQL.Add("SUM(Kol2) As SKol2, SUM(Sum2) As SSum2,");
                       SQL.Add("SUM(Kol3) As SKol3, SUM(Sum3) As SSum3,");
                       SQL.Add("SUM(Kol4) As SKol4, SUM(Sum4) As SSum4");
                       SQL.Add(" FROM Sbor");
                       SQL.Add(" WHERE TovKod = :p0");
                       Params[0].Value := GboxTblKod.Value;
                       Open;
                       for j := 1 to 7 do
                        if Fields[j-1].Value <> Null then
                         ParZ_A[j] := ParZ_A[j] + Fields[j-1].Value;
                       OblTbl.AppendRecord([GboxTblKod.Value,
                                            Fields[0].Value, Fields[1].Value,
                                            Fields[2].Value, Fields[3].Value,
                                            Fields[4].Value, Fields[5].Value,
                                            Fields[6].Value, Fields[7].Value]);
                       GBoxTbl.Next;
                     end;
                  finally
                    Free;
                  end;
                 // Вывод отчета на печать
                 if (ParZ_A[1] <> 0) OR (ParZ_A[2] <> 0) OR (ParZ_A[3] <> 0) OR
                    (ParZ_A[4] <> 0) OR (ParZ_A[5] <> 0) OR (ParZ_A[6] <> 0) OR
                    (ParZ_A[7] <> 0) OR (ParZ_A[8] <> 0) then
                  begin
                    EkRTF1.InFile := ShablonPath + "Rep3.rtf";
                    EkRTF1.OutFile := GetTempDir + "Остатки по гофроящикам.doc";
                    RepName1 := EkRTF1.OutFile;
                    EkRTF1.ClearVars;
                    EkRTF1.CreateVar("per_in", PeriodStr(MesP, GodP));
                    EkRTF1.CreateVar("per_rep", AnsiLowerCase(mes_A[MesP]));
                    EkRTF1.CreateVar("per_out", NextPeriodStr(MesP, GodP));
                    EkRTF1.CreateVar("god_rep", IntToStr(GodP));
                    EkRTF1.CreateVar("Rups", "по филиалу");
                    Screen.Cursor := crDefault;
                    EkRTF1.ExecuteOpen([OblTbl], SW_SHOW);
                  end
                 else
                  WarnMsg("Данные отсутствуют !");
                 GBoxTbl.Close;
                 OblTbl.Close;
               end;
        end;{Case}
        SborTbl.Close;
        RegionTbl.Close;
        PeriodTbl.Close;
       end;{With DM1}
      MesFrm.Hide;
      MesFrm.Free;
    end;
 finally
   PeriodFrm.Close;
   PeriodFrm.Free;
 end;
end;


 
kyn66 ©   (2009-11-06 16:59) [50]


Anatoly Podgoretsky ©   (06.11.09 16:57) [48]
> Ты что хочешь обсуждение не на одну сотню сообщений?


Ну ты же чай не хочешь ехать пить, так вот и показываю код, чтобы не выглядеть идиотом в глазах мастеров и Триждыорденоносцев.


 
Сергей М. ©   (2009-11-06 17:06) [51]

Т.е. ты утверждаешь, что если в OnShow формы активировать компонент Animate, то анимация начинается немедленно сразу при визуализации формы, а после клика на RepRupsItem визуализированной формы анимация прекращается вплоть до завершения соотв.обработчика либо или до первого вызова Application.ProcessMessages где-либо в теле этого обработчика,
так ?


 
kyn66 ©   (2009-11-06 17:51) [52]


> Сергей М. ©   (06.11.09 17:06) [51]
> Т.е. ты утверждаешь, что если в OnShow формы активировать
> компонент Animate, то анимация начинается немедленно сразу
> при визуализации формы, а после клика на RepRupsItem визуализированной
> формы анимация прекращается вплоть до завершения соотв.обработчика
> либо или до первого вызова Application.ProcessMessages где-
> либо в теле этого обработчика, так ?


Совершенно верно понято!


 
kyn66 ©   (2009-11-06 18:08) [53]

Точнее твой вопрос нужно разбить на 2 части:
> Т.е. ты утверждаешь, что если в OnShow формы активировать
> компонент Animate, то анимация начинается немедленно сразу
> при визуализации формы,

Это - да

>а после клика на RepRupsItem визуализированной
> формы анимация прекращается вплоть до завершения соотв.обработчика
> либо или до первого вызова Application.ProcessMessages где-
> либо в теле этого обработчика, так ?

Здесь нет, не совсем так.  1-я часть твоего вопроса подходит под ответ, когда был использован пример while true do;. Я если выполнить мой код, представленный выше, то анимация вааще не стартует. Как видно MesFrm отдельная форма. Внутри этой формы я создал запись

procedure TMesFrm.FormShow(Sender: TObject);
begin
Animate1.Active := True;
end;


Думал это как то исправит ситуацию, после проверенного твоего примера. Однако обломс...


 
kyn66 ©   (2009-11-06 18:10) [54]


> Думал это как то исправит ситуацию, после проверенного твоего
> примера. Однако обломс...


Но зато в примере убралась за счет этого 4-секундная пауза


 
Leonid Troyanovsky ©   (2009-11-06 19:01) [55]


> kyn66 ©   (06.11.09 18:10) [54]

> Но зато в примере убралась за счет этого 4-секундная пауза

Ну все, можем отдохнуть.

--
Regards, LVT.


 
Сергей М. ©   (2009-11-06 19:16) [56]


> Как видно MesFrm отдельная форма. Внутри этой формы я создал
> запись
>
> procedure TMesFrm.FormShow(Sender: TObject);
> begin
> Animate1.Active := True;
> end;


Так а какого же хрена в [46] фигурирует


> procedure TMainFrm.RepRupsItemClick(Sender: TObject);


Это же две разных формы)


 
Anatoly Podgoretsky ©   (2009-11-06 19:41) [57]

> kyn66  (06.11.2009 16:59:50)  [50]

Ладно, я же пошутил, код всегда не плох, если в меру приведен.


 
Anatoly Podgoretsky ©   (2009-11-06 19:42) [58]

> Leonid Troyanovsky  (06.11.2009 19:01:55)  [55]

Но тольоко четыре секунды.


 
kyn66 ©   (2009-11-06 20:27) [59]


> Это же две разных формы)


А что в этом удивительного? Так там еще и третья присутствует PeriodFrm . Из одной формы вызывается другая и третья. Каждая отработав оставляет свои данные. А MesFrm(инфо-форма) конкретно, отвечает за содержание в себе анимационной картинки.


 
Сергей М. ©   (2009-11-07 19:45) [60]

И при этом ты утверждаешь, что запуск RepRupsItemClick в том виде, в котором он у тебя реализован, останавливает анимацию, а если в теле метода будет всего одна строчка while True do, то анимация не останавливается,
так ?


 
kyn66 ©   (2009-11-07 20:27) [61]


> Сергей М. ©   (07.11.09 19:45) [60]
> И при этом ты утверждаешь, что запуск RepRupsItemClick в
> том виде, в котором он у тебя реализован, останавливает
> анимацию,


Я не сказал что останавливает. Я сказал , что анимация не успевает(возможно) стартануть, как инфо окно уже закрывается.


 
Сергей М. ©   (2009-11-07 20:31) [62]

Как это "не успевает", если [54] ?)


 
kyn66 ©   (2009-11-07 20:33) [63]


[54]
> Но зато в примере убралась за счет этого 4-секундная пауза


PS
Кстати, рад тебя видеть в эфире в выходные :)


 
Сергей М. ©   (2009-11-07 20:35) [64]

В каком примере-то ?)


 
kyn66 ©   (2009-11-07 20:38) [65]

В твоем,

procedure TForm1.Button6Click(Sender: TObject);
begin
while true do;
end;


 
Сергей М. ©   (2009-11-07 20:43) [66]

А как мой пример пересекается с твоим ?)
В моем примере форма не исчезает и позволяет видеть работает или не работает компонент как положено ..
А у тебя форма, как ты говоришь, исчезает, так что ты сам не знаешь, то ли есть анимация. толи нет, то ли есть задержка, то ли нет)


 
kyn66 ©   (2009-11-07 20:51) [67]

Жалко в твоем профайле мало инфы о тебе. Если бы у тя была указана ася, я бы быстрее смог объяснить, чем через форум. Ато товарищ из города Эстония уже сделал намек, что обсуждение слишком затянулось.

Так вот, как еще обэяснить то.. ДА и у меня никакие формы не исчезают. Просмотри внимательно мой код после этого коммента попунктно:
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:55) [68]


> Пока он выполняется в фоне, часики на инфо-панели должны
> тикать


И что, не тикают ?)


 
kyn66 ©   (2009-11-07 20:57) [69]

В том то и дело, что не тикают. Яж говорю, возможно 4-х сек. задержка виновата, возможно напорциклов перебора таблиц не дает стартануть, напрягает перерисовку инфо-формы... Вот поэтому и спрашиваю, что это могет быть


 
Сергей М. ©   (2009-11-07 21:08) [70]


> возможно 4-х сек. задержка виновата


Сказка про белого бычка)..
Ну ты же сам в [41] сказал, что при активайии компонента в OnShow задержка исчезает ?


> напорциклов


))
Мощно задвинул)

Ну понатыкай ты в этот цикл слипов побольше да подольше и посмотри, есть ли анимация или нет ..


 
kyn66 ©   (2009-11-07 21:10) [71]


> Сказка про белого бычка)..Ну ты же сам в [41] сказал, что
> при активайии компонента в OnShow задержка исчезает ?


Говорил, не отрицаю. В примере все работало. Когда задействовал в своем коде - нет. Мистика?


 
Сергей М. ©   (2009-11-07 21:20) [72]

Так не тикают вообще или все же тикают, но с задержкой ?)


 
Сергей М. ©   (2009-11-07 21:20) [73]

Так не тикают вообще или все же тикают, но с задержкой ?)


 
kyn66 ©   (2009-11-07 21:22) [74]


> Так не тикают вообще или все же тикают, но с задержкой ?
> )


За тот промежуток времени пока они видны на экране(~ 3 сек) - не тикают


 
Сергей М. ©   (2009-11-07 21:25) [75]


> За тот промежуток времени пока они видны


Да упарил ты уже своим "промежутком" !)

Понатыкай слипов в свой премудрый цикл, так чтобы он выполнялся заведомо дольше той самой задержки, да посмотри наконец что там на самом деле происходит !

Как дитя малое, ей-богу)


 
Сергей М. ©   (2009-11-07 21:31) [76]


>       MesFrm := TMesFrm.Create(nil);
>       MesFrm.Lab1.Caption := "Формируется документ, ожидайте.
> ..";
>       MesFrm.Show;
>       MesFrm.Update; //это замени на Application.ProcessMessages


 
kyn66 ©   (2009-11-07 21:32) [77]


> Понатыкай слипов в свой премудрый цикл, так чтобы он выполнялся
> заведомо дольше той самой задержки,


Sleep() ?
Никогда не использовал. А что он даст. В каком плане будет выглядеть задержка? Точнее где его нужно ставить, в цикле, перед, после и т.д?


 
Сергей М. ©   (2009-11-07 21:37) [78]


> что он даст


Он "заморозит" выполнение вызывающего потока на указанное время.


> где его нужно ставить


Где угодно, но, разумеется, после

MesFrm.Show
pplication.ProcessMessages


 
kyn66 ©   (2009-11-07 21:45) [79]


> Он "заморозит" выполнение вызывающего потока на указанное
> время.


Т.е. программа не прервется визуально, это типа Delay()?


> pplication.ProcessMessages

Ты же сказал он не нужен, если Animate.Timers = False. Т.е. он будет в отдельном потоке работать. Кого тогда конкретно слип тормозить будет?


 
Сергей М. ©   (2009-11-07 21:50) [80]


> это типа Delay()?


Да.


> Ты же сказал он не нужен, если Animate.Timers = False


Так у тебя де на форме не только Animate, но и какие-то другие виз.контролы !
Их то надо обновить..


> Кого тогда конкретно слип тормозить будет?


Я же сказал - вызывающий поток. Т.е. основной в дан.случае.
А поскольку анимация выполнаяется в дополнительном, слип основного потока не должен никак на нее повлиять



Страницы: 1 2 3 вся ветка

Форум: "Начинающим";
Текущий архив: 2009.12.27;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.67 MB
Время: 0.012 c
15-1256679849
Kerk
2009-10-28 00:44
2009.12.27
А у меня почту хакнули


15-1256434719
Antoxa
2009-10-25 04:38
2009.12.27
Почему сайт "умер"..?


1-1229896425
Delphi
2008-12-22 00:53
2009.12.27
Delphi2009


4-1226246501
sqrttrqs
2008-11-09 19:01
2009.12.27
вывод изображения на печать


2-1257545435
Igorishe
2009-11-07 01:10
2009.12.27
передача метода





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский