⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ucarfactory.pas

📁 智能交通系统演示delphi源码,适合初学者看的例子
💻 PAS
字号:
unit uCarFactory;

interface
uses ExtCtrls, uCar, SysUtils, uGlobalObj, uPort;

type
  TCarFactory = class
  private
    FTimer: TTimer;
    FInterval: integer;
    procedure FOnTimer(Sender: TObject);
  public
    constructor Create;
    destructor Destroy;override;
    function CreateCar(APort: TPort): TCar;
    procedure Start;
    procedure Stop;
    property Interval: integer read FInterval write FInterval;
  end;


implementation

const
  TIMERINT = 10000;
  OFFSET = 10;
constructor TCarFactory.Create;
begin
  FTimer := TTimer.Create(nil);
  FTimer.Interval := TIMERINT;
  FTimer.OnTimer := FOnTimer;
  Start;
end;

destructor TCarFactory.Destroy;
begin
  FreeAndNil(FTimer);
end;

function TCarFactory.CreateCar(APort: TPort): TCar;
var
  LCar: TCar;
begin
  LCar := TCar.Create(nil);
  if APort.Direction = pdLeft then
  begin
    LCar.Left := OFFSET;
    LCar.Top := APort.Top;
    LCar.Direction := cdRight;
  end
  else if APort.Direction = pdRight then
  begin
    LCar.Left := APort.Left+APort.Width - OFFSET;
    LCar.Top := APort.Top;
    LCar.Direction := cdLeft;
  end
  else if APort.Direction = pdUp then
  begin
    LCar.Left := APort.Left;
    LCar.Top := OFFSET;
    LCar.Direction := cdDown;
  end
  else if APort.Direction = pdDown then
  begin
    LCar.Left := APort.Left;
    LCar.Top := APort.Top - OFFSET;
    LCar.Direction := cdUp;
  end;
  LCar.Picture.LoadFromFile('image\car.bmp');
  LCar.Width := 5;
  LCar.Height := 5;
  LCar.Parent := APort.Parent;
  LCar.HasAckInsected := false;
  LCar.HasAckLeave := false;
  LCar.GoForward;
  result := LCar;
end;

procedure TCarFactory.FOnTimer(Sender: TObject);
var
  LPort: TPort;
  n, i: integer;
begin
  n := GPortList.Count - 1;
  for i := 0 to n do
  begin
    LPort := GPortList.Items[i] as TPort;
    GCarList.LockList;
    GCarList.Add(CreateCar(LPort));
    GCarList.UnlockList;
  end;
end;

procedure TCarFactory.Start;
begin
  FTimer.Enabled := true;
  FOnTimer(nil); { ODO : add }
end;

procedure TCarFactory.Stop;
begin
  FTimer.Enabled := false;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -