
19.04.2009, 22:33
|
Активный
|
|
Регистрация: 29.03.2009
Сообщения: 300
Репутация: 94
|
|
Вот. На форме компонент TTimer и TImage с равными шириной и высотой.
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;
type
TForm1 = class(TForm)
Image1: TImage;
Timer1: TTimer;
procedure Timer1Timer(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
Angle: Real;
CircleRect: TRect;
public
{ Public declarations }
SectorCount: Word;
Radius: Integer;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
SectorCount := 16; // вот здесь задаётся количество секторов
Radius := 100; // а здесь — радиус круга
Angle := 2 * Pi / SectorCount;
CircleRect := Rect(Image1.Width div 2 - Radius, Image1.Height div 2 - Radius,
Image1.Width div 2 + Radius, Image1.Height div 2 + Radius);
Randomize();
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var
i: Byte;
X_1, X_2, Y_1, Y_2: Real;
CurAngle: Real;
begin
X_1 := Image1.Width / 2 + Radius; Y_1 := Image1.Height / 2;
CurAngle := Angle;
for i := 1 to SectorCount do
begin
Image1.Canvas.Brush.Color := Random($00FFFFFF);
X_2 := Radius * Cos(CurAngle) + Image1.Width / 2;
Y_2 := Image1.Height / 2 - Radius * Sin(CurAngle);
Image1.Canvas.Pie(CircleRect.Left, CircleRect.Top, CircleRect.Bottom,
CircleRect.Right, Round(X_1), Round(Y_1), Round(X_2),
Round(Y_2));
X_1 := X_2; Y_1 := Y_2;
CurAngle := CurAngle + Angle;
end;
end;
end.
P.S. Цвета секторов генерируются случайно.
|