![]() |
spvoice ist zu langsam
Hallo Community, und schon wieder ein problem - oder ich bin zu dumm für diese programmiersprache :)
folgendes: procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin Spvoice1.Volume:= 100; if key = vk_right then begin xk:=xk+1; yk:=0; end else if key = vk_left then begin if xk > 0 then begin xk:=xk-1; yk:=0; end; end; spvoice1.Speak(inttostr(xk)+'\'+inttostr(yk), 1); end; xk und yk sind globale Variablen dabei tritt folgendes problem auf: drücke ich pfeil rechts wird mir angesagt 1\0 drücke ich aber 3x schnell werden mir erst alle vorherigen Koordinaten angesagt. hat jemand eine Idee, wie dies zu lösen ist? bei meiner suche mit google stieß ich auf "spvoice.skip('word', maxint)", das erzeugt aber nur einen fehler grüße blinder007 |
AW: spvoice ist zu langsam
Jeder Tastendruck löst einen KeyEvent aus, der wiederum die Sprachausgabe ansteuert. Mehrere Tastendrücke speichert Windows in der Message-Queue und arbeitet sie nacheinander ab. Das Verhalten ist also durchaus nachvollziehbar.
Wenn es nicht das ist was du willst, dann sag doch mal, was du willst. |
AW: spvoice ist zu langsam
hallo Uwe,
die idee ist, dass bei jedem Tastendruck die koordinate angesagt wird und bei ggf. schnellem tastendruck die Felder, die übersprungen wurden, nicht angesagt werden. |
AW: spvoice ist zu langsam
Das würde ich mit einem Timer erledigen.
Das Timer-Intervall z.B. auf 500 (ms) setzen und den Timer im KeyEvent neu starten (Enabled einmal auf false und dann wieder auf true setzen). Im Timer-Event selbst dann Enabled auf false (sonst quaselt er weiter). Die Voice-Ausgabe erfolgt dann ausschließlich im Timer-Event. Etwa so (nur so eingetippt):
Delphi-Quellcode:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin Timer1.Enabled := false; if key = vk_right then begin xk:=xk+1; // Überprüfung auf Max-Wert fehlt! yk:=0; end else if key = vk_left then begin if xk > 0 then begin xk:=xk-1; yk:=0; end; end; Timer1.Enabled := true; end; procedure TForm1.Timer1Timer(Sender: TObject); begin Timer1.Enabled := false; Spvoice1.Volume:= 100; spvoice1.Speak(inttostr(xk)+'\'+inttostr(yk), 1); end; |
AW: spvoice ist zu langsam
hallo Uwe,
danke für den hilfreichen tipp, es funktioniert super. zu beginn hatte ich auch die Idee mit einem Timer zu arbeiten, nur wesentlich komplizierter, über variablen usw. danke für die Hilfe |
AW: spvoice ist zu langsam
Zitat:
Noch besser lesbar wäre dein Code, wenn du ein wenig auf Formatierung achten könntest, so daß zumindest Begin-End-Konstrukte leicht zu erkennen sind. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:49 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz