unit ksimline;
{------------------------------------------------------------------------------}
{
  KSimLine - This file include Kave 2000 Simulation for SimLine-components:
    TsLine

   Author:  Vesa Lappalainen
   Date:    9.9.1996
   Changes: 15.3.1998/vl
            + saved as own unit with edit form
}
{------------------------------------------------------------------------------}

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ksimmot, savepos, StdCtrls, kinicomp, KParam, kComp, ExtCtrls, kavesimu;

type
  TsLine = class(TsMotorObject)
  private
    FSheet : TaSimuObject;
    FRollCount : integer;
  protected
    procedure SetRollCount(c:integer); virtual;
  public
    constructor Create(AOwner:TComponent); override;
    procedure Paint; override;
    procedure DoTimer(Sender: TObject); override;
    function GetEditForm : TEditFormClass; override;
    function  GetAsString : string; override;
    procedure ExtAsString(var value:string); override;
  published
    property Sheet : TaSimuObject read FSheet write FSheet;
    property RollCount : integer read FRollCount write SetRollCount default 5;
  end; { TsLine }


procedure Register;

//var
//  FormEditKSimLine: TFormEditKSimLine;

implementation
uses kdouble,ksimlinf;

{------------------------------------------------------------------------------}
procedure Register;
begin
  RegisterComponents('Kave2000', [TsLine]);
end;


{------------------------------------------------------------------------------}
{ TsLine ======================================================================}
{------------------------------------------------------------------------------}
procedure TsLine.SetRollCount(c:integer);
begin
  FRollCount := c;
  Invalidate;
end;

{------------------------------------------------------------------------------}
procedure TsLine.DoTimer(Sender: TObject);
begin
  if ( Assigned(Sheet) ) then Sheet.Advance(speed*Ratio*Rpm);
end;

{------------------------------------------------------------------------------}
procedure TsLine.Paint;
var
  iWid,  iy, ih,  nc: Integer; ix,dx :double;
begin
  with Canvas do begin
    Canvas.Pen := Self.Pen;
    Canvas.Brush := Self.Brush;
    ix := Pen.Width / 2;
    iy := trunc(ix);
    ih := Height - Pen.Width + 1;
    if Pen.Width = 0 then begin Dec(ih); end;
    iWid := Width - ih;
    if ( RollCount <= 1 ) then dx := 0     {  |----iWid---|  }
    else dx := iWid/(RollCount-1);         {  o   o   o   o  }
    nc := 1;
    while ( nc <= RollCount ) do begin
      Ellipse(trunc(ix), iy, trunc(ix + ih), iy + ih);
      ix := ix + dx;
      nc := nc + 1;
    end;
  end;
end;

{------------------------------------------------------------------------------}
constructor TsLine.Create(AOwner:TComponent);
begin
  Inherited Create(AOwner);
  FSheet := NIL;
  FRollCount := 5;
{  Brush.Color := clNavy;}
end;

//-----------------------------------------------------------------------------
function TsLine.GetEditForm : TEditFormClass; //  override;
begin
  Result := TFormEditKSimLine;
end;


//-----------------------------------------------------------------------------
function  TsLine.GetAsString : string; //  override;
begin
  Result := inherited GetAsString +
            IntToStr(RollCount) + '|'; 
end;


//-----------------------------------------------------------------------------
procedure TsLine.ExtAsString(var value:string); //  override;
var val : string;
begin
  inherited ExtAsString(value);
  val := ExtractString(Value,'|','');
  if ( val = '' ) then exit;
  RollCount := ExtractInt(val,',',RollCount);
end;



end.
