📄 main.pas
字号:
begin
if AnswerTime>3 then
begin
CurrentState :=state_s_bye;
ApdTapiDevice1.PlayWaveFile(WaveFileDir+'\sound\bye.wav');
Exit;
end
else
begin
inc(AnswerTime);
currentState := state_s_over;
Timer1.Enabled:=True;
ApdTapiDevice1.PlayWaveFile(WaveFileDir+'\sound\over.wav');
Exit;
end;
end;
state_s_bye :
begin
CurrentState := State_Idle;
CallerID.Text :='';
CallerIDName.Text :='';
ApdTapiDevice1.CancelCall;
shape1.Brush.Color:=clWhite;
lbStatus.Caption := '等候来电';
Timer2.Enabled :=True;
Exit;
end;
end;
end;
end;
//来电显示,需要申请来电显示的功能,且Modem具有来电显示功能
procedure TfrmMain.ApdTapiDevice1TapiCallerID(CP: TObject; ID,
IDName: String);
begin
CallerId.Text := ID;
CallerIdName.Text := IDName;
end;
//设置录音的长度
procedure TfrmMain.MaxLengthEditExit(Sender: TObject);
begin
end;
//弹出菜单中删除选项,用于列表中的录音项
procedure TfrmMain.Delete1Click(Sender: TObject);
begin
CallsListBox.Items.Delete(CallsListBox.ItemIndex);
end;
//根据当前选项初始化弹出菜单
procedure TfrmMain.PopupMenu1Popup(Sender: TObject);
begin
end;
//使用声卡扩音
procedure TfrmMain.MonitorClick(Sender: TObject);
begin
ApdTapiDevice1.MonitorRecording := Monitor.Checked;
end;
//检测DTMF键
procedure TfrmMain.ApdTapiDevice1TapiDTMF(CP: TObject; Digit: Char;
ErrorCode: Integer);
var
tmpStr:String;
tmpInt:Integer;
begin
if (CurrentState= state_s_Input) then
begin
case Digit of
'0'..'9':
begin
Timer1.Enabled :=False; //disable bye.wav
Timer1.Enabled :=True; //enable bye.wav again
if(IDCount<6) then
begin
inc(IDCount);
arID[IDCount]:=StrToInt(Digit);
end
end;
'#':
begin
tmpStr:='';
for tmpInt:=1 to IDCount do
tmpStr:=tmpStr+IntToStr(arID[tmpInt]);
with Query2 do begin
Close;
SQL .Clear;
SQL .Add('select * from scoretable');
SQL .Add('where ID='''+ tmpStr+'''');
Open;
end;
if VarIsNULL(query2.FieldValues['SCORE']) or VarIsEmpty(query2.FieldValues['SCORE']) then
begin
CurrentState:=state_s_inputwrong;
ApdTapiDevice1.PlayWaveFile(WaveFileDir+'\sound\inputwrong.wav');
Exit;
end
else
begin
IDCountAll:=IDCount;
IDCount:=0;
tmpInt:=query2.FieldValues['SCORE'];
arSCore[1]:=tmpInt div 10;
arSCore[2]:=tmpInt-10*arSCore[1];
if arSCore[1]=0 then
SCCount:=2
else
SCCount:=0;
CurrentState:=state_s_reply1;
ApdTapiDevice1.PlayWaveFile(WaveFileDir+'\sound\reply1.wav');
end;
end;
end;
end
else if (CurrentState= state_s_over) then
case Digit of
'1':
begin
CurrentState :=state_s_input;
IDCount:=0;
Timer1.Enabled :=False; //disable bye.wav
Timer1.Enabled:=True; //enable bye.wav again
ApdTapiDevice1.PlayWaveFile(WaveFileDir+'\sound\input.wav');
Exit;
end;
else
begin
CurrentState :=state_s_bye;
ApdTapiDevice1.PlayWaveFile(WaveFileDir+'\sound\bye.wav');
end;
end
end;
procedure TfrmMain.AnswerOnRingEditExit(Sender: TObject);
begin
try
ApdTapiDevice1.AnswerOnRing :=
StrToInt(AnswerOnRingEdit.Text);
except
//如果转换为Integer失败,需要重新设置
on E : EConvertError do begin
Application.ShowException(E);
AnswerOnRingEdit.SetFocus;
end;
end;
end;
procedure TfrmMain.btnMasterLoginClick(Sender: TObject);
begin
if MasterLogin then
Table1.Active :=False
else
Table1.Active:=True;
end;
procedure TfrmMain.Table1BeforeOpen(DataSet: TDataSet);
begin
showmessage('只有数据库管理员才能登陆!');
end;
procedure TfrmMain.btnMasterSearchClick(Sender: TObject);
begin
with Table1 do
begin
if rdgrpSearch.ItemIndex=0 then
begin
IndexName:='RDB$PRIMARY1';
if not FindKey([edtIDSearch.Text])then
showmessage('Cannot Find the Record');
end
else begin
IndexName:='INDEX_NAME';
if not FindKey([edtedtNameSearch.Text])then
showmessage('Cannot Find the Record');
end;
end;
end;
procedure TfrmMain.btnSearchClick(Sender: TObject);
begin
with Query1 do begin
Close;
SQL .Clear;
SQL .Add('select * from scoretable');
SQL .Add('where ID='''+ edtSearch.Text+'''');
Open;
end;
if VarIsNULL(query1.FieldValues['SCORE']) or VarIsEmpty(query1.FieldValues['SCORE']) then
begin
showmessage('没有该号码,请核实!');
end
end;
procedure TfrmMain.Button5Click(Sender: TObject);
begin
ApdTapiDevice1.UseSoundCard := True;
ApdTapiDevice1.PlayWaveFile(WaveFileDir+'\sound\greet.wav');
CurrentState := state_s_greet;
end;
procedure TfrmMain.edtSearchExit(Sender: TObject);
var
tmpInt:integer;
begin
try
tmpInt:=StrToInt(edtSearch.Text);
arID[1]:=tmpInt div 1000;
arID[2]:=(tmpInt div 100)-10*arID[1];
arID[3]:=(tmpInt div 10)-10*arID[2]-100*arID[1];
arID[4]:=tmpInt-10*arID[3]-100*arID[2]-1000*arID[1];
except
//如果转换为Integer失败,需要重新设置
on E : EConvertError do begin
Application.ShowException(E);
edtSearch.SetFocus;
end;
end;
end;
procedure TfrmMain.edtWaitTimeEnter(Sender: TObject);
var
tmpInt:Integer;
begin
try
tmpInt:=StrToInt(edtWaitTime.Text);
Timer1.Interval:=1000*tmpInt;
except
//如果转换为Integer失败,需要重新设置
on E : EConvertError do begin
Application.ShowException(E);
edtWaitTime.SetFocus;
end;
end;
end;
procedure TfrmMain.Timer1Timer(Sender: TObject);
begin
Timer1.Enabled :=False;
currentstate:=state_s_bye;
ApdTapiDevice1.PlayWaveFile(WaveFileDir+'\sound\bye.wav');
end;
procedure TfrmMain.Timer2Timer(Sender: TObject);
begin
Timer2.Enabled :=False;
AnswerButtonClick(Sender);
end;
procedure TfrmMain.Table1AfterClose(DataSet: TDataSet);
begin
MasterLogin:=False;
Database2.Connected:=False;
DBNavigator1.Enabled :=False;
DBGrid1.Enabled :=False;
rdgrpSearch.Enabled :=False;
btnMasterLogin.Caption:='登陆';
btnMasterSearch.Enabled :=False;
end;
procedure TfrmMain.Table1AfterOpen(DataSet: TDataSet);
begin
MasterLogin:=True;
DBNavigator1.Enabled :=True;
DBGrid1.Enabled :=True;
rdgrpSearch.Enabled :=True;
btnMasterLogin.Caption:='退出';
btnMasterSearch.Enabled :=True;
end;
procedure TfrmMain.ClearLogButtonClick(Sender: TObject);
begin
CallsListBox.Clear;
end;
procedure TfrmMain.SaveLogButtonClick(Sender: TObject);
var
filename:String;
begin
if saveDialog1.Execute then
CallsListBox.Items.SaveToFile(saveDialog1.filename);
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -