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

📄 unit1.pas

📁 这是一个火车站公寓的自动叫班程序源码
💻 PAS
📖 第 1 页 / 共 3 页
字号:
begin
  fmManualCall.GroupBox1.Caption:='录音叫班';
  fmManualCall.Caption:='录音叫班';
  fmManualCall.Label2.Visible:=true;
  fmManualCall.CheckBox1.Visible:=true;
  fmManualCall.ShowModal;
end;

procedure TfmMain.N1Click(Sender: TObject);
begin
  PageControl1.ActivePage:=tabPlan;
end;

procedure TfmMain.N7Click(Sender: TObject);
begin
  PageControl1.ActivePage:=tabPlan;
end;

procedure TfmMain.N8Click(Sender: TObject);
begin
  PageControl1.ActivePage:=tabAutoCall;
end;

procedure TfmMain.N9Click(Sender: TObject);
begin
  PageControl1.ActivePage:=tabVoice;
end;

procedure TfmMain.N10Click(Sender: TObject);
begin
  PageControl1.ActivePage:=tabPhone;
end;

procedure TfmMain.N22Click(Sender: TObject);
begin
  PageControl1.ActivePage:=tabLogInOff;
end;

procedure TfmMain.N23Click(Sender: TObject);
begin
  PageControl1.ActivePage:=tabLeave;
end;

procedure TfmMain.N12Click(Sender: TObject);
begin
  PageControl1.ActivePage:=tabRoom;
end;

procedure TfmMain.N13Click(Sender: TObject);
begin
  PageControl1.ActivePage:=tabStuff;
end;

procedure TfmMain.N16Click(Sender: TObject);
begin
  PageControl1.ActivePage:=tabCaller;
end;

procedure TfmMain.N17Click(Sender: TObject);
begin
  fmDetect.ShowModal;
end;

procedure TfmMain.FormShow(Sender: TObject);
begin
  //启动登录界面
  if(not Caller.Logined) then
    fmLogin.ShowModal;
  Caller.Logined:=true;
  fmMain.WindowState:=wsMaximized;
  //初始化房间检测界面
  //Image1.Canvas.Brush.Color:=clWhite;
  //Image1.Canvas.FillRect(Rect(0,0,Image1.Width,Image1.Height));

end;

procedure TfmMain.tabPlanShow(Sender: TObject);
begin
  //使能表操作控制按钮
  Button2.Enabled:=true;  //添加
  Button3.Enabled:=true;  //修改
  Button4.Enabled:=true;  //删除
  Button5.Enabled:=true;  //打印
  BitBtn2.Enabled:=false; //播放声音
  BitBtn3.Enabled:=false; //停止声音
end;

procedure TfmMain.tabAutoCallShow(Sender: TObject);
begin
  //使能表操作控制按钮
  Button2.Enabled:=false;  //添加
  Button3.Enabled:=false;  //修改
  Button4.Enabled:=false;  //删除
  Button5.Enabled:=true;  //打印
  if(ReplayCallWaveStarted) then begin
    BitBtn2.Enabled:=false; //播放声音
    BitBtn3.Enabled:=true; //停止声音
  end
  else begin
    BitBtn2.Enabled:=true; //播放声音
    BitBtn3.Enabled:=false; //停止声音
  end;
end;

procedure TfmMain.tabVoiceShow(Sender: TObject);
begin
  //使能表操作控制按钮
  Button2.Enabled:=false;  //添加
  Button3.Enabled:=false;  //修改
  Button4.Enabled:=false;  //删除
  Button5.Enabled:=false;  //打印
  if(ReplayCallWaveStarted) then begin
    BitBtn2.Enabled:=false; //播放声音
    BitBtn3.Enabled:=true; //停止声音
  end
  else begin
    BitBtn2.Enabled:=true; //播放声音
    BitBtn3.Enabled:=false; //停止声音
  end;
end;

procedure TfmMain.tabPhoneShow(Sender: TObject);
begin
  //使能表操作控制按钮
  Button2.Enabled:=false;  //添加
  Button3.Enabled:=false;  //修改
  Button4.Enabled:=false;  //删除
  Button5.Enabled:=false;  //打印
  if(ReplayCallWaveStarted) then begin
    BitBtn2.Enabled:=false; //播放声音
    BitBtn3.Enabled:=true; //停止声音
  end
  else begin
    BitBtn2.Enabled:=true; //播放声音
    BitBtn3.Enabled:=false; //停止声音
  end;
end;

procedure TfmMain.tabLogInOffShow(Sender: TObject);
begin
  //使能表操作控制按钮
  Button2.Enabled:=false;  //添加
  Button3.Enabled:=false;  //修改
  if(Caller.LoginType=ltManager) then
    Button4.Enabled:=true  //删除
  else
    Button4.Enabled:=false;//删除
  Button5.Enabled:=true;  //打印
  BitBtn2.Enabled:=false; //播放声音
  BitBtn3.Enabled:=false; //停止声音

end;

procedure TfmMain.tabLeaveShow(Sender: TObject);
begin
  //使能表操作控制按钮
  Button2.Enabled:=false;  //添加
  Button3.Enabled:=false;  //修改
  Button4.Enabled:=true;  //删除
  Button5.Enabled:=true;  //打印
  BitBtn2.Enabled:=false; //播放声音
  BitBtn3.Enabled:=false; //停止声音
end;

procedure TfmMain.tabStuffShow(Sender: TObject);
begin
  //使能表操作控制按钮
  Button2.Enabled:=true;  //添加
  Button3.Enabled:=true;  //修改
  Button4.Enabled:=true;  //删除
  Button5.Enabled:=true;  //打印
  BitBtn2.Enabled:=false; //播放声音
  BitBtn3.Enabled:=false; //停止声音
end;

procedure TfmMain.tabRoomShow(Sender: TObject);
begin
  //刷新房间显示
  RefreshRoom;
  //使能表操作控制按钮
  if(Caller.LoginType=ltManager) then begin
    Button2.Enabled:=true;  //添加
    Button3.Enabled:=true;  //修改
    Button4.Enabled:=true;  //删除
    Button5.Enabled:=false;  //打印
  end
  else begin
    Button2.Enabled:=false;  //添加
    Button3.Enabled:=false;  //修改
    Button4.Enabled:=false;  //删除
    Button5.Enabled:=false;  //打印
  end;
  BitBtn2.Enabled:=false; //播放声音
  BitBtn3.Enabled:=false; //停止声音
end;

procedure TfmMain.tabCallerShow(Sender: TObject);
begin
  //使能表操作控制按钮
  Button2.Enabled:=true;  //添加
  Button3.Enabled:=true;  //修改
  Button4.Enabled:=true;  //删除
  Button5.Enabled:=true;  //打印
  BitBtn2.Enabled:=false; //播放声音
  BitBtn3.Enabled:=false; //停止声音
end;

procedure TfmMain.Button3Click(Sender: TObject);
begin
  IsAddRecord:=false;
  fmAdd.PageAdd.ActivePage:=fmAdd.tabRoom;
  if(PageControl1.ActivePage=tabPlan) then begin      //叫班计划
    fmAdd.PageAdd.ActivePage:=fmAdd.tabPlan;
  end
  else if(PageControl1.ActivePage=tabStuff) then begin //住寓人员
    fmAdd.PageAdd.ActivePage:=fmAdd.tabStuff
  end
  else if(PageControl1.ActivePage=tabRoom) then begin//房间
    fmAdd.PageAdd.ActivePage:=fmAdd.tabCaller;
    fmAdd.PageAdd.ActivePage:=fmAdd.tabRoom;
    fmAdd.ComboBox11.Text:=inttostr(tbRoom.Fields[0].AsInteger);
    fmAdd.ComboBox11.Enabled:=false;  //房间线路不能改变
  end
  else if(PageControl1.ActivePage=tabCaller) then begin //叫班员
    fmAdd.PageAdd.ActivePage:=fmAdd.tabCaller;
    fmAdd.Edit8.Text:=tbCaller.FieldByName('姓名').AsString;
    fmAdd.Edit8.Enabled:=false;   //姓名不能改变
  end;
  Caller.EditType:=etModify;
  fmAdd.ShowModal;
end;

procedure TfmMain.Button4Click(Sender: TObject);
var i:integer;
begin
  if(PageControl1.ActivePage=tabPlan) then begin      //叫班计划
    //删除叫班计划
    //for i:=tbPlan.RecNo-1 to Caller.QNum-2 do
    //  Caller.Queue[i]:=Caller.Queue[i+1];
    EnterCriticalSection(Critical1);  //进入临界段
    tbPlan2.RecNo:=tbPlan.RecNo;
    tbPlan2.Delete;
    LeaveCriticalSection(Critical1);//退出临界段
    try
      tbPlan.Refresh;
    except
    end;
  end
  else if(PageControl1.ActivePage=tabLeave) then begin //住离寓表
    tbLeave.Delete;
  end
  else if(PageControl1.ActivePage=tabStuff) then begin //住寓人员
    tbStuff.Delete;
  end
  else if(PageControl1.ActivePage=tabRoom) then begin//房间
    tbRoom.Delete;
  end
  else if(PageControl1.ActivePage=tabCaller) then begin //叫班员
    tbCaller.Delete;
  end
  else if(PageControl1.ActivePage=tabLogInOff) then begin //登录信息
    tbLogInOff.Delete;
  end

end;

procedure TfmMain.N25Click(Sender: TObject);
begin
  tbLogInOff.First;
  Sleep(100);  //等待数据集更新
  tbLogInOff.Edit;
  tbLogInOff.FieldByName('退出时间').AsDateTime:=Now;
  tbLogInOff.Post;
  Caller.Logined:=false;
  fmLogin.Edit1.Text:='';
  fmLogin.ShowModal;
end;

function GetWeek: string;
var
  mytime:SYSTEMTIME;
begin
  GetLocalTime(mytime);
  //(***本文出处:南山古桃(nsgtao)的百度空间:http://hi.baidu.com/nsgtao/ ****)
  case mytime.wDayOfWeek of
    0: Result:='星期日';
    1: Result:='星期一';
    2: Result:='星期二';
    3: Result:='星期三';
    4: Result:='星期四';
    5: Result:='星期五';
    6: Result:='星期六';
  end;
end;

procedure TfmMain.Timer1Timer(Sender: TObject);
var i:integer;
    changed:boolean;
    BKMark:TBookMark;
    nState:Byte;
begin
  fcLabel1.Caption:=FormatDateTime('yyyy年mm月dd日 hh时nn分ss秒',Now)+'   '+GetWeek;//DateTimeToStr(Now);

  if(GetTrainCounter>5) then begin
    GetTrainCounter:=0;
    if(tbPlan3.Active)then
      tbPlan3.Close;
    tbPlan3.TableName:='CallPlan';
    tbPlan3.Open;
    tbPlan3.Sort:='计划叫班时间 ASC';
    //获取一次待发车次记录
    //下面处理一叫队列的初始化
    EnterCriticalSection(Critical1);  //进入临界段
    changed:=false;
    tbPlan3.First;
    i:=0;
    while(not tbPlan3.Eof) do begin
      try
        nState:=tbPlan3.FieldByName('状态').AsInteger;
        if(nState=0) or (nState=1) then begin     //csReady or csWaitSecond
          if not((i+1) in RecNoCollect) then begin
            RecNoCollect:=RecNoCollect+[i+1];
            changed:=true;
          end;
        end
        else if(nState=2) then begin    //csCalled
          //从准备呼叫队列清除
          if(i+1) in RecNoCollect then begin
            RecNoCollect:=RecNoCollect-[i+1];
            changed:=true;
          end;
          //加入到已完成呼叫队列
          if not ((i+1) in CalledRecNoCollect) then begin
            CalledRecNoCollect:=CalledRecNoCollect+[i+1];
            changed:=true;
          end;
        end
        else  if(i+1) in CalledRecNoCollect then begin    //csWaitFirst
          CalledRecNoCollect:=CalledRecNoCollect-[i+1];
        end;
        i:=i+1;
        tbPlan3.Next;
      except
      end;

    end;
    LeaveCriticalSection(Critical1);//退出临界段
    {for i:=0 to Caller.QNum-1 do
      if(Caller.Queue[i].state=csReady)or(Caller.Queue[i].state=csWaitFirst)
         or(Caller.Queue[i].state=csFirstDelayed) then begin
        if not((i+1) in RecNoCollect) then begin
          RecNoCollect:=RecNoCollect+[i+1];
          changed:=true;
        end;
      end
      else if(i+1) in RecNoCollect then begin
        RecNoCollect:=RecNoCollect-[i+1];
        if(Caller.Queue[i].state=csCalled)or(Caller.Queue[i].state=csWaitSecond) then
          CalledRecNoCollect:=CalledRecNoCollect+[i+1];
        changed:=true;
      end
      else if(i+1) in CalledRecNoCollect then begin
        // 叫班10个小时以后从完成呼叫队列中删除
        if(Now-Caller.Queue[i].ActualFirstCall)>10*3600*ONE_SECOND then
          CalledRecNoCollect:=CalledRecNoCollect-[i+1];
      end;  }
    if(changed) then begin
      DBGrid1.Visible:=false;
      DBGrid1.Visible:=true;
    end;
  end
  else
    GetTrainCounter:=GetTrainCounter+1;
  //叫班录音查询开始,且声音播放完毕,那么置结束状态
  if(ReplayCallWaveStarted)and(MediaPlayer2.Position=MediaPlayer2.Length) then
    ReplayCallWaveStarted:=false;

end;

procedure TfmMain.N28Click(Sender: TObject);
begin
  fmManualCall.GroupBox1.Caption:='直接叫班';
  fmManualCall.Caption:='直接叫班';
  fmManualCall.Label2.Visible:=false;
  fmManualCall.CheckBox1.Visible:=false;
  fmManualCall.ShowModal;
end;

⌨️ 快捷键说明

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