Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi tastendrücke reaktivieren (https://www.delphipraxis.net/89459-tastendruecke-reaktivieren.html)

Noobinator 31. Mär 2007 13:20


tastendrücke reaktivieren
 
hi: doch noch ne Frage.

ich habe ein Programm in dem ich während eine Procedure läuft alle tastendrücke daktivieren muss.
denn meine Procedure ist in dem onkeydown ereigniss, und wenn ich während der Procedure wieder eine Taste Drücke fängt die Procedure von vorne an.

also habe ich bisher:

Delphi-Quellcode:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
 Form1.OnKeyDown:=NIL;
 machwas
 form1.Onkeydown:= ????
end;
was muss hier hin damit ich die tastendrücke wieder abfangen kann?
oder kann ich das auch ganz anderst realisieren?
einfach

Delphi-Quellcode:
Key:=vk_Null
geht nicht, da er ja dennoch in die keydown procedure reingeht.

Noobinator 1. Apr 2007 11:26

Re: tastendrücke reaktivieren
 
*push*

DGL-luke 1. Apr 2007 11:30

Re: tastendrücke reaktivieren
 
Hallo,

wenn deine procedure nicht asynchron läuft, sollte es absolut keinen unterschied machen - die tastendrücke werden in die nachrichten-warteschlange gepackt und werden dann nach ende deiner prozedur abgearbeitet.

Ansonsten deklariere eine (form-)globale Boolean-Variable "Working" und mach es so:

Delphi-Quellcode:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if not working then
begin
  working := true;
  machwas;
  working := false;
end;
end;

Noobinator 1. Apr 2007 11:37

Re: tastendrücke reaktivieren
 
Zitat:

Zitat von DGL-luke
.....

Die idee hatte ich auch schon, aber diese Funktioniert nicht, da wenn die Tastendrücke in die Warteschlange gelegt werden die Procedure dennoch x-mal nacheinander ausgeführt wird, was sie aber nicht darf.

es dürfen wirklich keinerlei tastendrücke durchkommen.

Robert Marquardt 1. Apr 2007 11:43

Re: tastendrücke reaktivieren
 
Stuß oder feiner ausgedrueckt du verfolgst den falschen Ansatz.
Einfach ein Flag am Anfang der Prozedur abfragen und setzen setzen das besagt das die Prozedur schon gelaufen ist. Danach kann man die Taste so oft druecken wie man will und es passiert nichts mehr.

Noobinator 1. Apr 2007 11:52

Re: tastendrücke reaktivieren
 
also ich glaube ich sollte mein Problem mal näher erörtern.

Ich schreibe momentan ein Spiel.

und in diesem Spiel kann man mit einer Spielfigur rumlaufen.

wenn man jetzt in bestimmte gebiete kommt, dann soll eben was passieren. also habe ich auf das Onkeydown ereigniss gesetzt, mit dem sich meine Figur auch bewegt.

Delphi-Quellcode:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if bewegen then
  figur.bewege;
if gebiet then
  machwas;
end;
wenn ich jetzt einmal in das Event-Gebiet komme, soll sich die Figur was machen.
wenn man jetzt allerdings während der procedure machwas wieder eine Taste drückt, ohne das sich die Figur bewegen konnte (Mauer,Wand etc..) dann kommt wieder die procedure machwas,und zwar sooft wie ich die taste gedrückt habe, und das möchte ich unterbinden.
also einfach alle Tastendrücke Deaktivieren während die procedure läuft.

allerdings soll die Figur nachdem die procedure lief wieder in das Gebiet gehen können, und es passiert wieder die procedure machwas.

Noobinator 1. Apr 2007 13:07

Re: tastendrücke reaktivieren
 
ok ich habe es^^

Delphi-Quellcode:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
Form1.OnKeyDown:=NIL;
machwas
form1.Onkeydown:= formkeydown; //den Befehl habe ich gesucht
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:33 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz