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

📄 common.pas

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

interface

Uses  Windows,Registry,SysUtils;

const
   CALL_INTERVAL_TIME=5;  //查询时钟的触发间隔,5秒
   ONE_SECOND=1.1574074074074074074074074E-5;      //此浮点数在TDateTime类型中代表一秒钟
   MAX_PLAN_NUM=300;
   MAX_RECALL_NUM=100;

type
   //用户登录类型,如果是管理员则有特殊权限
   TLoginType=(ltManager,ltUser);
   //处理表项时,标明当前是添加还是修改,在出入寓登记时尤其有用
   TEditType=(etAdd,etModify);
   //呼叫队列状态
   TCallState=(csReady,csWaitFirst,csWaitSecond,csFirstDelayed,csSecondDelayed,csCalled,csCallImmediate);
   //链路状态类型:待用,检测,人工呼叫,呼叫后监听、自动呼叫,电话录音,录音查询
   TLinkState=(lsReady,lsDetect,lsManualCall,lsListenCall,lsAutoCall,lsRecord,lsReplay);
   //呼叫队列记录类型
   TCallRecord=Record
     enabled:boolean;
     time:TDateTime;
     line:word;
     state:TCallState;
     CompanyName,StewardName,Room,Train:string;
     TimeIn,TrainTime:TDateTime;
     PlanFirstCall,PlanSecondCall:TDateTime;
     ActualFirstCall,ActualSecondCall:TDateTime;
     RecNo:integer;
     //联叫房间
     StickyRoom:array[0..10]of string[20];
     StickyLine:array[0..10]of word;
     StickyNum:integer;
     //状态,以数字表示0--csReady,1--csWaitSecond,2--csCalled
     nState:byte;

   end;
   //房间存在类型
   TRoomExistType=array[0..255]of boolean;
   //系统设置记录类型
   TSysSet=Record
     PortBase:word;   //端口基地址
     RoomBits:byte;   //房号位数
     PhoneLine1,PhoneLine2:byte; //电话录音端口1,2
     CallInterval:word;   //自动叫班一叫三催间隔,单位:分钟
     MaxCallTime:word;    //人工叫班最长时间,单位:分钟
     MaxManualWaveNum:word;  //人工录音叫班存放语音条数
     MaxAutoWaveNum:word;    //自动叫班存放语音条数
     MaxPhoneWaveNum:word;   //电话录音存放语音条数
     AutoSavePhone1,AutoSavePhone2:boolean; //启动自动记录电话录音
     WaveDir:string[255];      //叫班录音文件存放路径
     TelephoneDir:string[255];      //电话录音文件存放路径
     RecordBits:byte;        //语音采样位数:8或16
     RecordRate:longint;     //录音波特率:11025  22050  44100
     StationName:string[255];  //用户所在公司名称
     AutoCallEnabled:boolean;  //启动自动叫班
     AutoReCallEnabled:boolean;//启动三催功能
   end;

var
  RootDir:TFileName;
  SysSet:TSysSet;
  FormatSettings:TFormatSettings;
  Critical1:TRTLCriticalSection;
  IsAddRecord:Boolean;  //进入添加记录前置位

function GetWaveName(DateTime:TDateTime):TFileName;
function GetTelephoneWaveName(DateTime:TDateTime):TFileName;
function DeleteWaveFile(fname:TFileName):boolean;
//按算法将字符串进行转换,用于比较注册信息
function TransForm(RegistStr:string):string;
//获取系统分区的卷标序列号
function GetVolumeSerialNumber:Int64;
//获取注册表中的注册值
function GetRegistStr:string;
//判断字符串是否为空串
function IsEmptyString(str:string):Boolean;

implementation

function GetWaveName(DateTime:TDateTime):TFileName;
var str:string;
begin
  FormatSettings.TimeSeparator:='_';
  str:=DateTimeToStr(DateTime,FormatSettings)+'.wav';
  Result:=SysSet.WaveDir+'\'+str;
end;
function GetTelephoneWaveName(DateTime:TDateTime):TFileName;
var str:string;
begin
  FormatSettings.TimeSeparator:='_';
  str:=DateTimeToStr(DateTime,FormatSettings)+'.wav';
  Result:=SysSet.TelephoneDir+'\'+str;
end;

function DeleteWaveFile(fname:TFileName):boolean;
begin
  try
    Result:=DeleteFile(fname);
  except
    Result:=false;
  end;
end;

function TransForm(RegistStr:string):string;
var str:string;
    i,len:integer;
    m:byte;
begin
  len:=Length(RegistStr);
  str:=RegistStr;
  for i:=1 to len do begin
    m:=(ord(str[i])+30) mod 115;
    if(m<33) then
      m:=m+33;
    str[i]:=chr(m);
  end;
  Result:=str;
end;

function GetVolumeSerialNumber:Int64;
var
  lpVolumeNameBuffer:array[0..200]of char;
  lpFileSystemNameBuffer:array[0..200]of char;
  nVolumeNameSize:integer;
  lpVolumeSerialNumber:Cardinal;//PDWORD;
  lpMaximumComponentLength,lpFileSystemFlags:Cardinal;
  lnResult:longbool;
  nFileSystemNameSize:Cardinal;
  tmp:int64;
begin
  nVolumeNameSize:=  200;              //  lpVolumeNameBuffer  的大小
  lpVolumeSerialNumber:=  0;           //  lpVolumeSerialNumber  缓存
  lpMaximumComponentLength := 200;
  lpFileSystemFlags        :=  0;
  nFileSystemNameSize :=  200;
  lpVolumeNameBuffer:='                                              ';
  lpFileSystemNameBuffer:='                                                  ';

  lnResult  :=  GetVolumeInformation(pchar('c:\'),  @lpVolumeNameBuffer,       //
           nVolumeNameSize,  @lpVolumeSerialNumber,
           lpMaximumComponentLength,  lpFileSystemFlags,
           @lpFileSystemNameBuffer,  nFileSystemNameSize);

  if(lnResult) then
    tmp:=int64(lpVolumeSerialNumber)
  else
    tmp:=0;
  Result:=tmp;
end;

function GetRegistStr:string;
var
  TheReg:TRegistry;
  keyName,str:string;
begin
  TheReg := TRegistry.Create;
  TheReg.RootKey := HKEY_LOCAL_MACHINE;
  keyName := 'SOFTWARE\AutoCall';
  if TheReg.OpenKey(keyName, True) then
  begin
    str:=TheReg.readString('Regist');
    TheReg.CloseKey;
  end;
  Thereg.Free;
  Result:=str;
end;

function IsEmptyString(str:string):Boolean;
var len,i:integer;
begin
  len:=length(str);
  if(len=0) then
    Result:=true
  else begin
    for i:=1 to len do
      if(str[i]<>' ') then begin
        Result:=false;
        Exit;
      end;
    Result:=true;
  end;
end;

end.
 

⌨️ 快捷键说明

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