Форум программистов
 
О проблемах, например, с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Ответ
 
Опции темы
Старый 07.10.2010, 20:46   #1
Irk-O
 
Регистрация: 07.10.2010
Сообщений: 6
Радость анимация

добрый вечер, помагите переделать программу:надо чтобы график строился поточечно с постепенным появлением точек на белом экране от левого конца отрезка к правому. отрезок [-5,5] функция:
у=3*х*х . понимаю,что надо вставить таймер,но не могу его полноценно связать со всей программой. основная программа получилась такая:
Код:
procedure TForm1.BitBtn1Click(Sender: TObject);
const a=-5;b=5;h=0.01;
var i,n:integer;
x,mx,my:real;
minx,maxx,miny,maxy,sx,sy:real;
begin
with form1.canvas do
begin
brush.Color:=clwhite;
fillrect(rect(0,0,900,900));
end;
n:=round(abs(b-a)/h);
x:=a; minx:=a; maxx:=a;
miny:=3*x*x; maxy:=3*x*x;
for i:=0 to n do
begin
if minx>x then minx:=x;
if maxx<x then maxx:=x;
if miny>(3*x*x) then miny:=(3*x*x);
if maxx<(3*x*x) then maxx:=(3*x*x);
x:=x+h;
end;
with paintbox1.canvas do
begin
mx:=400/(maxx-minx);
sx:=-minx*mx;
my:=150/(miny-maxy);
sy:=-maxy*my;
x:=a;
for i:=0 to n do
begin
pixels[round(x*mx+sx),round((3*x*x)*my+sy)]:=clblue;
x:=x+h;
end;
pen.color:=clgreen;
moveto(0,round(sy));
lineto(257,round(sy));
moveto(round(sx),0);
lineto(round(sx),241);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
close;
end;
end.
зарание спасибо

Последний раз редактировалось Stilet; 07.10.2010 в 21:26.
Irk-O вне форума Ответить с цитированием
Старый 07.10.2010, 21:27   #2
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

Код:
    ...
    x:=a;
    for i:=0 to n do begin
      pixels[round(x*mx+sx),round((3*x*x)*my+sy)]:=clblue;
      Application.ProcessMessages;
      sleep(10);
      x:=x+h;
    end;
    pen.color:=clgreen;
    ...
Прик вне форума Ответить с цитированием
Старый 07.10.2010, 21:31   #3
Irk-O
 
Регистрация: 07.10.2010
Сообщений: 6
Счастье

огромное спасибо,3 часа убила,а все гениальное просто. огромное спасибо
Irk-O вне форума Ответить с цитированием
Старый 07.10.2010, 21:32   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,840
По умолчанию

Кидай на форму таймер, и поменяй код на такое:
Код:
unit Unit1;

interface

uses   crtfox,
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    PaintBox1: TPaintBox;
    Timer1: TTimer;
    procedure Button1Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
const a=-5;b=5;h=0.01;
var    x,mx,my:real;     i,n:integer;
minx,maxx,miny,maxy,sx,sy:real;
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

begin
 Color:=clWhite;
 n:=round(abs(b-a)/h);
 x:=a; minx:=a; maxx:=a;
 miny:=3*x*x; maxy:=3*x*x;
for i:=0 to n do begin
 if minx>x then minx:=x;
 if maxx<x then maxx:=x;
 if miny>(3*x*x) then miny:=(3*x*x);
 if maxx<(3*x*x) then maxx:=(3*x*x);
 x:=x+h;
end;

with paintbox1.canvas do begin
 mx:=400/(maxx-minx);
 sx:=-minx*mx;
 my:=150/(miny-maxy);
 sy:=-maxy*my;
 x:=a;
 pen.color:=clgreen;
 moveto(0,round(sy));
 lineto(257,round(sy));
 moveto(round(sx),0);
 lineto(round(sx),241);
end;
i:=0;
Timer1.Enabled:=true;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
with paintbox1.canvas do begin
 pixels[round(x*mx+sx),round((3*x*x)*my+sy)]:=clblue;
 x:=x+h;
end;
inc(i);
if i>=n then Timer1.Enabled:=false;
end;
end.
Смысл понятен?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Анимация zumm Свободное общение 13 12.07.2010 13:37
анимация Terrance! Помощь студентам 4 02.06.2010 15:50
Анимация Madsqui Microsoft Office Excel 3 30.05.2010 22:53
Анимация SanekIrk Общие вопросы Delphi 2 15.08.2008 20:57
Анимация SanekIrk Общие вопросы Delphi 11 08.08.2008 14:24


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS
Здесь нужно купить рекламу за 7 тыс руб в месяц! )
пишите сюда - alarforum@yandex.ru
ИКС 840