unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, ExtCtrls;
type
TForm1 = class(TForm)
BitBtn1: TBitBtn;
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
shape:array[1..10] of TShape;
implementation
{$R *.dfm}
procedure TForm1.BitBtn1Click(Sender: TObject); //ищем и красим
const kolichestvo=10;
var i,j,ind_i1,ind_i2:integer;
l1,l:real;
begin
ind_i1:=1; //для начала берем растояние между первым и вторым
ind_i2:=2;
//находим это растояние
l:=sqrt(sqr(shape[1].left+shape[1].width div 2 - shape[2].left-shape[2].width div 2)+
sqr(shape[1].top+shape[1].height div 2 - shape[2].top-shape[2].height div 2));
l1:=l;
for i:=1 to kolichestvo do
for j:=1 to kolichestvo do
begin
if i<>j then
begin
l1:=sqrt(sqr(shape[i].left+shape[i].width div 2 - shape[j].left-shape[j].width div 2)+
sqr(shape[i].top+shape[i].height div 2 - shape[j].top-shape[j].height div 2));
//находим растояние между остальными
if l1<l then //и проверяем эго с минимальным
begin
l:=l1; //если найденое меньше то запоминаем новое минимальное растояние
ind_i1:=i; //запоминаем их номера
ind_i2:=j;
end;
end;
end;
shape[ind_i1].brush.color:=clred; //красим
shape[ind_i2].brush.color:=clred;
end;
procedure TForm1.Button1Click(Sender: TObject); //меняем положения
var i:integer;
begin
for i:=1 to 10 do
begin
shape[i].top:=random(200);
shape[i].left:=random(300);
shape[i].width:=random(5)+10;
shape[i].height:=shape[i].width;
shape[i].Brush.Color:=clwhite;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
var i:integer;
begin
for i:=1 to 10 do
begin
shape[i]:=TShape.create(self); //создаем шейпы
shape[i].parent:=form1;
shape[i].top:=random(200);
shape[i].left:=random(300);
shape[i].width:=random(5)+10;
shape[i].height:=shape[i].width;
end;
end;
end.