unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;
type
TForm1 = class(TForm)
Timer1: TTimer;
Button1: TButton;
Label1: TLabel;
procedure FormPaint(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
const
x0=100;
y0=200;
rast=250;
var
Form1: TForm1;
a:integer;
n1,n2,r,xc,k:integer;
var i:integer;
implementation
{$R *.dfm}
procedure stakan(x,y:integer);
var
d:integer;
begin
d:=10;
with Form1.Canvas do
begin
Pen.Mode:=pmNotXor;
pen.Color:=clBlack;
pen.Width:=2;
brush.Color:=clSkyBlue;
Ellipse(x-3*d,y,x+3*d,y+2*d);
MoveTo(x-3*d,y+d);
LineTo(x-5*d,y+d+9*d);
MoveTo(x+3*d,y+d);
LineTo(x+5*d,y+d+9*d);
Arc(x-5*d,y+8*d,x+5*d,y+12*d,x-5*d,y+10*d,x+5*d,y+10*d);
end;
end;
procedure dvizh;
begin
n1:=random(3)+1;
n2:=n1;
while n2=n1 do n2:=random(3)+1;
xc:=x0+round((n1+n2-2)*rast/2);
r:=abs(round((n1-n2)*rast/2));
a:=0;
form1.Button1.Enabled:=false;
form1.Timer1.enabled:=true;
end;
procedure TForm1.FormPaint(Sender: TObject);
begin
stakan(x0,y0); stakan(x0+rast,y0); stakan(x0+2*rast,y0);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
randomize;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
stakan(xc+round(r*cos(a/180*pi)),y0+round(r*sin(a/180*pi)));
stakan(xc-round(r*cos(a/180*pi)),y0-round(r*sin(a/180*pi)));
inc(a,5);
stakan(xc+round(r*cos(a/180*pi)),y0+round(r*sin(a/180*pi)));
stakan(xc-round(r*cos(a/180*pi)),y0-round(r*sin(a/180*pi)));
if a>=180 then
begin
timer1.Enabled:=false;
button1.Enabled:=true;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin // вот этот цикл не работает
for i:=1 to 10 do
begin
dvizh;
label1.Caption:=inttostr(i);
end;
end;
end.
посмотрите что не так, уже все проверил...
Добавлено через 2 мин.
да, забыл. на форму надо поставить таймер - неактивный с задержкой 1, кнопку, и для проверки цикла - лабел.