Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Auf Taste warten
MadMaiden - Mi 23.07.03 12:16
Titel: Auf Taste warten
Hi!
Wie kann ich mein Programm dazu bringen, dass er eine bestimmte Zeit wartet so dass eine Taste gedruckt werden soll. Wenn keine Taste in dieser Zeitspanne gedruckt wird, soll mein Program weitermachen. Ich kann den Tastendruck nur dann simuliren wenn keine Taste gedruckt wird, ansonsten muss warten bis die Zeit um ist.
(kann man dass auch ohne TTimer machen??? )
maxk - Mi 23.07.03 15:23
Im TurboPascal gab es dafür
KeyPressed, so viel sollte als Anstich reichen - aber leider gibt es das im Delphi scheinbar nicht mehr. Auf meine Frage vor einiger Zeit, gab es keine brauchbaren Antworten.
KEYPRESSED
Klabautermann - Mi 23.07.03 15:38
Hallo,
Wo soll die Taste den eingegeben werden, also soll der Key drieckt ans Formular gesendet werden oder in ein Edit Feld.
Was du machen kannst ist dein Programm in eine Schleife laufen lassen, und diese eben nach einer Weile wieder verlassen. In der Schleife musst du Application.ProcessMessages aufrufen. In der OnKeyPress oder OnKeyDown Methode des Tastendruck-Empfangenden Objektes kannst du dann ein Flag setzen, über welches die Schleife vorläufig beendet werden kann.
Gruß
Klabautermann
MadMaiden - Mi 23.07.03 20:38
das sollte auch Pascal werden, aber wie kann ich mit keypressed herausfinden, welche taste gedruckt wurde.... gibt es irgendeine andere Funkion, dass sowas macht, oder kann man es irgenwie umgehen...?
Adrian - Fr 25.07.03 14:40
Servus!
So - auszugsweise - könnt's gehen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38:
| var Form1: TForm1; Gedrueckt : Boolean; Taste : Char;
implementation
{$R *.dfm}
procedure Delay(ms : DWord);
var TheTime : DWord; begin TheTime := GetTickCount + ms; while GetTickCount < TheTime do Application.ProcessMessages; end;
procedure TForm1.Button1Click(Sender: TObject); begin Gedrueckt:=False; Delay(3500); if not Gedrueckt then begin Edit1.Text:='nichts gedrückt'; end else begin Edit1.Text:=Taste+' gedrückt'; end; end;
procedure TForm1.Button1KeyPress(Sender: TObject; var Key: Char); begin Gedrueckt:=True; if Gedrueckt then Taste:=Key; end; |
Gruß,
Adrian
maxk - Sa 26.07.03 11:42
Das geht aber nicht in einer Konsolenanwendung :!:
Adrian - So 27.07.03 23:11
Servus!
Da habe ich doch glatt überlesen, daß es ein Pascal-Programm werden soll. Also hier ein neuer Denkanstoß:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25:
| program Taste;
uses dos, crt;
var H,M,S,Sn,D : Word; HoerAufKey, HoerAufZeit : Boolean;
begin ClrScr; HoerAufZeit:=False; HoerAufKey:=False; Write('Bitte geben Sie innerhalb von 12 Sekunden Ihre Kennung ein: '); GetTime(H,M,S,D); Repeat GetTime(H,M,Sn,D); If Keypressed then HoerAufKey:=True; If Sn>S+12 then HoerAufZeit:=True; Until (HoerAufKey) or (HoeraufZeit); Writeln; If HoerAufKey then Writeln('Kennung: '+ReadKey); If HoerAufZeit then Writeln('Keine Kennung eingegeben.'); Readln; end. |
Gruß,
Adrian
maxk - Mo 28.07.03 18:47
Ja, aber gibt es die Funktion KeyPressed nicht auf noch für Konsolenanwendungen (mit Delphi!) (untern anderem Namen selbstverständlich)?
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!