Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 13.03.2009, 14:45
Grafrada Grafrada вне форума
Прохожий
 
Регистрация: 13.03.2009
Сообщения: 18
Репутация: 10
По умолчанию Ускорение или замедление цикла

Кто-нибудь подскажите, пожалуйста, как ускорить или замедлить цикл.
У меня в программе есть график, который изменяется с течением времени. Я хочу его ускорить, либо замедлить. Но этого не получается. То есть пока не пройдет основной цикл, т.е в реальном времени, ускорить или замедлить не получается. Как мне подчинить процедуры друг другу, т.е сделать независимыми. Заранее спасибо. Уже всю голову сломал)))
Ответить с цитированием
  #2  
Старый 13.03.2009, 14:49
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,031
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ничего не понял. Ты хоть код кинь (не обязательно весь, только значащие части).
Ответить с цитированием
  #3  
Старый 13.03.2009, 14:57
Grafrada Grafrada вне форума
Прохожий
 
Регистрация: 13.03.2009
Сообщения: 18
Репутация: 10
По умолчанию

Код:
begin//Распределение насыщенности
           //Otvet:= StrToFloat(eVremia.Text);
            TTek:=0;
            alfT:=1.0;
           repeat
              pVremia.Enabled:=true;
              pVremia.Visible:=true;
              Chart1.AnimatedZoom:=true;
              Chart1.AnimatedZoomSteps:=8;
              Chart2.AnimatedZoom:=true;
              Chart2.AnimatedZoomSteps:=8;
              Xfr:=dFLfr*Ttek*86400*Uo/m;
              RazrabGrafik(TTek);
              TTek:=TTek+alfT*dTras;
              eVremia.Text:=FloatToStr(Ttek);
              repaint;
              Sleep(200);
            until (TTek>Tras);
           end;
procedure TForm1.bZamedlenieClick(Sender: TObject);
  begin
    alfT:=alfT*0.5;
  end;

procedure TForm1.bUskorenieClick(Sender: TObject);
  begin
    alfT:=alfT*2;
  end;
Admin: Пользуемся тегами!

Вот у меня есть такой цикл по времени Ttek. Я хочу на форме поставить две кнопки : "Ускорить" и "Замедлить". Но процедуры друг другу не подчиняются. То есть пока не выполнится основной цикл, замедление или ускорение не происходит.

Последний раз редактировалось Admin, 13.03.2009 в 15:00.
Ответить с цитированием
  #4  
Старый 13.03.2009, 16:17
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,031
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ага, понятно. Т.е. не изменить скорость работы самомго цикла, а изменить шаг шкалы.

А где описана переменная alfT?
Ответить с цитированием
  #5  
Старый 13.03.2009, 16:58
Grafrada Grafrada вне форума
Прохожий
 
Регистрация: 13.03.2009
Сообщения: 18
Репутация: 10
По умолчанию

Код:
private
    { Private declarations }
     procedure GrafikFLev;
     procedure RazrabGrafik(t: extended);
  public
    { Public declarations }
  end;

procedure Leveret(Sv,Svo,Sno,nv,nn,mu_v,mu_n:extended; var fkv,fkn,FL:extended);

var
  Form1: TForm1;
  alfT: extended;
implementation

lmikle: Хде теги??? Хто в read-jnly захотел?
Ответить с цитированием
  #6  
Старый 13.03.2009, 18:17
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,031
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

1. Я в твоем коде не вижу нигде добавления точек в диаграммы.
2. Проверь все типы данных. Не может там быть попутного округления, типа вычислений с использованием целых и дробных переменных. В этом случае будет округление или нет зависит от порядка следования переменных.

А так по логике вполне нормально.
Ответить с цитированием
  #7  
Старый 13.03.2009, 19:37
Grafrada Grafrada вне форума
Прохожий
 
Регистрация: 13.03.2009
Сообщения: 18
Репутация: 10
По умолчанию

Код:
procedure TForm1.RazrabGrafik(t: extended);
  //Ïðîöåäóðà ïîñòðîåíèÿ ãðàôèêà ðàçðàáîòêè
  const xo=100;
        dds=0.00001;
  var fkv,fkn,FL,FL1,dFL,dPk,fkv1,fkn1 :  extended;
       Sl,Sp,Scr,F,deS:  extended;
      Iss,Isx: integer;
      Sgr,Fvn,Tpr,Svl,Svp,Fun,Svsr,dFLgr:extended;
  begin

     //Chart3.Enabled:=true;
     //Chart3.Visible:=true;
     Chart1.BottomAxis.Automatic := false;
     Chart1.BottomAxis.Maximum:=L;
     Chart1.BottomAxis.Minimum:=0;
     Chart1.BottomAxis.Title.Caption:='Äëèíà ãàëåðåè, ì';
     Chart1.LeftAxis.Automatic := false;
     Chart1.LeftAxis.Title.Caption:='Âîäîíàñûùåííîñòü';
     Chart1.LeftAxis.Maximum:=1;
     Chart1.LeftAxis.Minimum:=0;
     Chart1.RightAxis.Automatic := false;
     Chart1.RightAxis.Title.Caption:='Äàâëåíèå, ÌÏà';
     Chart1.RightAxis.Maximum:=Pk;
     Chart1.RightAxis.Minimum:=0;

     Series1.clear;
     Series2.clear;
     Series3.clear;
     Series4.clear;
     Series5.clear;
     //Series6.clear;
     Series7.clear;
     //Series8.clear;
     Leveret(Svo,Svo,Sno,nv,nn,mu_v,mu_n,fkv,fkn,FL);
     mXi[0]:=L;
     mPi[0]:=0;
     if (Xfr<L) then
     begin
       mSv[0]:=Svo;
       mSv[1]:=Svo;
       mXi[1]:=Xfr;
       mPi[1]:=dPo*(L-Xfr);
       mPi[2]:=dPo*(L-Xfr);
       for Iss:=2 to Ns do
       begin
         Sv:=Svfr+(1-Svfr)*(Iss-2)/(Ns-2);
         mSv[Iss]:=Sv;
         Leveret(Sv+dds,Svo,Sno,nv,nn,mu_v,mu_n,fkv,fkn,FL);
         Leveret(Sv-dds,Svo,Sno,nv,nn,mu_v,mu_n,fkv1,fkn1,FL1);
         dFL:=(FL-FL1)/(2*dds);
         mXi[Iss]:=dFL*t*86400*Uo/m;
         if (Iss=2) then mPi[2]:=dPo*(L-Xfr)
         else  mPi[Iss]:=mPi[Iss-1]+(mXi[Iss-1]-mXi[Iss])*Uo*Mu_v*1000/(k*(fkv+mu_v*fkn/mu_n));
       end
     end else
     begin
       mSv[0]:=Svo;
       Sl:=Svfr;
       Sp:=1-Svo;
       repeat
         Scr:=0.5*(Sl+Sp);
         Leveret(Scr+dds,Svo,Sno,nv,nn,mu_v,mu_n,fkv,fkn,FL);
         Leveret(Scr-dds,Svo,Sno,nv,nn,mu_v,mu_n,fkv1,fkn1,FL1);
         dFL:=(FL-FL1)/(2*dds);
         F:=L-dFL*t*86400*Uo/m;
         if (F>0) then Sp:=Scr else Sl:=Scr;
         deS:=abs(Sp-Sl);
       until (deS<1e-4);
       mSv[0]:=Scr;
       for Iss:=1 to Ns do
       begin
         Sv:=Scr+(1-Scr)*Iss/Ns;
         mSv[Iss]:=Sv;
         Leveret(Sv+dds,Svo,Sno,nv,nn,mu_v,mu_n,fkv,fkn,FL);
         Leveret(Sv-dds,Svo,Sno,nv,nn,mu_v,mu_n,fkv1,fkn1,FL1);
         dFL:=(FL-FL1)/(2*dds);
         mXi[Iss]:=dFL*t*86400*Uo/m;
         mPi[Iss]:=mPi[Iss-1]+(mXi[Iss-1]-mXi[Iss])*Uo*Mu_v*1000/(k*(fkv+mu_v*fkn/mu_n));
       end
     end;
     dPk:=Pk-mPi[Ns];
     for Iss:=Ns downto 0 do
     begin
       Series7.AddXY(mXi[Iss],mSv[Iss],'',clTeeColor);
       Series5.AddXY(mXi[Iss],dPk+mPi[Iss],'',clTeeColor);
       Tpr:=L*m/(uo*dFLfr*86400);
       Sl:=Svfr;
       Sp:=1;
       if t>Tpr then
       begin
       repeat
         Svsr:=0.5*(Sl+Sp);
         Leveret(Svsr,Svo,Sno,nv,nn,mu_v,mu_n,fkv,fkn,FL);
         Leveret(Svsr+dds,Svo,Sno,nv,nn,mu_v,mu_n,fkv,fkn,FL);
         Leveret(Svsr-dds,Svo,Sno,nv,nn,mu_v,mu_n,fkv1,fkn1,FL1);
         dFL:=(FL-FL1)/(2*dds);
         Fun:=dFL-m*L/(uo*t*86400);
         if (Fun>0)
         then Sl:=Svsr
         else Sp:=Svsr;
       until (abs(Fun)<dds);
       Sgr:=Svsr;
       Leveret(Sgr,Svo,Sno,nv,nn,mu_v,mu_n,fkv,fkn,FL);
       Series8.AddXY(t,FL,'',clTeeColor);
       end;
     end;
Ответить с цитированием
  #8  
Старый 13.03.2009, 19:39
Grafrada Grafrada вне форума
Прохожий
 
Регистрация: 13.03.2009
Сообщения: 18
Репутация: 10
По умолчанию

Это седьмая серия. Ну, как, есть ли у тебя какие-нибудь предложения. Очень буду тебе благодарен!!!
Ответить с цитированием
  #9  
Старый 13.03.2009, 19:40
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,031
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

А всавь ка внутри цикла несколько Application.ProcessMessages.
а то может просто у тебя сообщения не успевают обработаться.
Ответить с цитированием
  #10  
Старый 13.03.2009, 19:41
Grafrada Grafrada вне форума
Прохожий
 
Регистрация: 13.03.2009
Сообщения: 18
Репутация: 10
По умолчанию

Как же мне ускорить этот цикл. Мне сказали, что есть какие-то функции, отвечающие за это. Но я нигде не могу найти(((
Ответить с цитированием
  #11  
Старый 13.03.2009, 19:42
Grafrada Grafrada вне форума
Прохожий
 
Регистрация: 13.03.2009
Сообщения: 18
Репутация: 10
По умолчанию

Да, я читал про это. Но там не очень подробно было описано.
Ответить с цитированием
  #12  
Старый 13.03.2009, 19:48
Grafrada Grafrada вне форума
Прохожий
 
Регистрация: 13.03.2009
Сообщения: 18
Репутация: 10
По умолчанию

Спасибо большое тебе!!! Работает!!! Я твой должник.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 19:11.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter