Hi,
ich möchte gerne abfragen ob eine Taste gedrückt wurde. So wie KeyPressed in Crt. Ich möchte aber nicht die Crt einbauen. Gibt es eine andere möglichkeit abzufragen ob eine Taste gedrückt wurde (in einer schleife) und dann den KeyCode abholen? Ich finde dazu so rein garnichts im Internet.
Vielen dank im Voraus
Unix Konsolen Programm
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1430
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
Re: Unix Konsolen Programm
unit keyboard einbinden
-
- Beiträge: 31
- Registriert: Mi 7. Feb 2018, 10:31
- OS, Lazarus, FPC: Winux (FPC 3.x)
- CPU-Target: xxBit
Re: Unix Konsolen Programm
Hi,
erstmal danke. Das habe ich nicht gefunden. Leider reagiert KeyPressed nur auf Return. Mache ich da was falsch? Ich möchte eigentlich CRTL-C abfangen. Wäre aber nicht schlimm wenn es nur ein Buchstabe z.b. E wäre.
Dank deiner Hilfe konnte ich nun anders suchen und habe das gefunden.
https://www.freepascal.org/docs-html/cu ... event.html
erstmal danke. Das habe ich nicht gefunden. Leider reagiert KeyPressed nur auf Return. Mache ich da was falsch? Ich möchte eigentlich CRTL-C abfangen. Wäre aber nicht schlimm wenn es nur ein Buchstabe z.b. E wäre.
Dank deiner Hilfe konnte ich nun anders suchen und habe das gefunden.
https://www.freepascal.org/docs-html/cu ... event.html
-
- Beiträge: 1908
- Registriert: Di 23. Sep 2014, 17:46
- OS, Lazarus, FPC: Win10 | Linux
- CPU-Target: x86_64
Re: Unix Konsolen Programm
Ich hab mal ne lib geschrieben die das kann: https://github.com/Warfley/LazTermUtils
Schau dir mal die beispiele readkey und non blocking readkey an:
Readkey:
Aber du musst um STRG+C abfangen zu können das verhalten der Konsole massiv verändern (DirectRead := True macht das), was sehr unangenehm sein kann. Wenn du also nur Strg+C fangen willst ist das registrieren eines Handlers für SIGINT wahrscheinlich deutlich angenehmer und einfacher
Schau dir mal die beispiele readkey und non blocking readkey an:
Readkey:
Code: Alles auswählen
Term := TTerminal.Create;
try
Term.Input.DirectRead:=True; // Ändert das verhalten der konsole das keyboard events wie strg+c nicht als signale aufgefasst werden
repeat
k := Term.Input.ReadKey;
[...]
until (k.CharValue = 'c') and (kmCtrl in k.Modifiers); // Testen auf C mit Modifier Strg
finally
Term.Free;
end;
Code: Alles auswählen
Term := TTerminal.Create;
try
Term.Input.DirectRead:=True;
[...]
while true do
begin
...
if Term.Input.ReadKeyNonBlocking(key) then // War überhaupt ein key press
if Key.SpecialKey and (Key.SpecialKeyCode = skEscape) then // Falls ja check was es war
Break;
Sleep(100);
end;
finally
Term.Free;
end;