[ tušek @ 26.10.2004. 19:55 ] @
u škloi imamo zadatak napraviti njihalo koje bi nakon nekog vremena zbog nekog otpora trebalo prestati sa njihanjem, ja sam napravio njihalo ali ne znam kako ga nakon nekog vremena zaustaviti. molim pomoć!!!


unaprijed zahvaljujem


ovo sam do sad napravio


unit Unit1;

interface

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

type
TForm1 = class(TForm)
Timer1: TTimer;
procedure Timer1Timer(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
x0:real=320;
y0:real=240;
alfa:real=(pi/6);
l:real=3;
ex:real=60;
ey:real=60;
deltaalfa:real=-0.1;


implementation


{$R *.dfm}


procedure TForm1.Timer1Timer(Sender: TObject);
begin
form1.Canvas.Pen.Color:=clbtnface;
form1.canvas.moveto(trunc(x0),trunc(y0));
form1.Canvas.lineto(trunc(x0-l*sin(alfa)*ex),trunc(y0+l*cos(alfa)*ey));
form1.canvas.Ellipse(trunc(x0-l*sin(alfa)*ex-5),trunc(y0+l*cos(alfa)*ey-5),trunc(x0-l*sin(alfa)*ey+5),trunc(y0+l*cos(alfa)*ey+5));
alfa:=alfa+deltaalfa;

if (alfa<(-pi/3)) or (alfa>(pi/3)) then
alfa:=alfa-0.01;
deltaalfa:=-deltaalfa;
form1.Canvas.Pen.Color:=clblue;
form1.canvas.moveto(trunc(x0),trunc(y0));
form1.Canvas.lineto(trunc(x0-l*sin(alfa)*ex),trunc(y0+l*cos(alfa)*ey));
form1.canvas.Ellipse(trunc(x0-l*sin(alfa)*ex-5),trunc(y0+l*cos(alfa)*ey-5),trunc(x0-l*sin(alfa)*ey+5),trunc(y0+l*cos(alfa)*ey+5));

end;

procedure TForm1.FormCreate(Sender: TObject);
begin

end;

end.
[ Slavisa @ 26.10.2004. 20:57 ] @
Code:

procedure TForm1.Button1Click(Sender: TObject);
begin
  Timer1.Enabled := FALSE;
end;
[ bancika @ 27.10.2004. 01:16 ] @
bratance, mnogo si ga zakomplikovao. evo probaj ovako:
stavi image1 dimenzija 400 x 300 na formu i timer1 sa intervalom 50ms

klatno se krece izmedju uglova min i pi - min, sa pocetnim uglom pi/2. probaj neke druge vrednosti ako hoces...d ti je pravac, +1 za levo, -1 za desno (ili obrnuto). kada se stigne do kraja menja se pravac ali se i koriguje min ugao zbog uticaja otpora. to bi moglo i u svakom koraku da se radi ali za manje vrednosti...skoro svejedno.

Code:

var
  Min: extended = pi/4;
  alfa: extended = pi/2;
  d: extended = -1;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if ((alfa > min) and (d = -1)) or ((alfa < pi - min) and (d = 1)) then
   begin
     alfa := alfa + d * 0.1;
     Image1.Canvas.Rectangle(0, 0, 400, 300);
     Image1.Canvas.MoveTo(200, 0);
     Image1.Canvas.LineTo(Round(200 + 200* cos(alfa)), Round(300 * sin(alfa)));
     Image1.Refresh;
   end
  else
   begin
     d := -d;
     min := min + 0.05;
     Timer1.Interval := Timer1.Interval + 2;
   end;
end;

nisam crtao i lopticu, to mozes i sam...samo linija koja se klati

pozdravi