28.02.2012, 04:51
|
|
.
|
|
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
|
|
При использовании класса-наследника, меняется немного:
Код:
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Graphics;
type
TCustomBabina = class
private
fCanvas : TCanvas;
fAlpha,
fSpeed,
fDrift,
fScale : Single;
protected
procedure Babina(a : Single; wid, x, y, r : Integer);
procedure Line(x1, y1, x2, y2, wid : Integer);
public
procedure Draw;
property Alpha : Single read fAlpha write fAlpha;
property Speed : Single read fSpeed write fSpeed;
property Drift : Single read fDrift write fDrift;
property Scale : Single read fScale write fScale;
end;
TBabina = class(TCustomBabina)
public
constructor Create(Canvas : TCanvas);
property Alpha;
property Speed;
property Drift;
property Scale;
end;
implementation
procedure TCustomBabina.Draw; // расчет новых значений
var
l1, l2 : Single;
begin
l1 := 7 - Round(fDrift / 1.5) mod 25;
Line(75 + Round(l1), 206, 300 + Round(l1), 206, 7);
l1 := Frac(fDrift / 200 / Pi) * Pi;
Babina(fAlpha / 180 * Pi + l1, 10, 300, 100, 100);
l2 := Frac(fDrift / 150 / Pi) * Pi;
Babina(fAlpha / 180 * Pi + l2, 10, 75, 125, 75);
if (Round(l1 * 1000) = 0) and (Round(l2 * 1000) = 0) then
fDrift := 0;
fDrift := fDrift + fSpeed;
end;
procedure TCustomBabina.Line(x1, y1, x2, y2, wid : Integer); // рисование толстой пунктирной линии
var
I : Integer;
begin
with fCanvas do
begin
Pen.Width := 1;
Pen.Style := psDash;
Pen.Color := clBlack;
for I := 0 to wid - 1 do
begin
MoveTo(Round(x1 * fScale), Round(y1 * fScale) - I);
LineTo(Round(x2 * fScale), Round(y2 * fScale) - I);
end;
end;
end;
procedure TCustomBabina.Babina(a : Single; wid, x, y, r : Integer); // рисование бабины(колесо с 4 спицами)
begin
with fCanvas do
begin
Pen.Color := clMaroon;
Pen.Width := wid;
wid := wid div 2;
Brush.Color := clBtnFace;
Ellipse(Round((x + wid - r) * fScale), Round((y + wid - r) * fScale), Round((x + wid + r) * fScale), Round((y + wid + r) * fScale));
Dec(r);
MoveTo(Round((x + wid + Round(r * Sin(a))) * fScale), Round((y + wid - Round(r * Cos(a))) * fScale));
LineTo(Round((x + wid - Round(r * Sin(a))) * fScale), Round((y + wid + Round(r * Cos(a))) * fScale));
MoveTo(Round((x + wid - Round(r * Cos(a))) * fScale), Round((y + wid - Round(r * Sin(a))) * fScale));
LineTo(Round((x + wid + Round(r * Cos(a))) * fScale), Round((y + wid + Round(r * Sin(a))) * fScale));
end;
end;
constructor TBabina.Create(Canvas : TCanvas);
begin
inherited Create;
fCanvas := Canvas;
end;
end.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
|