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.

Suche in: Delphi-Forum, Delphi-Library 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);
{ Prozedur, die den alten Pascal-Delay-Befehl wieder ermöglicht }
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)?