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;