Einzelnen Beitrag anzeigen

Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.077 Beiträge
 
Delphi XE2 Professional
 
#7

AW: Warten bis Sprachausgabe beendet

  Alt 15. Okt 2013, 04:29
@Bug:
Das wird so nicht funktionieren, weil (zumindest bei mir) MsgWaitForMultipleObjects sofort zurückkehrt und konstant 1 als Resultat liefert. Zum Drücken einer Taste kommt es also gar nicht.

Ich habe mein Problem jetzt so gelöst:

Delphi-Quellcode:
PROCEDURE TMain.Speak(Const S:String);
var Res:DWord; EV:THandle;
begin
   Timer.Enabled:=False;
   Voice.Skip('SENTENCE',MaxInt);
   fSpeakCancelled:=False;
   Voice.Speak(S,1);
   EV:=Voice.SpeakCompleteEvent;
   repeat
      Res:=WaitForSingleObject(Ev,100);
      if Res=WAIT_TIMEOUT then Application.Processmessages;
   until (Res<>WAIT_TIMEOUT) or SpeakCancelled;
   if not SpeakCancelled then Timer.Enabled:=True;
end;
fSpeakCancelled wird in FormShortCut dann auf True gesetzt, wenn eine Taste gedrückt wird.
Mit Voice.WaitUntilDone klappte das merkwürdigerweise nicht.
Danke für Deinen Hinweis auf WaitForSingleObject, das ich von vornherein verworfen hatte.
Da ich ja nicht nur auf das Ende der Sprachausgabe sondern parallel auch auf Tastendrücke warten wollte war ich auf MsgWaitForMultipleObjects fixiert.
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat