Форум: "Начинающим";
Текущий архив: 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