-
-
{$mode objfpc}{$H+}
-
interface
-
uses Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls;
-
-
type
-
{ TForm1 }
-
TForm1 = class(TForm)
-
Timer1: TTimer;
-
procedure FormCreate(Sender: TObject);
-
procedure Timer1Timer(Sender: TObject);
-
private
-
{ private declarations }
-
public
-
{ public declarations }
-
end;
-
//Создаем новый объект на основе стандартного шейпа
-
type TMyShape=class(TShape)
-
public
-
sx,sy : integer; //Добавляем новые свойства объекту (скорости по оси X И Y)
-
end;
-
-
const Count=20;//Количество объектов, которые будем создавать
-
-
var Form1: TForm1;
-
-
implementation
-
{ TForm1 }
-
procedure TForm1.FormCreate(Sender: TObject);
-
var i : integer;//Переменная для цикла
-
buf :TMyShape;//Переменная для создания объекта
-
begin
-
randomize;
-
for i:=0 to Count do begin
-
buf:=TMyShape.Create(form1);//Создаем объект
-
buf.Width:=20;//Задаем ширину
-
buf.Height:=20;//Задаем высоту
-
buf.Left:=Random(form1.Width);//Задаем положение по оси X
-
buf.Top:=Random(form1.Height);//Задаем положение по оси Y
-
buf.Brush.Color:=RGBToColor(random(255),random(255),random(255));//Задаем случайный цвет
-
buf.SX:=random(3)+5;//Задаем случайную скорость по оси X
-
buf.SY:=random(3)+5;//Задаем случайную скорость по оси Y
-
buf.Shape:=stCircle;//Задаем внешниц вид объектов
-
buf.Parent:=form1;//Указываем родительский объект
-
end;
-
end;
-
-
procedure TForm1.Timer1Timer(Sender: TObject);
-
var i : integer;
-
begin
-
//Цикл по всем компонентам на форме
-
for i:=0 to Form1.ComponentCount-1 do begin
-
//Если компонент I является компонентом с типом TMyShape
-
if (Components[i] is TMyShape) then begin //Тогда сдвинуть компонент по X и Y
-
(Components[i] as TMyShape).left:=(Components[i] as TMyShape).left+(Components[i] as TMyShape).SX;
-
(Components[i] as TMyShape).Top:=(Components[i] as TMyShape).Top+(Components[i] as TMyShape).SY;
-
//Столкновение с правой границей формы
-
if ((Components[i] as TMyShape).left>=form1.ClientWidth-(Components[i] as TMyShape).width) then begin
-
(Components[i] as TMyShape).left:=form1.ClientWidth-(Components[i] as TMyShape).width;
-
(Components[i] as TMyShape).SX:=-(Components[i] as TMyShape).SX;
-
end;
-
//Столкновение с левой границей формы
-
if ((Components[i] as TMyShape).left<=0) then begin
-
(Components[i] as TMyShape).left:=0;
-
(Components[i] as TMyShape).SX:=-(Components[i] as TMyShape).SX;
-
end;
-
//Столкновение с нижней границей формы
-
if ((Components[i] as TMyShape).top>=form1.ClientHeight-(Components[i] as TMyShape).height) then begin
-
(Components[i] as TMyShape).top:=form1.ClientHeight-(Components[i] as TMyShape).height;
-
(Components[i] as TMyShape).SY:=-(Components[i] as TMyShape).SY;
-
end;
-
//Столкновение с верхней границей формы
-
if ((Components[i] as TMyShape).top<=0) then begin
-
(Components[i] as TMyShape).top:=0;
-
(Components[i] as TMyShape).SY:=-(Components[i] as TMyShape).SY;
-
end;
-
end;
-
end;
-
end;
-
initialization
-
{$I unit1.lrs}
-
end.