Entwickler-Ecke
Sonstiges (Delphi) - Auf Tastendruck warten
Mr_T - So 12.01.03 13:51
Titel: Auf Tastendruck warten
Hi Leute!
Ich habe ne Frage:
Ist es möglich wie im alten Pascal auf einen Tastendruck zu warten (damals hieß das teil glaube ich "keypressed") .... die ganze Sache soll so aussehen, das gewartet wird, bis eine Tastaturtaste gedrückt wurde (oder per ALT+Nummernblock ein ASCI - Code gesendet kommt) und mir dann irgendwie der Tastencode (oder das Zeichen.... umwandeln ist ja nicht so schwer) zurückgeliefert wird.
Danke schonmal.....
tommie-lie - So 12.01.03 14:08
'n morgen...
Ich weiß nicht, ob da in deine Anwendung passen würde, aber es gibt in der Form ein KeyDown-Event. Das wird ausgelöst, wenn was gedrückt wird. Darein könntest du schreiben, was passieren soll, wenn eine taste gedrückt wird. Welche Taste, wird auch gleich mitgeliefert.
Mr_T - So 12.01.03 14:31
Ne sorry das funzt bei mir nicht... ich habe bislang versuchte es so zu machen:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| ...... waitforkey := true;
repeat sleep(50); application.ProcessMessages; until waitforkey = false; .... procedure TForm2.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if waitforkey = true then begin rk := char(key); waitforkey := false; end end; |
Aber dabei hängt asich das ganze Prog immer auf (KeyPreview auf true) .... waitforkey ist ne globale boolean und rk ist ein char........
tommie-lie - So 12.01.03 14:38
ob char(key) geht weiß ich nicht, müsste ich auch erst meinen Compiler anwerfen.
Im Prinzip sollte es aber so oder so ähnlich klappen...
Welche Fehlermeldung kommt denn? Wo tritt der Fehler auf (mit F8 und F7 ein bisschen Debugging betreiben!)?
Aussagen wir "geht nich" helfen wenig weiter...
Mr_T - So 12.01.03 14:49
Hmm .... es kommt leider gar keine Fehlermeldung.... das Programm hängt sich blos auf und reagiert auf gar nichts mehr.... nur Strg+Alt+Entf helfen mir dort weiter.....
Insgesammt soll das Programm ein Brainfuck-Interpreter werden (<-- wers nicht kennt: es ist eine minimalistische Programmiersprache)... dazu wird ein zweites Form zum anzeigen des Outputs geöffnet und zugleich soll der Code interpretiert werden (die Interpretationsroutine wird in "onShow" aufgerufen) ... dabei gibt es ein Befehl, der auf einen Tastendruck warten soll... was momentan aber zum Aufhänger des Programms wird.....
tommie-lie - So 12.01.03 18:15
dann probier doch mal das Debuggen mit F8/7. Vielleicht liegt es ja an etwas anderem, was nur im Konflikt mit der "Tastendruckergänzung" steht. Evtl eine weitere Abfrage nach Tasten oder Ähnliches.
Wolff68 - So 12.01.03 20:52
Mal grundsätzlich:
Da Delphi ja Ereignisorientiert arbeitet 'wartet' es sowieso auf die nächste Aktion. (zB KeyDown)
Du musst also Dein Programm und Dein Windows nicht mit Sleep(50) beschäftigen.
Wenn Du jetzt zB keine Mauseingaben erlauben willst bevor nicht eine Taste gedrückt wurde, kannst Du ja im OnClick ein
If WaitForKey then exit; einbauen.
Im Prinzip reicht das hier völlig aus:
Quelltext
1: 2: 3: 4: 5: 6:
| procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin WaitForKey := false; Button1.Caption := Chr(Key); end; |
Dazu muss noch ggf. die KeyPreview des Forms auf true gestellt sein, damit auch alle KeyDown dort ankommen.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!