OnKeyDown/OnKeyUp Abschalten

xerses

Mitglied
Hi.
Hat jemand vielleicht eine Ahnung wie ich die OnKeyDown und OnKeyUp Funktionen abschalten oder den Speicher manuell auslesen kann in dem die gedrückten Tasten gespeichert werden? Ich habe gerade folgendes Problem :
Wenn während einer Schleife eine Taste gedrückt wird, wird nach der Schleife die jeweilige prozedure aufgerufen, die diesem Tastendruck zu geordnet ist. Gerade dies soll aber verhindert werden. Es soll einfach während einer schleife jeder Tastendruck komplett ingnoriert werden. Kenn evtl. jemand n paar gute Tricks dafür? Ein Danke schon mal im voraus! :)

gruß
xerses
 

Surma

Erfahrenes Mitglied
Mir faellt spontan nur das Stichwort "Lokaler Hook" ein. Damit faengste einfach die Nachrichten ab und verschluckst sie... Aber ich denke da gibbet ne einfacherer Methode.
 

xerses

Mitglied
Um ehrlich zu sein hab ich noch nie von so etwas gehört. Ich habe schon versucht den Zeiger des Ereignisses auf nil zu setzten. Dies bringt allerdings nicht das gewollte Resultat. :( Kannst du evtl. ein Beispiel bringen oder hast du ein Link oder so etwas in der Richtung? Wäre echt cool. :) Trotzdem Danke!

gruß
xerses
 

Surma

Erfahrenes Mitglied
Hmm.. wie waers sonst mit ner globalen Bool-Variable, die, wenn sie auf true ist, die ereignisse an die verarbeitungschleife weitergibt, wenn sie false ist nicht? das muesste doch gehen? (Hooks sind dafuer ziemlich hoch gegriffen)
 

xerses

Mitglied
Hmm..Das mit einer globalen boolschen Variable hab ich auch schon in Erwägung gezogen. Nur bringt das auch keine Abhilfe. Meiner Meinung nach muss ich entweder die Schleife bei einem der Ereignisse Unterbrechen das Ereigniss verarbeiten (mit Hilfe einer boolschen Varible) und denn an der gleichen Position weitermachen oder nach Beendigung der Schleife von Hand die Tastendrücke kompett auslesen. Nur weiss ich nicht wie ich das genau machen soll. Wären Threads da evtl. eine Lösung? Wenn ja, wie funktionieren sie? thx

gruß
xerses
 

Hellie

Erfahrenes Mitglied
Ich hab schon ewig nicht mehr programmiert, aber wenn du einfach die gedrückte Taste ignorieren willst, reicht es nicht einfach, die variable Key, die immer mit übergeben wird bei OnKeyPress und co, zu verändern? :-(

Also praktisch:

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
Key:=#0
end;

Dann ein Boolean und eine Abfrage im Code, ich denke, das reicht. Oder hab ich was falsch verstanden?

Hellie
 

xerses

Mitglied
Das mit der boolschen Variable funktioniert leider nicht! Ich habe schon eine solche Variable implementiert. Das würde nur dann funktionieren, wenn die Berechnung parallel zum Hauptprogramm laufen würde. Soweit ich das richtig verstanden hab, ist das allerdings nur mit Threads möglich. Nur verstehe ich die Dinger nicht wirklich. :sad: Soweit ich das beim Tracen richtig verstanden habe, werden die während der Schleife gedrückten Tasten so lange aufgeschoben werden bis die Schleife beendet wurde! Ich hab mir das auch so wie Helli vorgestellt, nur das ich halt nicht eine dieser Prozeduren aufrufen möchte, sondern manuell abfagen möchte, ob eine taste gedrück worden ist. Dies muss unter Delphi doch bestimmt auch ohne viel aufwand abzufragen sein, oder?
Naja, wenn es so nicht hinhaut, werde ich das so lassen. Muss sich halt mein Dozent damit abfinden. :p
Trotzdem DANKE für die Hilfe!

gruß
xerses