Delphi Tutorial


 

      

Download this example

      First assigned following global variables. In here Lines array hold the coordinates information for the lines.      

type
     TLines = Record
          OldX1, OldY1, OldX2, OldY2 : Integer;
          Vx1, Vy1, Vx2, Vy2 : Real;
End;

private

     { Private declarations }
     MaxX, MaxY, MaxLines : Integer;
     Lines : Array [1..20] Of TLines;
     FirstDraw : Boolean;

         On form create, initialize all the variables, initial line coordinates, line width, transparent form background, no. of moving lines …etc.

procedure TForm1.FormCreate(Sender: TObject);
Var
     I : Integer;
begin
     { Set transparent background }
     Brush.Style:=bsClear;
     MaxLines:=2;
     MaxX:=Screen.Width;
     MaxY:=Screen.Height;

     { Setup initial coordinates & velocities }
     For I:=1 To MaxLines Do
     Begin
          Lines[I].OldX1:=Random(MaxX);
          Lines[I].OldX2:=Random(MaxX);
          Lines[I].OldY1:=Random(MaxY);
          Lines[I].OldY2:=Random(MaxY);
          Lines[I].Vx1:=Random(10)+5;
          Lines[I].Vx2:=Random(10)+5;
          Lines[I].Vy1:=Random(10)+5;
          Lines[I].Vy2:=Random(10)+5;
     End;
     FirstDraw:=True;

     { Set line width }
     Canvas.Pen.Width:=20;
     Canvas.Pen.Mode:=pmNotXor;
end;

This one does all the drawing and erasing previous lines.

procedure
TForm1.UpdateLines(Sender: TObject);
Var
     I, X1, Y1, X2, Y2 : Integer;
     a : Real;
begin
     If Not FirstDraw Then
     For I:=1 to MaxLines Do
     Begin
          { Erase previous lines }
          Canvas.MoveTo(Lines[I].OldX1,Lines[I].OldY1);
          Canvas.LineTo(Lines[I].OldX2,Lines[I].OldY2);
     End;

     { Set acceleration }
     a:=1;

     For I:=1 To MaxLines Do
     Begin
          { Set new coordinates }
          X1:=Lines[I].OldX1+Round(Lines[I].Vx1+0.5*a*2);
          Y1:=Lines[I].OldY1+Round(Lines[I].Vy1+0.5*a*2);
          X2:=Lines[I].OldX2+Round(Lines[I].Vx2+0.5*a*2);
          Y2:=Lines[I].OldY2+Round(Lines[I].Vy2+0.5*a*2);

          { Check velocity }
          If (X1>=MaxX) Or (X1<=0) Then
               Lines[I].Vx1:=-1*Lines[I].Vx1;
          If (X2>=MaxX) Or (X2<=0) Then
               Lines[I].Vx2:=-1*Lines[I].Vx2;
          If (Y1>=MaxY) Or (Y1<=0) Then
               Lines[I].Vy1:=-1*Lines[I].Vy1;
          If (Y2>=MaxY) Or (Y2<=0) Then
               Lines[I].Vy2:=-1*Lines[I].Vy2;

          { Check coodinates }
          If X1<=0 Then
               X1:=0;
          If X1>=MaxX Then
               X1:=MaxX;
          If X2<=0 Then
               X2:=0;
          If X2>=MaxX Then
               X2:=MaxX;
          If Y1<=0 Then
               Y1:=0;
          If Y1>=MaxY Then
               Y1:=MaxY;
          If Y2<=0 Then
               Y2:=0;
          If Y2>=MaxY Then
               Y2:=MaxY;

          Canvas.MoveTo(X1,Y1);
          Canvas.LineTo(X2,Y2);
          Lines[I].OldX1:=X1;
          Lines[I].OldY1:=Y1;
          Lines[I].OldX2:=X2;
          Lines[I].OldY2:=Y2;
     End;

     FirstDraw:=False;
end;

 

Use system time component to call above procedure.

procedure TForm1.Timer1Timer(Sender: TObject);
begin
     UpdateLines(Self);
end;

 

In order to exit from this program, I use On Key Down event to close the program.

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
     Close;
end;

DOWNLOAD this example

Click here to download this complete example for Delphi 6. (File size 8KB)

 

Go top

 


Previous Page First Page Next Page
 
Copyright © 2003 digitalcoding.com. All rights reserved.