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