?? main.pas
字號:
unit main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Buttons, StdCtrls, ExtCtrls, Menus,MMsystem;
const OPENING=1; //表示電梯處于正在打開狀態
const OPENED=2; //表示電梯處于已經打開狀態
const CLOSEING=3; //表示電梯處于正在關閉狀態
const CLOSEED=4; //表示電梯處于已經關閉狀態
const NEEDUP=1; //用戶想上樓
const NEEDDOWN=-1; //用戶想下樓
const NONEED=0; //無請求
type
TForm1 = class(TForm)
Panel_dl: TPanel;
Panel_glzx: TPanel;
Panel_dt: TPanel;
Shape1: TShape;
Label1: TLabel;
Panel_dtnb: TPanel;
Panel1: TPanel;
Panel2: TPanel;
Panel3: TPanel;
Panel4: TPanel;
Panel5: TPanel;
Panel6: TPanel;
Panel7: TPanel;
Panel8: TPanel;
Panel9: TPanel;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
Shape2: TShape;
BitBtn3: TBitBtn;
BitBtn4: TBitBtn;
Panel10: TPanel;
Panel17: TPanel;
SpeedButton12: TSpeedButton;
Label8: TLabel;
Shape_door: TShape;
Timer_door: TTimer;
Timer_move: TTimer;
Image_Up2: TImage;
Image_Up1: TImage;
Image_Down1: TImage;
Image_Down2: TImage;
Label12: TLabel;
Label13: TLabel;
Label14: TLabel;
Label15: TLabel;
Label16: TLabel;
Label25: TLabel;
Timer1: TTimer;
Button1: TButton;
Panel18: TPanel;
SpeedButton22: TSpeedButton;
Label10: TLabel;
SpeedButton21: TSpeedButton;
Label24: TLabel;
Panel16: TPanel;
SpeedButton32: TSpeedButton;
Label7: TLabel;
SpeedButton31: TSpeedButton;
Label23: TLabel;
Panel15: TPanel;
SpeedButton42: TSpeedButton;
Label6: TLabel;
SpeedButton41: TSpeedButton;
Label22: TLabel;
Panel20: TPanel;
SpeedButton52: TSpeedButton;
Label11: TLabel;
SpeedButton51: TSpeedButton;
Label21: TLabel;
Panel11: TPanel;
SpeedButton62: TSpeedButton;
Label2: TLabel;
SpeedButton61: TSpeedButton;
Label20: TLabel;
Panel12: TPanel;
SpeedButton72: TSpeedButton;
Label3: TLabel;
SpeedButton71: TSpeedButton;
Label19: TLabel;
Panel13: TPanel;
SpeedButton82: TSpeedButton;
Label4: TLabel;
SpeedButton81: TSpeedButton;
Label18: TLabel;
Panel14: TPanel;
SpeedButton91: TSpeedButton;
Label5: TLabel;
Label17: TLabel;
Shape3: TShape;
Label26: TLabel;
Label27: TLabel;
Label28: TLabel;
Label29: TLabel;
Label30: TLabel;
Label31: TLabel;
Label32: TLabel;
Label33: TLabel;
Label34: TLabel;
Label35: TLabel;
Label36: TLabel;
Label37: TLabel;
Label38: TLabel;
Label39: TLabel;
Label40: TLabel;
Label41: TLabel;
Label42: TLabel;
Label43: TLabel;
Label44: TLabel;
Timer2: TTimer;
Image1: TImage;
procedure Timer_doorTimer(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure Timer_moveTimer(Sender: TObject);
procedure SpeedButton12Click(Sender: TObject);
procedure SpeedButton22Click(Sender: TObject);
procedure SpeedButton32Click(Sender: TObject);
procedure SpeedButton42Click(Sender: TObject);
procedure SpeedButton52Click(Sender: TObject);
procedure SpeedButton62Click(Sender: TObject);
procedure SpeedButton72Click(Sender: TObject);
procedure SpeedButton82Click(Sender: TObject);
procedure SpeedButton91Click(Sender: TObject);
procedure SpeedButton81Click(Sender: TObject);
procedure SpeedButton71Click(Sender: TObject);
procedure SpeedButton61Click(Sender: TObject);
procedure SpeedButton51Click(Sender: TObject);
procedure SpeedButton41Click(Sender: TObject);
procedure SpeedButton31Click(Sender: TObject);
procedure SpeedButton21Click(Sender: TObject);
procedure Panel1Click(Sender: TObject);
procedure Panel2Click(Sender: TObject);
procedure Panel3Click(Sender: TObject);
procedure Panel4Click(Sender: TObject);
procedure Panel5Click(Sender: TObject);
procedure Panel6Click(Sender: TObject);
procedure Panel7Click(Sender: TObject);
procedure Panel8Click(Sender: TObject);
procedure Panel9Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure BitBtn3Click(Sender: TObject);
procedure BitBtn4Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Timer2Timer(Sender: TObject);
private
{ Private declarations }
door_state:integer; //電梯門當前處于狀態
current:integer; //電梯當前所在樓層
WaitTime:integer; //電梯等待命令的時間
door_control:boolean; //控制電梯門開關的變量,true為要求打開,false為要求關閉
dy:integer; //電梯當前的運動方向,1為向下,-1為向上,0為停止
agody:integer; //原來的方向
Upflag,Downflag:boolean;
UpStop:array[1..9]of boolean; //向上運動時需暫停的樓層
DownStop:array[1..9]of boolean;//向下運動時需暫停的樓層
myPanel:array[1..9] of TPanel;
myLabel:array[1..9] of TLabel;
myUpsb:array[1..9]of TSpeedButton;
myDownsb:array[1..9]of TSpeedButton;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Timer_doorTimer(Sender: TObject);
begin
if door_control then //打開門
begin
door_state:=OPENING;
shape_door.Width :=Shape_door.Width +2;
shape_door.Left :=Shape_door.Left -1;
if Shape_door.Width >=Panel_dt.Width then
begin
door_state:=OPENED;
Timer2.Enabled :=true; //開始開門等待時間計時器
Timer_door.Enabled :=false;
end;
end
else //關閉門
begin
door_state:=CLOSEING;
shape_door.Width :=Shape_door.Width -2;
shape_door.Left :=Shape_door.Left +1;
if Shape_door.Width <=0 then
begin
door_state:=CLOSEED;
Timer_door.Enabled :=false;
Timer_move.Enabled :=true;
end;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
i:integer;
begin
myLabel[1]:=Label8;
myLabel[2]:=Label10;
myLabel[3]:=Label7;
myLabel[4]:=Label6;
myLabel[5]:=Label11;
myLabel[6]:=Label2;
myLabel[7]:=Label3;
myLabel[8]:=Label4;
myLabel[9]:=Label5;
myPanel[1]:=Panel1;
myPanel[2]:=Panel2;
myPanel[3]:=Panel3;
myPanel[4]:=Panel4;
myPanel[5]:=Panel5;
myPanel[6]:=Panel6;
myPanel[7]:=Panel7;
myPanel[8]:=Panel8;
myPanel[9]:=Panel9;
myUpsb[1]:=SpeedButton12;
myUpsb[2]:=SpeedButton22;
myUpsb[3]:=SpeedButton32;
myUpsb[4]:=SpeedButton42;
myUpsb[5]:=SpeedButton52;
myUpsb[6]:=SpeedButton62;
myUpsb[7]:=SpeedButton72;
myUpsb[8]:=SpeedButton82;
myDownsb[2]:=SpeedButton21;
myDownsb[3]:=SpeedButton31;
myDownsb[4]:=SpeedButton41;
myDownsb[5]:=SpeedButton51;
myDownsb[6]:=SpeedButton61;
myDownsb[7]:=SpeedButton71;
myDownsb[8]:=SpeedButton81;
myDownsb[9]:=SpeedButton91;
for i:=1 to 8 do
myUpsb[i].Glyph :=Image_up2.Picture.Bitmap;
for i:=2 to 9 do
myDownsb[i].Glyph :=Image_Down2.Picture.Bitmap;
WaitTime:=0;
Shape_door.Width :=1;
Shape_door.Left :=Panel_dt.Width div 2;
door_state:=CLOSEED;
door_control:=true;
current:=1; //初始狀態電梯在底樓
dy:=0; //入于停止狀態
agody:=1;
for i:=1 to 9 do
begin
UpStop[i]:=false; //沒有向上需停的標志
DownStop[i]:=false; //沒有向下需停的標志
myLabel[i].Caption :='電梯正在9樓';
end;
self.Brush.Bitmap :=Image1.Picture.Bitmap;
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
door_control:=not door_control;
Timer_door.Enabled :=true;
Timer_move.Enabled :=true; //臨時的
WaitTime:=0;
end;
procedure TForm1.Timer_moveTimer(Sender: TObject);
var
i:integer;
begin
if not(Door_state=ClOSEED) then exit;
case dy of
0: begin //處于停止狀態時;循環檢測各層樓有無申請
if (UpStop[current]or DownStop[current]) then
begin
if current<>1 then
begin
DownStop[current]:=false;
myDownsb[current].Glyph :=Image_Down2.Picture.Bitmap;
end;
if current<>9 then
begin
UpStop[current]:=false;
myUpsb[current].Glyph :=Image_Up2.Picture.Bitmap;
end;
door_control:=true;
Timer_door.Enabled :=true;
Timer_move.Enabled :=false;
exit;
end;
for i:=current to 8 do
begin
if UpStop[i] then
begin
dy:=1;
exit;
end;
end;
for i:=current downto 2 do
begin
if DownStop[i] then
begin
dy:=-1;
exit;
end;
end;
for i:=current to 9 do
begin
if DownStop[i] then
begin
dy:=1;
exit;
end;
end;
for i:=current downto 1 do
begin
if UpStop[i] then
begin
dy:=-1;
exit;
end;
end;
end;
-1: begin //電梯處于向下運動狀態
if Panel_dt.Top =(Panel_dt.Height-1 )*(9-Current+1) then
begin //經過各樓層時
Bitbtn2.Enabled :=true;
Current:=Current-1;
for i:=1 to 9 do
myLabel[i].Caption :='電梯正在'+inttostr(Current)+'樓';
if Current=1 then
begin
UpStop[current]:=false;
myUpsb[current].Glyph :=Image_Up2.Picture.Bitmap;
myPanel[current].Color :=clBtnface;
door_control:=true;
dy:=0;
for i:=2 to 9 do
if (UpStop[i] or DownStop[i]) then
begin
dy:=1;
break;
end;
Timer_door.Enabled :=true;
Timer_move.Enabled :=false;
exit;
end;
if DownStop[Current]then
begin
door_control:=true;
DownStop[current]:=false;
myDownsb[current].Glyph :=Image_Down2.Picture.Bitmap;
myPanel[current].Color :=clBtnface;
Timer_door.Enabled :=true;
Timer_move.Enabled :=false;
Downflag:=false;
for i:=current downto 2 do
if DownStop[i] then begin Downflag:=true; break; end;
if not Downflag then
for i:=current downto 1 do
if UpStop[i] then begin Downflag:=true; break; end;
if not Downflag then
begin
Upflag:=false;
for i:=current to 8 do
if UpStop[i] then begin Upflag:=true; break; end;
if not Upflag then
for i:=current to 9 do
if DownStop[i] then begin Upflag:=true; break; end;
end;
if not Upflag then dy:=0
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -