Autor Beitrag
MadMaiden
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Mi 23.07.03 12:16 
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??? )

_________________
Life's a lesson...and I'm the Theatcher
maxk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1696
Erhaltene Danke: 1

Win XP, Debian Lenny
Delphi 6 Personal
BeitragVerfasst: 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

_________________
Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: 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...?

_________________
Life's a lesson...and I'm the Theatcher
Adrian
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 314



BeitragVerfasst: Fr 25.07.03 14:40 
Servus!

So - auszugsweise - könnt's gehen:
ausblenden volle Höhe 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1696
Erhaltene Danke: 1

Win XP, Debian Lenny
Delphi 6 Personal
BeitragVerfasst: Sa 26.07.03 11:42 
Das geht aber nicht in einer Konsolenanwendung :!:

_________________
Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.
Adrian
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 314



BeitragVerfasst: 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ß:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1696
Erhaltene Danke: 1

Win XP, Debian Lenny
Delphi 6 Personal
BeitragVerfasst: 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)?

_________________
Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.