unit Sinikayra; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls; type TSinikayra = class(TPaintBox) private FAkselinLeveys: double; FVali: integer; FapuAkseli: integer; procedure SetAkselinLeveys(const Value: double); procedure SetVali(Value: integer); protected public constructor Create(AOwner:TComponent); Override; property apuAkseli : integer read FapuAkseli write FapuAkseli default 2; published { x-akselin leveys kuvassa, default -2*pi, 2*pi } property AkselinLeveys : double read FAkselinLeveys write SetAkselinLeveys; property Vali : integer read FVali write SetVali default 5 ; procedure piirra; end; procedure Register; implementation procedure Register; begin RegisterComponents('Samples', [TSinikayra]); end; { TSinikayra } constructor TSinikayra.Create(AOwner: TComponent); begin inherited; Canvas.Pen.Style := psSolid; Canvas.Pen.Color := clBlack; Canvas.Pen.Width := 1; { x-akseli } Canvas.MoveTo(0,ClientHeight div 2); Canvas.LineTo(ClientWidth,ClientHeight); { y-akseli } Canvas.MoveTo(ClientWidth div 2, 0); Canvas.LineTo(ClientWidth div 2,ClientHeight); Canvas.Pen.Width := 3; Canvas.Pen.Color := clRed; apuAkseli := 2; AkselinLeveys := apuAkseli; Vali := 5; end; procedure TSinikayra.piirra; var x,y,kork2,leve2, I : integer; begin kork2 := ClientHeight div 2; leve2 := ClientWidth div 2; { alkutila, laitetaan kynä vasemmaisimpaan laitaan oikeaan kohtaan } y := StrToInt( FloatToStrF( (sin(AkselinLeveys*pi) * kork2), ffFixed, 7, 0) ) + kork2; x := 0; Canvas.MoveTo(x,y); for I := 0 to ClientWidth do begin if (( I mod vali ) <> 0 ) then continue; { sinin arvo skaalataan kuvaan sopivaksi } AkselinLeveys := 2 * ( I - leve2 ) / leve2; { Pisteen paikka y-akselilla } y := StrToInt( FloatToStrF( (sin(AkselinLeveys*pi) * kork2), ffFixed, 7, 0) ) + kork2; x := I; Canvas.LineTo(x,y); end; end; procedure TSinikayra.SetAkselinLeveys(const Value: double); begin FAkselinLeveys := Value; end; procedure TSinikayra.SetVali(Value: integer); begin if (Value <= 0) then Value := 1; FVali := Value; end; end.