📄 ucarfactory.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 + -