26.07.2008, 11:49
Beitrag #1
|
labruss
LVF-Grünschnabel
Beiträge: 11
Registriert seit: Jul 2008
7.1
-
de
71638
Deutschland
|
Wo werden Tasteneingaben gepuffert??
Hallo zusammen:
Weiß jemand wo Tasteneingaben gepuffert werden? Ich benutze sie in Eventcases.
Und was noch wichtiger ist: Kann man diesen Puffer löschen/leeren??
gruß labruss
|
|
|
27.07.2008, 13:21
Beitrag #2
|
IchSelbst
LVF-Guru
Beiträge: 3.697
Registriert seit: Feb 2005
11, 14, 15, 17, 18
-
DE
97437
Deutschland
|
Wo werden Tasteneingaben gepuffert??
' schrieb:Weiß jemand wo Tasteneingaben gepuffert werden?
Wenn der Anwender eine Eingabe macht (z.B. Maus oder Tastatur) versendet Windows an die zum Eingabezeitpunkt aktive Applikation (eigentlich an die, die gerade den Tastatur/Maus-Fokus hat) eine Message. Diese Message enthält unter anderem den Wert der Eingabe. Die Message geht zuerst an die Applikation als solche und die verteilt die Messages dann an ihre Eingabeelemente etc.
Es gibt eigentlich keinen Puffer für die eingegebenen Zeichen, sondern nur eine Warteschlange für alle Messages. Ein Eingabeelement holt sich die Tastatureingaben also nicht ab, sondern bekommt sie unaufgefordert zugeschickt.
Für Tastatureingaben gibt es aber spezielle Messages wie z.B. OnKeyDown, OnKeyUp, OnKeyPressed etc. Die Massages kann man abfangen und manipulieren. Z.B. im Eventcase "Application.Taste..." oder im entsprechenden Case "MyInpField.Taste..." eines beliebigen Eingabefelder MyInpField.
Zitat:Und was noch wichtiger ist: Kann man diesen Puffer löschen/leeren??
Ich sehe zwei Möglichkeiten, Tasten zu ignorieren.
Entweder in "Application.Taste..." abfangen und löschen (ScanCode=0; VK_Value=0; etc) oder nach dem Fokusieren eines Eingabefeldes das Eingabefeld löschen.
Warum willst du den Tastaurpuffer denn überhaupt löschen?
Hinweis:
Manchmal sieht das Nicht-Bearbeiten der Messagequeue aus wie ein Tastaturpuffer. Dann sollte aber eher die Messagequeue bearbeitet werde, als der Tastaturpuffer gelöscht.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
|
|
|
30.07.2008, 08:20
Beitrag #4
|
jg
CLA & CLED
Beiträge: 15.864
Registriert seit: Jun 2005
20xx / 8.x
1999
EN
Franken...
Deutschland
|
Wo werden Tasteneingaben gepuffert??
' schrieb:...
Ich hab an 3 Stellen in meinem Programm einen Eventcase im "Keydown-Modus"...Nun gibt es zwei Probleme:
Erstens, wenn man mehrmals auf eine Taste drückt wird die Aktion auch mehrmals ausgeführt , z.B. Taste für Messung starten...die Messung läuft dann und wenn ich aus Versehen 2mal grdrückt habe dann starten es die Messung nach Beendigung der ersten Messung direkt neu.
Hier wäre als ein "Pufferlöschen" am Ende der Aktion nützlich!
Zweitens:
Wenn ich an dem einen Eventcase eine Taste (oder mehrere) drücke,dann werden diese ganz normal abgearbeitet. Wenn ich danach direkt an einer anderen Programmstelle an ein Eventcase komme, dann werden alle die Tasten auch dort nochmal "eingelesen"...
...
1. Verstehe ich richtig, du hast innerhalb eines VIs (am besten noch innerhalb einer While-Schleife) mehrere Event-Strukturen verwendet?? Das sollte man unbedingt vermeiden! Führt in der Regel (so wie bei dir) nur zu Ärger. Lies dir mal die Hinweise in der LV-Hilfe zur Verwendung der Event-Struktur durch!
2. Zu deinem ersten Problem, dann brauchst du halt noch zusätzliche Überprüfungen, z.B. trotz Event wird eine Messung nicht gestartet, da noch nicht genug Zeit seit Ende der letzten Messung vergangen ist, oder, oder, oder, ...
MfG, Jens
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
Einführende Links zu LabVIEW, s. GerdWs Signatur.
|
|
|
30.07.2008, 08:34
Beitrag #5
|
IchSelbst
LVF-Guru
Beiträge: 3.697
Registriert seit: Feb 2005
11, 14, 15, 17, 18
-
DE
97437
Deutschland
|
Wo werden Tasteneingaben gepuffert??
' schrieb:Erstens, wenn man mehrmals auf eine Taste drückt wird die Aktion auch mehrmals ausgeführt , z.B. Taste für Messung starten...die Messung läuft dann und wenn ich aus Versehen 2mal grdrückt habe dann starten es die Messung nach Beendigung der ersten Messung direkt neu.
Hier wäre als ein "Pufferlöschen" am Ende der Aktion nützlich!
Die Taste, die du hier ein zweites Mal gedrückt hast, wird nicht im Tastaturpuffer zwischengespeichert, sondern z.B. (es gibt hier mehrere Möglichkeiten) in der Eingangsqueue einer Event-Struktur - also innerhalb LV.
Eine Möglichkeit um das mit dem "Puffer" zu vermeiden kann folgende sein: Nimm eine Queue um den Startbefehl vom Event zur Messung zu führen. Am Ende der Messung löscht du die Queue. Dadurch wird quasi ein "Puffer-Löschen" simuliert.
Zitat:Wenn ich an dem einen Eventcase eine Taste (oder mehrere) drücke,dann werden diese ganz normal abgearbeitet. Wenn ich danach direkt an einer anderen Programmstelle an ein Eventcase komme, dann werden alle die Tasten auch dort nochmal "eingelesen"...
Zwei Methoden für ein Event? Das gibt nur Ärger! Lieber nur ein Event-Case mit Queue!
Zitat:Das ist normalerweise keine Problem, weil die Tasten meist andere sind und damit in diesem Case kein Event auslösen, aber wenn man nun etwas schreibt, oder nur aus Versehen auf eine Taste kommt die nunmal in einem anderen Case ein Event auslöst dann hat man ein Problem.
Richtig.
Gegen mehrere Event-Cases bin ich ja nicht unbedingt. Allerdings dagegen, dass ein Ereignis in mehreren Cases abgefragt werden kann.
Zitat:Was genau ist denn die Eventoption: "Key down ?" im Gegensatz zu "Key down"...???
Da müsste ich erst selbst nachsehen (was unter Tage (?) aber wie immer nicht geht): Bei ersterem kann überprüft werden, ob es sich überhaupt um einen KeyDown handelt, zweiterer ist tatsächlich ein KeyDown.
Zitat:Hab gehört das man damit Sachen verwerfen kann...
Ja. z.B. ScanCode=0 oder VK_Value=0
Zitat:Ebenso kann man doch auch zwischen Funktions- und "normalen" Ascii-Tasten unterscheiden oder ??
Ja. VK_Code abfragen etc.
Zitat:Hat jemand eine Idee was man gegen das Problem beim Mehrfachdrücken machen kann??
Tasten disables, Queue verwenden (= Puffer selber machen) etc.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
|
|
|
31.07.2008, 07:57
Beitrag #6
|
labruss
LVF-Grünschnabel
Beiträge: 11
Registriert seit: Jul 2008
7.1
-
de
71638
Deutschland
|
Wo werden Tasteneingaben gepuffert??
Kann man einen Tastendruck auch disablen??? Dachte das geht nur bei Buttons etc.
labruss
|
|
|
31.07.2008, 08:57
Beitrag #7
|
labruss
LVF-Grünschnabel
Beiträge: 11
Registriert seit: Jul 2008
7.1
-
de
71638
Deutschland
|
Wo werden Tasteneingaben gepuffert??
UNd wie kann ich einen Befehl vor der Abarbeitung abfangen??
Zudem ist das ja problematisch weil während ich eine Messung mache bin ich ja innerhalt einer While-Schleife...und in dieser Zeit kann ich ja keine anderen anderen BEfehle ausführen...
labruss
|
|
|
31.07.2008, 12:34
|
Achim
*****
Beiträge: 4.223
Registriert seit: Nov 2005
20xx
2000
EN
978xx
Deutschland
|
Wo werden Tasteneingaben gepuffert??
Hi,
du kannst ja Buttons mit dem Property "Disabled"= 2 in den Zustand "Disabled and greyed out" versetzen...dann kann man sie nicht mehr betätigen und das Event "Value Changed" kann nicht mehr auftreten. Allerdings wird trotzdem das Event "Mouse down" detektiert und gepuffert und dann irgendwann nachträglich ausgeführt. Aus diesem Grund sollte ein Buttonevent immer mit ValueChange erfasst werden.
Wie oben schon mal beschrieben:
Bei Tastatureingaben kannst du mit "Key Down ?" (das ist ein Filterevent) abfragen, welche Taste betätigt wurde und diese dann gegebenenfalls verwerfen ("Discard" = TRUE). Ob du sie verwerfen willst, musst du dir irgendwie festlegen...z.B. wenn bei einem vorherigen Event mal in einer Booleschen Varible "Messung 1 aktiv" = TRUE gespeichert wurde und diese Variable dann im neuen Event abgefragt wird...
Zitat:Im Moment habe ich zwar pro "Messart" 2 Eventcases, aber die werde ich jetzt zu einem machen. Aber wenn ich insgesamt im Programm 3 Eventcases hab (einen pro MEssart), jedoch immer nur einer verwendet wird pro Programmaufruf, dann dürfen die sich doch nicht stören.
Aus welchem Grund sollten denn die drei Eventstrukturen nötig sein? Diese eine Struktur kann doch alle deine Events abfangen!
"Is there some mightier sage, of whom we have yet to learn?"
"Opportunity is missed by most people because it is dressed in overalls and looks like work." (Thomas Edison)
|
|
|
| |