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

📄 adsapiph.pas

📁 测试用例
💻 PAS
📖 第 1 页 / 共 5 页
字号:
                                   SpokenData : string);
      procedure AskForExtensionTrigger (Reply : TApdSapiPhoneReply;
                                        Data : Pointer;
                                        SpokenData : string);
      procedure AskForListTrigger (Reply : TApdSapiPhoneReply;
                                   Data : Pointer;
                                   SpokenData : string);
      procedure AskForPhoneNumberTrigger (Reply : TApdSapiPhoneReply;
                                          Data : Pointer;
                                          SpokenData : string);
      procedure AskForSpellingTrigger (Reply : TApdSapiPhoneReply;
                                       Data : Pointer;
                                       SpokenData : string);
      procedure AskForTimeTrigger (Reply : TApdSapiPhoneReply;
                                   Data : Pointer;
                                   SpokenData : string);
      procedure AskForYesNoTrigger (Reply : TApdSapiPhoneReply;
                                    Data : Pointer;
                                    SpokenData : string);

      function ConvertResponse (RCode : Integer ) : TApdSapiPhoneReply;
      procedure DoLineCallState (Device, P1, P2, P3 : LongInt); override;
      procedure ExitAskFor (Reply : TApdSapiPhoneReply;
                            Data : Pointer;
                            SpokenData : string);
      function GetPhraseData (LParam : Longint) : string;
      function FixNumerics (Phrase : string) : string;
      function InterpretDate (Phrase : string;
                              var Trusted : Boolean) : TDateTime; virtual;
      function InterpretPhoneNumber (Phrase : string) : string;
      function InterpretTime (Phrase : string) : TDateTime; virtual;
      procedure Notification(AComponent : TComponent; Operation: TOperation);
                override;
      procedure PhraseHandler (var Msg : TMessage); message apw_SapiInfoPhrase;
      procedure SapiPhoneCallback (var Msg : TMessage);
                message apw_SapiPhoneCallBack;
      procedure SetNoAnswerMax (v : Integer);
      procedure SetNoAnswerTime (v : Integer);
      procedure SetNumDigits (v : Integer);
      procedure SetOptions (v : TApdSapiPhoneSettings);
      procedure SetSpellingEchoBack (v : Boolean);
      procedure UpdateStateMachine (LastReply : TApdPhraseType;
                                    LastRule : Integer;
                                    LastPhrase : string);

    public
      constructor Create (AOwner : TComponent); override;
      destructor Destroy; override;

      procedure AbortAskFor;
      procedure AskForDate (NewPrompt1 : string);
      procedure AskForDateEx (NewPrompt1 : string; NewPrompt2 : string;
                              NewHelp1 : string; NewHelp2 : string;
                              NewWhere1 : string;
                              NewWhere2 : string);
      procedure AskForExtension (NewPrompt1 : string);
      procedure AskForExtensionEx (NewPrompt1 : string; NewPrompt2 : string;
                                   NewTooManyDigits : string;
                                   NewTooFewDigits : string;
                                   NewNumDigits : Integer;
                                   NewHelp1 : string;
                                   NewHelp2 : string;
                                   NewWhere1 : string;
                                   NewWhere2 : string);
      procedure AskForList (List : TStringList;
                           NewPrompt1 : string);
      procedure AskForListEx (List : TStringList;
                              NewPrompt1 : string; NewPrompt2 : string;
                              NewHelp1 : string; NewHelp2 : string;
                              NewWhere1 : string;
                              NewWhere2 : string);
      procedure AskForPhoneNumber (NewPrompt1 : string);
      procedure AskForPhoneNumberEx (NewPrompt1 : string;
                                     NewPrompt2 : string;
                                     NewAskAreaCode : string;
                                     NewAskNextThree : string;
                                     NewAskLastFour : string;
                                     NewHelp1 : string;
                                     NewHelp2 : string;
                                     NewWhere1 : string;
                                     NewWhere2 : string);
      procedure AskForSpelling (NewPrompt1 : string);
      procedure AskForSpellingEx (NewPrompt1 : string;
                                  NewPrompt2 : string;
                                  NewHelp1 : string;
                                  NewHelp2 : string;
                                  NewWhere1 : string;
                                  NewWhere2 : string);
      procedure AskForTime (NewPrompt1 : string);
      procedure AskForTimeEx (NewPrompt1 : string; NewPrompt2 : string;
                              NewHelp1 : string; NewHelp2 : string;
                              NewWhere1 : string;
                              NewWhere2 : string);
      procedure AskForYesNo (NewPrompt1 : string);
      procedure AskForYesNoEx (NewPrompt1 : string;
                               NewPrompt2 : string;
                               NewHelp1 : string; NewHelp2 : string;
                               NewWhere1 : string;
                               NewWhere2 : string);
      procedure SetDefaultPrompts (NewPrompt1 : string; NewPrompt2 : string;
                                   NewHelp1 : string; NewHelp2 : string;
                                   NewWhere1 : string; NewWhere2 : string);
      procedure Speak (const Text : string);

      property Prompts : TApdSapiPhonePrompts read FPrompts write FPrompts;

    published
      property NoAnswerMax : Integer read FNoAnswerMax write SetNoAnswerMax;
      property NoAnswerTime : Integer read FNoAnswerTime write SetNoAnswerTime;
      property NumDigits : Integer read FNumDigits write SetNumDigits;
      property Options : TApdSapiPhoneSettings read FOptions write SetOptions;
      property SapiEngine : TApdCustomSapiEngine
               read FSapiEngine write FSapiEngine;
      property SpellingEchoBack : Boolean
               read FSpellingEchoBack write SetSpellingEchoBack default True;

      property OnAskForDateFinish : TApdOnAskForDateTimeFinish
               read FOnAskForDateFinish write FOnAskForDateFinish;
      property OnAskForExtensionFinish : TApdOnAskForStringFinish
               read FOnAskForExtensionFinish write FOnAskForExtensionFinish;
      property OnAskForListFinish : TApdOnAskForIntegerFinish
               read FOnAskForListFinish write FOnAskForListFinish;
      property OnAskForPhoneNumberFinish : TApdOnAskForStringFinish
               read FOnAskForPhoneNumberFinish
               write FOnAskForPhoneNumberFinish;
      property OnAskForSpellingFinish : TApdOnAskForStringFinish
               read FOnAskForSpellingFinish write FOnAskFOrSpellingFinish;
      property OnAskForTimeFinish : TApdOnAskForDateTimeFinish
               read FOnAskForTimeFinish write FOnAskForTimeFinish;
      property OnAskForYesNoFinish : TApdOnAskForBooleanFinish
               read FOnAskForYesNoFinish write FOnAskForYesNoFinish;
      property OnTapiDisconnect : TNotifyEvent
               read FOnTapiDisconnect write FOnTapiDisconnect;
      {properties}
      property SelectedDevice;
      property ComPort;
      property StatusDisplay;
      property TapiLog;
      property AnswerOnRing;
      property RetryWait;
      property MaxAttempts;
      property ShowTapiDevices;
      property ShowPorts;
      property EnableVoice;
      property FilterUnsupportedDevices;

      {events}
      property OnTapiStatus;
      property OnTapiLog;
      property OnTapiPortOpen;
      property OnTapiPortClose;
      property OnTapiConnect;
      property OnTapiFail;
      property OnTapiDTMF;
      property OnTapiCallerID;
      property OnTapiWaveNotify;
      property OnTapiWaveSilence;

  end;

  TApdSapiPhone = class (TApdCustomSapiPhone)
    private
    protected
    public
    published
      property NoAnswerMax;
      property NoAnswerTime;
      property NumDigits;
      property Options;
      property SapiEngine;

      {properties}
      property SelectedDevice;
      property ComPort;
      property StatusDisplay;
      property TapiLog;
      property AnswerOnRing;
      property RetryWait;
      property MaxAttempts;
      property ShowTapiDevices;
      property ShowPorts;
      property EnableVoice;
      property FilterUnsupportedDevices;                               

      {events}
      property OnTapiStatus;
      property OnTapiLog;
      property OnTapiPortOpen;
      property OnTapiPortClose;
      property OnTapiConnect;
      property OnTapiFail;
      property OnTapiDTMF;
      property OnTapiCallerID;
      property OnTapiWaveNotify;
      property OnTapiWaveSilence;
  end;

implementation

procedure TokenizePhrase (Phrase : string;
                                             Tokens : TStringList);
{ Tokenizes a series of words into a TStringList }

  procedure AddWord (Tokens : TStringList; var NewWord : ShortString);
  begin
    if NewWord <> '' then
      Tokens.Add (NewWord);
    NewWord := '';
  end;
  
type
  TParseState = (psColChars, psColSpace, psInQuote);
  
var
  State      : TParseState;
  i          : Integer;
  PhraseLen  : Integer;
  WorkString : ShortString;

begin
  Tokens.Clear;
  i := 1;
  WorkString := '';
  State := psColChars;
  PhraseLen := Length (Phrase);
  while i <= PhraseLen do begin
    case State of
      psColChars :
        if Phrase[i] = ' ' then begin
          State := psColSpace;
          AddWord (Tokens, WorkString);
        end else if Phrase[i] = '"' then begin
          State := psInQuote;
          AddWord (Tokens, WorkString);
          WorkString := WorkString + Phrase[i];
        end else
          WorkString := WorkString + Phrase[i];
      psColSpace :
        if Phrase[i] = '"' then begin
          State := psInQuote;
          WorkString := WorkString + Phrase[i];
        end else if Phrase[i] <> ' ' then begin
          WorkString := WorkString + Phrase[i];
          State := psColChars;
        end;
      psInQuote :
        if Phrase[i] = '"' then begin
          WorkString := WorkString + Phrase[i];
          AddWord (Tokens, WorkString);
          State := psColChars;
        end else
          WorkString := WorkString + Phrase[i];
    end;
    Inc (i);
  end;
  if PhraseLen > 1 then begin
    if (WorkString[1] = '"') and (WorkString[PhraseLen] <> '"') then
      WorkString := WorkString + '"';
  end;
  AddWord (Tokens, WorkString);
end;

{$IFNDEF Delphi6}

{ Add some general convenience routines }

function DayOfTheWeek (TheDate : TDateTime) : Integer;
begin
  Result := (DateTimeToTimeStamp (TheDate).Date - 1) mod 7 + 1;
end;

function MonthOfTheYear (TheDate : TDateTime) : Word;
var
  Year, Day: Word;
begin
  DecodeDate (TheDate, Year, Result, Day);
end;

procedure IncAMonth (var Year, Month, Day : Word; NumMonths : Integer);
type
  PMonthDayTable = ^TMonthDayTable;
  TMonthDayTable = array[1..12] of Word;

const
  MonthDays: array [Boolean] of TMonthDayTable =
    ((31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31),
     (31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31));
var
  DayTable: PDayTable;
  Sign: Integer;
  
begin
  if NumMonths >= 0 then
    Sign := 1
  else
    Sign := -1;
  Year := Year + (NumMonths div 12);
  NumMonths := NumMonths mod 12;
  Inc (Month, NumMonths);
  if Word (Month-1) > 11 then
  begin
    Inc (Year, Sign);
    Inc (Month, -12 * Sign);
  end;
  DayTable := @MonthDays[IsLeapYear (Year)];
  if Day > DayTable^[Month] then
    Day := DayTable^[Month];
end;

function IncMonth(const TheDate : TDateTime; NumberOfMonths : Integer) : TDateTime;
var
  Year, Month, Day : Word;
begin
  DecodeDate (TheDate, Year, Month, Day);
  IncAMonth (Year, Month, Day, NumberOfMonths);
  Result := EncodeDate (Year, Month, Day);
end;

function IncYear (TheDate : TDateTime; NumYears : Integer) : TDateTime;
begin
  Result := IncMonth (TheDate, NumYears * 12);
end;
{$ENDIF}

{ TApdSapiGrammarList }
procedure TApdSapiGrammarList.ReadSectionValues (Section : string;
                                                 List : TStringList);
var
  i : Integer;
  FirstChar : Char;
begin
  i := IndexOf ('[' + Section + ']');
  List.Clear;
  if i < 0 then
    Exit;
  Inc (i);
  while (i < Count) do begin
    if Length (Strings[i]) > 0 then begin
     FirstChar := Trim (Strings[i])[1];
     if (FirstChar <> ';') and (FirstChar <> '[') then
       List.Add (Strings[i])
     else if FirstChar = '[' then
       Exit;
    end;
    Inc (i);
  end;
end;                                                 

function TApdSapiGrammarList.SectionExists (Section : string) : Boolean;
begin
  if IndexOf ('[' + Section + ']') >= 0 then
    Result := True
  else
    Result := False;
end;

{ TApdSapiPhonePrompts }

constructor TApdSapiPhonePrompts.Create;
begin
  inherited Create;

  AskAreaCode    := ApdAskAreaCode;
  AskLastFour    := ApdAskLastFour;
  AskNextThree   := ApdAskNextThree;
  CannotGoBack   := ApdCannotGoBack;
  CannotHangUp   := ApdCannotHangUp;
  HangingUp      := ApdHangingUp;
  Help           := ApdHelp;
  Help2          := ApdHelp2;
  HelpVerify     := ApdHelpVerify;
  GoingBack      := ApdGoingBack;
  Main           := ApdMain;
  Main2          := ApdMain2;
  FMaxSpeed      := ApdMaxSpeed;
  FMinSpeed      := ApdMinSpeed;
  Operator       := ApdOperator;
  NoOperator     := ApdNoOperator;
  NoSpeedChange  := ApdNoSpeedChange;
  SpeakingFaster := ApdSpeakingFaster;

⌨️ 快捷键说明

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