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

📄 adsapiph.pas

📁 测试用例
💻 PAS
📖 第 1 页 / 共 5 页
字号:

  FInfo.Free;
  FPrompts.Free;
  FList.Free;

  inherited Destroy;
end;

procedure TApdCustomSapiPhone.AbortAskFor;
begin
  ExitAskFor (prAbort, nil, '');
end;

procedure TApdCustomSapiPhone.AskForDateDataHandler (LastReply : TApdPhraseType;
                                                     LastRule : Integer;
                                                     LastPhrase : string);
var
  OutDate : PDateTime;
  Trusted : Boolean;

begin
  if LastRule = -500 then begin
    GetMem (OutDate, SizeOf (TDateTime));
    OutDate^ := InterpretDate (LastPhrase, Trusted);
    if Trusted then
      ExitAskFor (prOk, OutDate, LastPhrase)
    else
      ExitAskFor (prCheck, OutDate, LastPhrase)
  end else 
    FSapiEngine.Speak (Prompts.Unrecognized);
end;

procedure TApdCustomSapiPhone.AskForExtensionDataHandler (LastReply : TApdPhraseType;
                                       LastRule : Integer;
                                       LastPhrase : string);
var
  OutExtension : PChar;

begin
  if LastRule = -400 then begin
    FExtension := FExtension + LastPhrase;
    FDigitCount := FDigitCount + 1;
    if FDigitCount >= NumDigits then begin
      OutExtension := nil;
      GetMem (OutExtension, Length (OutExtension) + 1);
      StrPCopy (OutExtension, FExtension);
      ExitAskFor (prOk, OutExtension, LastPhrase);
    end;
  end else 
    FSapiEngine.Speak (Prompts.Unrecognized);
end;

procedure TApdCustomSapiPhone.AskForListDataHandler (LastReply : TApdPhraseType;
                                       LastRule : Integer;
                                       LastPhrase : string);
var
  OutIndex : PInteger;
  i : Integer;
                                         
begin
  GetMem (OutIndex, sizeof (Integer));
  if LastRule = -300 then begin
    i := FList.IndexOf (LastPhrase);
    if i > -1 then begin
      OutIndex^ := i;
      ExitAskFor (prOk, OutIndex, LastPhrase);
    end else 
      FSapiEngine.Speak (Prompts.Unrecognized);
  end else
    FSapiEngine.Speak (Prompts.Unrecognized);
end;

procedure TApdCustomSapiPhone.AskForPhoneNumberDataHandler (LastReply : TApdPhraseType;
                                       LastRule : Integer;
                                       LastPhrase : string);
var
  PhoneNumber : PChar;
  
begin
  if LastRule = -600 then begin
    LastPhrase := InterpretPhoneNumber (LastPhrase);
    GetMem (PhoneNumber, Length (LastPhrase) + 1);
    StrPCopy (PhoneNumber, LastPhrase);
    ExitAskFor (prOk, PhoneNumber, LastPhrase);
  end else 
    FSapiEngine.Speak (Prompts.Unrecognized);
end;

procedure TApdCustomSapiPhone.AskForSpellingDataHandler (LastReply : TApdPhraseType;
                                       LastRule : Integer;
                                       LastPhrase : string);
var
  OutSpelledWord : PChar;
                                         
begin
  if LastRule = -200 then begin
    if FSpellingEchoBack then 
      FSapiEngine.Speak (LastPhrase);
    FSpelledWord := FSpelledWord + LastPhrase;
  end else if LastRule = -201 then begin
    GetMem (OutSpelledWord, Length (FSpelledWord) + 1);
    StrPCopy (OutSpelledWord, FSpelledWord);
    ExitAskFor (prOk, OutSpelledWord, LastPhrase);
  end else if LastRule = -202 then begin
    FSpelledWord := '';
  end else if LastRule = -203 then begin
     FSpelledWord := Copy (FSpelledWord, 1, Length (FSpelledWord) - 1);
  end else if LastRule = -203 then
    FSapiEngine.Speak (ApdYouHaveSpelled + FSpelledWord)
  else
    FSapiEngine.Speak (Prompts.Unrecognized);
end;

procedure TApdCustomSapiPhone.AskForTimeDataHandler (LastReply : TApdPhraseType;
                                       LastRule : Integer;
                                       LastPhrase : string);
var
  OutTime : PDateTime;                                       
begin
  if (LastRule <= -700) and (LastRule >= -705) then begin
    GetMem (OutTime, SizeOf (TDateTime));
    OutTime^ := InterpretTime (LastPhrase);
    ExitAskFor (prOk, OutTime, LastPhrase); 
  end else 
    FSapiEngine.Speak (Prompts.Unrecognized);
end;

procedure TApdCustomSapiPhone.AskForYesNoDataHandler (LastReply : TApdPhraseType;
                                       LastRule : Integer;
                                       LastPhrase : string);
var
  Reply : PBoolean;                                       
begin
  if LastRule = -100 then begin
    GetMem (Reply, SizeOf (Boolean));
    Reply^ := True;
    ExitAskFor (prOk, Reply, LastPhrase);
  end else if LastRule = -101 then begin
    GetMem (Reply, SizeOf (Boolean));
    Reply^ := False;
    ExitAskFor (prOk, Reply, LastPhrase);
  end else 
    FSapiEngine.Speak (Prompts.Unrecognized);
end;

procedure TApdCustomSapiPhone.AskForDateTrigger (Reply : TApdSapiPhoneReply;
                                                 Data : Pointer;
                                                 SpokenData : string);
begin
  { Events may still be firing after components are destroyed - or while they
    are being destroyed.  Check for this in all of the event triggers }
  if csDestroying in ComponentState then
    Exit;
  if Assigned (FOnAskForDateFinish) then begin
    if Assigned (Data) then begin
      FOnAskForDateFinish (Self, Reply, TDateTime (Data^), SpokenData);
      FreeMem (Data);
    end else
      FOnAskForDateFinish (Self, Reply, 0, SpokenData);
  end;
end;

procedure TApdCustomSapiPhone.AskForExtensionTrigger (Reply : TApdSapiPhoneReply;
                                                      Data : Pointer;
                                                      SpokenData : string);
begin
  { Events may still be firing after components are destroyed - or while they
    are being destroyed.  Check for this in all of the event triggers }
  if csDestroying in ComponentState then
    Exit;
  if Assigned (FOnAskForExtensionFinish) then begin
    if Assigned (Data) then begin
      FOnAskForExtensionFinish (Self, Reply, string (PChar (Data)),
                                SpokenData);
      FreeMem (Data);
    end else
      FOnAskForExtensionFinish (Self, Reply, '', SpokenData);
  end;
end;

procedure TApdCustomSapiPhone.AskForListTrigger (Reply : TApdSapiPhoneReply;
                                                 Data : Pointer;
                                                 SpokenData : string);
var
  OutIdx : PInteger;

begin
  { Events may still be firing after components are destroyed - or while they
    are being destroyed.  Check for this in all of the event triggers }
  if csDestroying in ComponentState then
    Exit;
  if Assigned (FOnAskForListFinish) then begin
    if Assigned (Data) then begin
      OutIdx := Data;
      FOnAskForListFinish (Self, Reply, OutIdx^, SpokenData);
      FreeMem (Data);
    end else
      FOnAskForListFinish (Self, Reply, -1, SpokenData);
  end;
end;

procedure TApdCustomSapiPhone.AskForPhoneNumberTrigger (
                                   Reply : TApdSapiPhoneReply;
                                   Data : Pointer;
                                   SpokenData : string);
begin
  { Events may still be firing after components are destroyed - or while they
    are being destroyed.  Check for this in all of the event triggers }
  if csDestroying in ComponentState then
    Exit;
  if Assigned (FOnAskForPhoneNumberFinish) then begin
    if Assigned (Data) then begin
      FOnAskForPhoneNumberFinish (Self, Reply, string (PChar (Data)),
                                  SpokenData);
      FreeMem (Data);
    end else
      FOnAskForPhoneNumberFinish (Self, Reply, '', SpokenData);
  end;
end;

procedure TApdCustomSapiPhone.AskForSpellingTrigger (
                                   Reply : TApdSapiPhoneReply;
                                   Data : Pointer;
                                   SpokenData : string);
begin
  { Events may still be firing after components are destroyed - or while they
    are being destroyed.  Check for this in all of the event triggers }
  if csDestroying in ComponentState then
    Exit;
  if Assigned (FOnAskForSpellingFinish) then begin
    if Assigned (Data) then begin
      FOnAskForSpellingFinish (Self, Reply, string (PChar (Data)),
                               SpokenData);
      FreeMem (Data);
    end else
      FOnAskForSpellingFinish (Self, Reply, '', SpokenData);
  end;
end;

procedure TApdCustomSapiPhone.AskForTimeTrigger (Reply : TApdSapiPhoneReply;
                                                 Data : Pointer;
                                                 SpokenData : string);
var
  OutTime : PDateTime;

begin
  { Events may still be firing after components are destroyed - or while they
    are being destroyed.  Check for this in all of the event triggers }
  if csDestroying in ComponentState then
    Exit;
  if Assigned (FOnAskForTimeFinish) then begin
    if Assigned (Data) then begin
      OutTime := Data;
      FOnAskForTimeFinish (Self, Reply, TDateTime (OutTime^), SpokenData);
      FreeMem (Data);
    end else
      FOnAskForTimeFinish (Self, Reply, 0, SpokenData);
  end;
end;

procedure TApdCustomSapiPhone.AskForYesNoTrigger (Reply : TApdSapiPhoneReply;
                                   Data : Pointer;
                                   SpokenData : string);
var
  Response : PBoolean;

begin
  { Events may still be firing after components are destroyed - or while they
    are being destroyed.  Check for this in all of the event triggers }
  if csDestroying in ComponentState then
    Exit;
  if Assigned (FOnAskForYesNoFinish) then begin
    if Assigned (Data) then begin
      Response := Data;
      FOnAskForYesNoFinish (Self, Reply, Boolean (Response^), SpokenData);
      FreeMem (Data);
    end else
      FOnAskForYesNoFinish (Self, Reply, False, SpokenData);
  end;
end;

procedure TApdCustomSapiPhone.AskForDate (NewPrompt1 : string);
begin
  AskForDateEx (NewPrompt1, '', '', '', '', '');
end;

procedure TApdCustomSapiPhone.AskForDateEx (NewPrompt1 : string;
                                            NewPrompt2 : string;
                                            NewHelp1 : string;
                                            NewHelp2 : string;
                                            NewWhere1 : string;
                                            NewWhere2 : string);

begin
  AbortAskFor;
  { Initialize the custom grammar }

  with FInfo.AskForGrammar do begin
    Clear;
    Text :=ApdAskForDateGrammar;
  end;

  { Initialize the ask for engine }

  FInfo.ReplyHandle := FHandle;
  FInfo.SapiEngine := SapiEngine;
  FInfo.Options := Options;

  { Set up the prompts }

  SetDefaultPrompts (NewPrompt1, NewPrompt2, NewHelp1, NewHelp2, NewWhere1,
                     NewWhere2);

  { Start listening for a response }

  FCustomDataHandler := AskForDateDataHandler;
  FEventTrigger := AskForDateTrigger;

  FInfo.AskFor;
end;

procedure TApdCustomSapiPhone.AskForExtension (NewPrompt1 : string);
begin
  AskForExtensionEx (NewPrompt1, '', '', '', 0, '', '', '', '');
end;

procedure TApdCustomSapiPhone.AskForExtensionEx (NewPrompt1 : string;
                                                 NewPrompt2 : string;
                                                 NewTooManyDigits : string;
                                                 NewTooFewDigits : string;
                                                 NewNumDigits : Integer;
                                                 NewHelp1 : string;
                                                 NewHelp2 : string;
                                                 NewWhere1 : string;
                                                 NewWhere2 : string);
begin
  AbortAskFor;
  { Initialize the custom grammar }
  with FInfo.AskForGrammar do begin
    Clear;
    Text :=ApdAskForExtensionGrammar;
  end;

  { Initialize the ask for engine }

  FInfo.ReplyHandle := FHandle;
  FInfo.SapiEngine := SapiEngine;
  FInfo.Options := Options;
  FExtension := '';
  FDigitCount := 0;

  { Set up the prompts }

  SetDefaultPrompts (NewPrompt1, NewPrompt2, NewHelp1, NewHelp2, NewWhere1,
                     NewWhere2);

  { Start listening for a response }

  FCustomDataHandler := AskForExtensionDataHandler;
  FEventTrigger := AskForExtensionTrigger;

  FInfo.AskFor;
end;

procedure TApdCustomSapiPhone.AskForList (List : TStringList;
                                          NewPrompt1 : string);
begin
  AskForListEx (List, NewPrompt1, '', '', '', '', '');
end;

procedure TApdCustomSapiPhone.AskForListEx (List : TStringList;
                                            NewPrompt1 : string;
                                            NewPrompt2 : string;
                                            NewHelp1 : string;
                                            NewHelp2 : string;
                                            NewWhere1 : string;
             

⌨️ 快捷键说明

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