📄 adsapiph.pas
字号:
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 + -