Показать сообщение отдельно
  #7  
Старый 05.11.2011, 00:31
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Вот для рисования колец:
Код:
unit Unit19;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Spin, ExtCtrls;

type
  TForm2        = class(TForm)
    Image1      : TImage;
    Panel1      : TPanel;
    Label1      : TLabel;
    Label2      : TLabel;
    Label3      : TLabel;
    Label4      : TLabel;
    OuterRadius: TSpinEdit;
    InnerRadius: TSpinEdit;
    CountCircle: TSpinEdit;
    CountSectors: TSpinEdit;
    Timer1: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2  : TForm2;
  bmp    : TBitmap;
  Center : TPoint;

implementation

uses
  Math;

{$R *.dfm}

procedure TForm2.FormCreate(Sender: TObject);
begin
  bmp := TBitmap.Create;
  bmp.Width  := Image1.Width;
  bmp.Height := Image1.Height;
  Center.X := Image1.Width div 2;
  Center.Y := Image1.Height div 2;
  InnerRadius.MinValue := 10;
  InnerRadius.MaxValue := (Image1.Width - 10) div 2;
  InnerRadius.Value    := InnerRadius.MaxValue;
end;

procedure TForm2.FormDestroy(Sender: TObject);
begin
  bmp.Free;
end;

procedure TForm2.Timer1Timer(Sender: TObject);
var
  I, J  : Integer;
  X, Y  : Integer;
begin
  bmp.Canvas.Brush.Style := bsSolid;
  bmp.Canvas.Brush.Color := clBtnFace;
  bmp.Canvas.FillRect(Image1.ClientRect);
  bmp.Canvas.Brush.Style := bsClear;
  I := InnerRadius.Value div CountCircle.Value;

  for J := 1 to CountCircle.Value do
    bmp.Canvas.Ellipse(Center.X - J * I, Center.Y - J * I, Center.X + J * I, Center.Y + J * I);

  if CountSectors.Value > 1 then
    for J := 0 to CountSectors.Value - 1 do
    begin
      bmp.Canvas.LineTo(Center.X, Center.Y);
      X := Round(Sin(J / CountSectors.Value * (pi * 2)) * InnerRadius.Value);
      Y := Round(Cos(J / CountSectors.Value * (pi * 2)) * InnerRadius.Value);
      bmp.Canvas.MoveTo(X + Center.X, Y + Center.Y);
    end;

  Image1.Canvas.Draw(0, 0, bmp);
end;

end.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием