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

📄 unit4.pas

📁 这是一个火车站公寓的自动叫班程序源码
💻 PAS
字号:
unit Unit4;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, DBCtrls, ExtCtrls,MyClass, Common;

type
  TfmManualCall = class(TForm)
    GroupBox1: TGroupBox;
    Label1: TLabel;
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    CheckBox1: TCheckBox;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Button1: TButton;
    Timer1: TTimer;
    ComboBox1: TComboBox;
    procedure Button1Click(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure ComboBox1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure FormKeyPress(Sender: TObject; var Key: Char);
    procedure Button2Click(Sender: TObject);
    procedure FormShow(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  fmManualCall: TfmManualCall;
  pre_key:integer;
  Line:integer;   //记录当前的被呼叫房间线路

implementation

{$R *.dfm}
Uses Unit1;

procedure TfmManualCall.Button1Click(Sender: TObject);
begin
  //如果还处于叫班状态则停止叫班
  if(BitBtn2.Enabled) then
    SendMessage(BitBtn2.Handle,BM_CLICK,0,0);  
  fmManualCall.Hide;
end;

procedure TfmManualCall.BitBtn1Click(Sender: TObject);
var NowTime:TDateTime;
    i,pos:integer;
    str:string;
    str2:string;
    tmpLine:integer;
begin
  //检查房间号是否合法
  str:=ComboBox1.Text;
  pos:=Length(str)+1;
  for i:=1 to Length(str) do
    if(str[i]=' ') then begin
      pos:=i;
      Break;
    end;
  str2:=Copy(str,1,pos-1);
  ComboBox1.Text:=str2;
  if(fmMain.tbTemp.Active) then
    fmMain.tbTemp.Active:=false;
  fmMain.tbTemp.TableName:=fmMain.tbRoom.TableName;
  fmMain.tbTemp.Open;
  Line:=255;
  if(not fmMain.tbTemp.Locate('房间号码',ComboBox1.Text,[])) then begin
    Label4.Caption:='不存在此房间号码';
    Exit;  //退出当前函数
  end
  else
    Line:=fmMain.tbTemp.FieldByName('线路').AsInteger;
  fmMain.tbTemp.Close;
  //打开链路
  tmpLine:=(Line div 100-1)*16+(Line mod 100)-1;
  if(not Caller.RoomGood[tmpLine]) then begin
    Label4.Caption:='房间故障';
    Exit;
  end; 
  if(Caller.LineBusy) then begin
    Label4.Caption:='线路忙,暂时无法呼叫';
    Exit;  //退出当前函数
  end;
  Caller.OpenLink(Line,lsListenCall); //呼叫后监听
  Label4.Caption:='正在监听房间回话';
  ComboBox1.Enabled:=false;
  //如果是录音叫班,则记录声音
  if(Label2.Visible) then begin
    //添加人工叫班录音记录
    NowTime:=Now;
    fmMain.tbVoice.AppendRecord([ComboBox1.Text,NowTime,NowTime,NowTime,Caller.UserName]);
    //开始录音
    Caller.StartWaveRecord(GetWaveName(NowTime));
    //如果超出最大记录条数,则删除倒数第二个(最后一个不允许删除)
    if(fmMain.tbVoice.RecordCount>=SysSet.MaxManualWaveNum) then begin
      fmMain.tbVoice.Last;
      fmMain.tbVoice.Prior;
      if(FileExists(GetWaveName(fmMain.tbVoice.FieldByName('叫班时间').AsDateTime))) then
        DeleteWaveFile(GetWaveName(fmMain.tbVoice.FieldByName('叫班时间').AsDateTime));
      fmMain.tbVoice.Delete;
      fmMain.tbVoice.First;
    end;
  end;
  //启动定时器
  Timer1.Enabled:=true;
  //使能停止呼叫按钮,去能开始呼叫按钮
  BitBtn2.Enabled:=true;
  BitBtn1.Enabled:=false;
  //设置前一次的按键为无空格键
  pre_key:=0;
end;

procedure TfmManualCall.BitBtn2Click(Sender: TObject);
begin
  //去能停止呼叫按钮,使能开始呼叫按钮
  ComboBox1.Enabled:=true;
  BitBtn2.Enabled:=false;
  BitBtn1.Enabled:=true;
  //置链路为待用状态
  Caller.OpenLink(0,lsReady);
  //如果是录音叫班,则停止记录声音
  if(Label2.Visible) then
    Caller.StopWaveRecord;
  Timer1.Enabled:=false;
  Label4.Caption:='正在等待输入房间号码';
  ComboBox1.SetFocus;
  //添加催叫队列
  if(CheckBox1.Checked) then
    with Caller do begin
      RecallQ[RecallNum].Room:=ComboBox1.Text;
      RecallQ[RecallNum].time:=Now+SysSet.CallInterval*60*ONE_SECOND;
      RecallQ[RecallNum].Train:='';
      RecallQ[RecallNum].PlanFirstCall:=RecallQ[RecallNum].time;
      RecallQ[RecallNum].state:=csCalled;
      if(fmMain.tbTemp.Active) then
        fmMain.tbTemp.Active:=false;
      fmMain.tbTemp.TableName:=fmMain.tbRoom.TableName;
      fmMain.tbTemp.Open;
      if(not fmMain.tbTemp.Locate('房间号码',ComboBox1.Text,[])) then
        RecallQ[RecallNum].line:=1616
      else
        RecallQ[RecallNum].line:=fmMain.tbTemp.FieldByName('线路').AsInteger;
      fmMain.tbTemp.Close;
      RecallNum:=RecallNum+1;
    end;

end;

procedure TfmManualCall.Timer1Timer(Sender: TObject);
var key:integer;
begin
  Timer1.Enabled:=false;
  Timer1.Enabled:=true;
  Caller.RecordTime:=Caller.RecordTime+1;
  //判断是否超出了最长的呼叫时间
  if(Caller.RecordTime/5/60>SysSet.MaxCallTime) then begin
    SendMessage(BitBtn2.Handle,BM_CLICK,0,0);  //停止呼叫
  end;
  //判断是否按下空格键
  key:=GetKeyState(VK_SPACE);
  if((key=-127)or(key=-128))and(pre_key<>key) then begin
    //已按下空格键,呼叫
    Caller.OpenLink(Line,lsManualCall);
    Label4.Caption:='正在向房间讲话';
  end
  else if (key<>pre_key)and((pre_key=-127)or(pre_key=-128)) then begin
    //松开空格键,监听
    Caller.OpenLink(Line,lsListenCall);
    Label4.Caption:='正在监听房间回话';
  end;
  pre_key:=key;
end;

procedure TfmManualCall.ComboBox1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  //如果是回车键
  if(Key=13) then begin
    if(BitBtn1.Enabled) then
      SendMessage(BitBtn1.Handle,BM_CLICK,0,0)
    else if(BitBtn2.Enabled) then
      SendMessage(BitBtn2.Handle,BM_CLICK,0,0);
  end;
  
end;

procedure TfmManualCall.FormKeyPress(Sender: TObject; var Key: Char);
begin
  if(ord(Key)=13)and(BitBtn1.Enabled) then begin
    SendMessage(BitBtn1.Handle,BM_CLICK,0,0);
  end
  else if(ord(Key)=13)and(BitBtn2.Enabled) then begin
    SendMessage(BitBtn2.Handle,BM_CLICK,0,0);
  end
end;

procedure TfmManualCall.Button2Click(Sender: TObject);
begin
  if(ComboBox1.Focused) then
    showmessage('focused')
  else
    showmessage('not focused');
end;

procedure TfmManualCall.FormShow(Sender: TObject);
begin
  ComboBox1.SetFocus;
end;

end.

⌨️ 快捷键说明

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