Главная страница
    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 сек. после появления
> формы


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


 
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, но и какие-то другие виз.контролы !
Их то надо обновить..


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


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


 
kyn66 ©   (2009-11-07 21:57) [81]


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


Там простр лабел информационный MesFrm.Lab1.Caption := "Формируется документ, ожидайте...";

> А поскольку анимация выполнаяется в дополнительном, слип
> основного потока не должен никак на нее повлиять

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


 
Сергей М. ©   (2009-11-07 22:00) [82]


> Там простр лабел


Вот он как раз и требует обновления

> как подсчитать время выполнения процесса


Процесса или потока ?
Разные же разницы ..


> через тикеты


тикет - это билет)
а тик - это тик)

см. GetTickCount


 
Igorishe   (2009-11-07 22:02) [83]


> тикет - это билет)


смешно...шутник вы эткий сударь)))


 
kyn66 ©   (2009-11-07 22:06) [84]


> Вот он как раз и требует обновления


Для перерисовки? Так ведь инфа в нем не меняется. Это же не меняющиеся проценты...


> Процесса или потока ?Разные же разницы ..

Операции выбора данных для отчета. Так скажем.


> тикет - это билет)а тик - это тик)


:) Именно это и имел ввиду :)


 
Сергей М. ©   (2009-11-07 22:16) [85]


> инфа в нем не меняется


Как это не меняется ?
Ты же сам перед визуализацией записал туда  "Формируется документ, ожидайте..." !

> Операции выбора данных для отчета


Ну так и говори - потока, занимающегося этой операцией..


 
kyn66 ©   (2009-11-07 22:27) [86]


> Ну так и говори - потока, занимающегося этой операцией..


Да... с мастерами пообщаешься, начнешь хоть грамотно изъясняться... ;) (Заставят, блин... :))


> Ты же сам перед визуализацией записал туда  "Формируется
> документ, ожидайте..." !


Но к ней претензий нету, не исчезает. Сейчас смотрю про GetTickCount. Но он считает в миллисекундах. Сейчас хочу привести к секундам...

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


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


> Хотелось бы сравнить, есть ли какая разница


А какая м.б. разница, кроме собственно различных анимированных сцен, видимых юзером ?


 
kyn66 ©   (2009-11-07 22:36) [88]


> А какая м.б. разница, кроме собственно различных анимированных
> сцен, видимых юзером ?


Вот и я так подумал. Ок, Сергей, на время прервем осуждение. Хочу потестировать со слипом.


 
Сергей М. ©   (2009-11-07 22:48) [89]


> к ней претензий нету, не исчезает


Тогда зачем в твоей редакции стоит MesFrm.Update ?


 
kyn66 ©   (2009-11-07 23:21) [90]


> Тогда зачем в твоей редакции стоит MesFrm.Update ?


Для перерисовки метки. Первый раз наверное.
Сергей, короче проверил сейчас аничасики на другой затяжной операции по удалении данных из таблицы. Так вот, при таком раскладе, как показано ниже, часики НЕ ТИКАЮТ. Ваш выход, Мастер!

procedure TTiragSLFrm.DelBtnClick(Sender: TObject);
Var
 tir : Integer;
begin
 if VoprosMsg("Вы действительно хотите удалить тираж "" +
               DM1.SvodTSLTblTir.AsString + "" ?", 2) then
  begin
    Screen.Cursor := crHourGlass;
    SplashFrm := TSplashFrm.Create(Application);
    SplashFrm.Lab1.Caption := "Выполняется удаление, ожидайте...";
    SplashFrm.Show;
    SplashFrm.Update;
    tir := DM1.SvodTSLTblTir.Value;
    with TAdsQuery.Create(nil) do
     try
       AdsConnection := DM1.AdsConnection1;
       ParamCheck := True;
       SQL.Add("DELETE FROM TiragSL WHERE Tir = :p0");
       Params[0].Value := tir;
       ExecSQL;
     finally
       Free;
     end;
    If DM1.SvodTSLTbl.FindKey([Tir]) then
     begin
       DM1.SvodTSLTbl.Delete;
       DM1.SvodTSLTbl.Refresh;
       DelTir := True;
     end;
    CountRec;
    SplashFrm.Hide;
    SplashFrm.Free;
    Screen.Cursor := crDefault;
  end;
end;


Только в данном куске уже SplashFrm играет роль инфо-формы, на которой расположены аничасики.


 
Сергей М. ©   (2009-11-07 23:33) [91]

а если все что после TSplashFrm.Update до end заменить на while true do - картина меняется ?


 
kyn66 ©   (2009-11-07 23:35) [92]

Для справки:
Вышеприведенный код удалял 121"421 запись из 2"693"521 . Затраченное время - 98.156 сек.  Celeron 2400, 1Гб


 
Сергей М. ©   (2009-11-07 23:40) [93]

Да по барабану что он там делал)
Принципиальна лишь занятость осн.потока какой либо (не важно какой) блокирующей операцией, изменяющей или не изменяющей приоритеты потоков ..


 
kyn66 ©   (2009-11-07 23:40) [94]


> а если все что после TSplashFrm.Update до end заменить на
> while true do - картина меняется ?


Тоже молчат... Странно...


 
Сергей М. ©   (2009-11-07 23:41) [95]

А тема раб.стола у тебя какая-либо установлена ?


 
Сергей М. ©   (2009-11-07 23:42) [96]


> Странно


Я ж тебе сказал уже три раза - замени Update после Show на Processmessages


 
kyn66 ©   (2009-11-07 23:48) [97]


...
    SplashFrm := TSplashFrm.Create(Application);
    SplashFrm.Lab1.Caption := "Выполняется удаление, ожидайте...";
    SplashFrm.Show;
//     SplashFrm.Update;
    Application.ProcessMessages;
    while true do
(*
    tir := DM1.SvodTSLTblTir.Value;
...


Ничего не меняется.

Внутри SplashFrm есть этот кусочек (для справки)

procedure TSplashFrm.FormShow(Sender: TObject);
begin
 SplashFrm.Width := Lab1.Width + 100;
end;


Может это как влияет?


 
kyn66 ©   (2009-11-07 23:49) [98]


> А тема раб.стола у тебя какая-либо установлена ?


Нет, стандартно все. Это каким то боком тоже может влиять? Так глубоко?


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

А вот так

   SplashFrm := TSplashFrm.Create(Application);
   SplashFrm.Lab1.Caption := "Выполняется удаление, ожидайте...";
   SplashFrm.Show;
   while true do Application.ProcessMessages;

тикают ?


 
Сергей М. ©   (2009-11-07 23:51) [100]


> Нет, стандартно все


И никакой XP-манифест тоже не используется ?


 
kyn66 ©   (2009-11-07 23:52) [101]


> И никакой XP-манифест тоже не используется ?


В проге да, XPManifest1: TXPManifest;


 
Сергей М. ©   (2009-11-07 23:54) [102]


> В проге да


Убирай.
И пробуй сначала вариант с
while true do;
затем с
while true do Application.ProcessMessages;


 
kyn66 ©   (2009-11-07 23:54) [103]


> Сергей М. ©   (07.11.09 23:50) [99]
> А вот так    SplashFrm := TSplashFrm.Create(Application);
>     SplashFrm.Lab1.Caption := "Выполняется удаление, ожидайте.
> ..";    SplashFrm.Show;    while true do Application.ProcessMessages;
> тикают ?


Да, заводятся сразу, даже без задержки.


 
kyn66 ©   (2009-11-08 00:01) [104]


> Сергей М. ©   (07.11.09 23:54) [102]


Убрал - разницы нет
while true do; - не работает
while true do Application.ProcessMessages; - работает;

Удалил с главной формы компонент XPManifest1: TXPManifest, моуль  XPMan. Но кнопки остались как с манифестом. Он еще куда не записывается?


 
Сергей М. ©   (2009-11-08 00:08) [105]


> while true do Application.ProcessMessages; - работает;

Значит либо у тебя на самом деле Animate.Timers = True либо придется выкорчевывать манифесты, так чтобы ими даже не пахло в приложении.
Проблема с работой TAnimate в XP-приложении, использующем манифесты, фигурирует в Гугле. Если это подтвердится и у тебя, значит придется отказываться либо от манифестов либо от TAnimate (в пользу аналогов типа JvAnimate или иных)


 
kyn66 ©   (2009-11-08 00:13) [106]


> придется выкорчевывать манифесты,

Так вот я и спрашиваю, куда он еще прописывается, если я его положил только на MainFrm, а все формы его "видят" и отвечают... Нужно действительно тогда проверить эту версию


 
kyn66 ©   (2009-11-08 00:43) [107]

Уже и в самой винде переключал на Классический стиль - все тоже.


 
Anatoly Podgoretsky ©   (2009-11-08 11:08) [108]

> kyn66  (07.11.2009 23:52:41)  [101]

Говорил же, что будет более 100 сообщений, как в воду глядел.


 
Anatoly Podgoretsky ©   (2009-11-08 11:09) [109]

> kyn66  (08.11.2009 00:01:44)  [104]

Удалять надо со всех форм и не только компонент, но и записи во всех uses


 
Anatoly Podgoretsky ©   (2009-11-08 11:10) [110]

> kyn66  (08.11.2009 00:43:47)  [107]

Посторонние Супер компоненты.


 
kyn66 ©   (2009-11-08 13:11) [111]


> Anatoly Podgoretsky ©   (08.11.09 11:09) [109]
> > kyn66  (08.11.2009 00:01:44)  [104]Удалять надо со всех
> форм и не только компонент, но и записи во всех uses


Компонент манифеста устанавливает с собою модуль XPMan. Так вот, этот модуль обнаружен только в главном(MainFrm), где он конкретно и был установлен. Dj всех остальных модулях проекта в секциях Uses он не обнаружен. Кстати, меня всегда интересовал этот компонент. Как он влияет на все формы, если установлен только в одной.


> Говорил же, что будет более 100 сообщений, как в воду глядел.


Связано с множеством одиночных наводящих вопросов. Был бы то чат или... другой способ, тема была бы поменьше. А с kheujq стороны на форуме и пытаешься достичь истины. В 75% это удается.


 
{RASkov} ©   (2009-11-08 13:26) [112]

> [111] kyn66 ©   (08.11.09 13:11)
> Кстати, меня всегда интересовал этот компонент. Как он влияет
> на все формы, если установлен только в одной.

У компонента функционала - ноль. Единственное в его коде - это добавление к исполняемому модулю ресурса с этим самым манифестом.
Отсюда следует что сам компонент как таковой вообще не нужен, достаточно в любом uses проекта(хоть в самом *.dpr) указать юнит XPMan.


 
{RASkov} ©   (2009-11-08 13:29) [113]

Вот его полный код:
unit XPMan;
{$WEAKPACKAGEUNIT ON}
interface
uses SysUtils, Classes;
type TXPManifest = class(TComponent) end;
{$R WindowsXP.res} - Единственная "полезная" строка в коде компонента
implementation
end.


 
kyn66 ©   (2009-11-08 13:31) [114]


> {RASkov} ©   (08.11.09 13:26) [112]


Согласен.


 
kyn66 ©   (2009-11-08 13:38) [115]


> Сергей М. ©   (08.11.09 00:08) [105]
> Проблема с работой TAnimate в XP-приложении,
>  использующем манифесты, фигурирует в Гугле. Если это подтвердится
> и у тебя, значит придется отказываться либо от манифестов
> либо от TAnimate (в пользу аналогов типа JvAnimate или иных)


Сергей, ты как всегда прав! Дело в манифесте. Проверил на новом проекте. Значит я думаю проще отказаться от анимации, нежеле разрушать вид программы(XP-шная мягкость фейса). Если не найдется отдельного , не конфликтующего с манифестом компонента анимации, то предется оставить как есть.


 
kyn66 ©   (2009-11-08 14:04) [116]

Вот нашел обсуждение этого вопроса в Королевстве http://www.delphikingdom.com/asp/answer.asp?IDAnswer=36617. Получается что при взаимодействии с манифестом Animate не воспроизводится в отдельном потоке, согласно доки. Значит может стоит попробывать запустить его через таймер? Ну, как вариант проверки...


 
Anatoly Podgoretsky ©   (2009-11-08 14:06) [117]

> kyn66  (08.11.2009 13:11:51)  [111]

Это ресурс


 
kyn66 ©   (2009-11-08 14:13) [118]


> Anatoly Podgoretsky ©   (08.11.09 14:06) [117]
>Это ресурс


Так чтобы этот ресурс задействовать, нужно сделать на него сылку...


 
Anatoly Podgoretsky ©   (2009-11-08 14:30) [119]

> kyn66  (08.11.2009 14:13:58)  [118]

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


 
kyn66 ©   (2009-11-08 14:58) [120]


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


Можно и так, по разному можно. Однако это не решает первоначальной проблемы(конфликт Tanimate & Manifest).



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

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

Наверх





Память: 0.84 MB
Время: 0.008 c
15-1256427069
Игорь Шевченко
2009-10-25 02:31
2009.12.27
Вот и кончилось лето...


1-1230639805
du_hast
2008-12-30 15:23
2009.12.27
Как можно пулчить массив данных Excel chart -а?


15-1256487519
Kolan
2009-10-25 19:18
2009.12.27
Статья «Обобщённое программирование(generics) в Delphi 2009 ...»


15-1256615376
d@nger
2009-10-27 06:49
2009.12.27
Cisco и модем


4-1225710553
Riply
2008-11-03 14:09
2009.12.27
EPROCESS.ActiveProcessLinks с чем едят ?





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