Das bedeutet
imho, dass dein Problem beim Aufwecken durch den Tastendruck (QS_Key) liegt und nicht bei der Sprachausgabe.
Eventuell könnte man es so beheben:
Delphi-Quellcode:
procedure TMain.Button1Click(Sender: TObject);
var Reason:Cardinal; Ev:THandle;
begin
Edit1.Text:='';
Application.ProcessMessages;
Voice.Speak('Hallo, ich warte jetzt, bis der Text zu ende ist, oder eine '+
'Taste gedrückt wird.', 1);
Ev:=Voice.SpeakCompleteEvent;
// >>>
speechCanceled := false; // "global"
repeat
Reason:=MsgWaitForMultipleObjects(1, Ev, False, Infinite, QS_Key);
if Reason = (WAIT_OBJECT_0 + 1) then
Application.ProcessMessages;
until speechCanceled or (Reason = WAIT_OBJECT_0);
// <<<
Edit1.Text:=IntToStr(Reason);
end;
speechCanceled könnte dann bei Bedarf (also einer gewünschten Tasten-Aktion) in der Message-Behandlung des Formulars gesetzt werden.