Hallo,
die Funktion readkey habe ich nun schon gut kennengelernt und auch vielfach angewendet. :)
Ob folgendes damit auch geht, weiß ich aber nicht:
Ich würde gern mit dem Druck einer einzigen Taste eine Aktion auslösen, z.B. eine repeat-Schleife beenden, etwa so:
repeat begin bla; blub; blabla end until gedrückte_Taste = E; bzw.: until gedrückte_Taste = chr(69);
Fröhliche Grüße Roland
Roland Goretzki schrieb:
die Funktion readkey habe ich nun schon gut kennengelernt und auch vielfach angewendet. :)
Ob folgendes damit auch geht, weiß ich aber nicht:
Ich würde gern mit dem Druck einer einzigen Taste eine Aktion auslösen, z.B. eine repeat-Schleife beenden, etwa so:
repeat begin bla; blub; blabla end until gedrückte_Taste = E; bzw.: until gedrückte_Taste = chr(69);
Das geht natürlich.
Wenn du für "gedrückte_Taste" einfach `ReadKey' schreibst, wartet das Programm in jedem Schleifendurchlauf auf den Druck einer Taste, was vermutlich nicht das ist, was du möchtest.
Daher bietet sich häufig ein Konstrukt wie Folgendes an, gerade dann, wenn mehrere Tasten beachtet werden sollen.
var Fertig: Boolean;
[...]
Fertig := False; repeat [...] if KeyPressed then case ReadKey of 'E': Fertig := True; [ evtl. andere Tasten behandeln ] end until Fertig
Ggf. kann man `if KeyPressed then' auch durch `while KeyPressed do' ersetzen, wenn in jedem Schleifendurchlauf nicht nur eine, sondern alle in der Zwischenzeit gedrückten Tasten behandelt werden sollen, also v.a. dann, wenn der Rest der Schleife (das "[...]") länger dauert.
Falls das "[...]" jedoch leer ist, d.h. nur Tasten behandelt werden sollen, sollte man die `if'-Zeile ganz weglassen, da das Programm sonst in einer leeren Schleife pendelt, bis etwas passiert (sog. "busy waiting"). Ohne das `if' wird direkt `ReadKey' abgefragt, und das wartet auf "schonendere" Weise (also ohne Rechenzeit zu verbraten) auf die nächste Taste.
Bemerkung am Rande: Für eine `repeat'-Schleife ist kein `begin'/`end' erforderlich, da durch das `until' das Ende der Schleife schon eindeutig bestimmt wird.
Noch eine Bemerkung: 'E' steht für das Zeichen E, Chr (69) ebenfalls (nur schlechter lesbar ;-), E steht für einen Bezeichner, den der Compiler nicht verstehen wird, falls du ihn nicht vorher definiert hast.
Frank