Autor Beitrag
Mr_T
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 73

Win XP, Fedora Core RC 1

BeitragVerfasst: So 12.01.03 13:51 
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.....

_________________
Es gibt 10 Arten Binäre Zahlen zu interpretieren: 0 und 1
Wer nicht kämpft, hat schon verloren!
tommie-lie
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 4373

Ubuntu 7.10 "Gutsy Gibbon"

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

_________________
Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
Mr_T Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 73

Win XP, Fedora Core RC 1

BeitragVerfasst: So 12.01.03 14:31 
Ne sorry das funzt bei mir nicht... ich habe bislang versuchte es so zu machen:

ausblenden 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........

_________________
Es gibt 10 Arten Binäre Zahlen zu interpretieren: 0 und 1
Wer nicht kämpft, hat schon verloren!
tommie-lie
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 4373

Ubuntu 7.10 "Gutsy Gibbon"

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

_________________
Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
Mr_T Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 73

Win XP, Fedora Core RC 1

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

_________________
Es gibt 10 Arten Binäre Zahlen zu interpretieren: 0 und 1
Wer nicht kämpft, hat schon verloren!
tommie-lie
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 4373

Ubuntu 7.10 "Gutsy Gibbon"

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

_________________
Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
Wolff68
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 302
Erhaltene Danke: 1

WinXP home
D6 Prof
BeitragVerfasst: 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:
ausblenden 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.

_________________
"Der Mensch ist nicht was er sich vorstellt oder wünscht zu sein, sondern das was andere in ihm sehen."