"OnKeyPress" für die Maus
-
Hallo zusammen,
ich habe folgendes Problem:
Ich möchte beim drücken auf einen Button, einen Befehl über einen Bus schicken. Das klappt soweit sehr gut.
Jetzt möchte ich, das dies zyklisch geschieht solange ich den Button drücke (dadurch dreht ein Motor).
Mit der Funktion "OnKeyPress" funktioniert das auch ausgezeichnet.
Wie kann ich nun den selben Effekt erzielen mit dem betätigen des Buttons per Maustaste?????????
Ich wollte in der "OnMouseDown" Fkt. eine Abfrage einfügen ob die Maustaste noch gedrückt ist. Dies hat bei mir bisher nur zu einer Endlosschleife geführt!
Ich hoffe ihr könnt mir helfen?!Vielen Dank.
mfg hans
-
Warum nimmst du nicht die ButtonClick-Funktion?
-
Nimm doch die TTimer-Komponente, wo du diesen Befehl sendest, den Interval kannst du selbst einstellen, dann im OnMouseDown setzt du Enabled auf true und im OnMouseUp auf false (Und Standard-Wert, den du im BCB stellst, auf false)
Edit: OnKeyPress wird immer ausgelöst, wenn vom System der Tastendruck gesendet wird, da gibt es einen Interval, d.h. der KeyPRess wird solange ausgeführt, bis man die Taste loslässt, und das immer im Interval; Bei der Maus gibt es soetwas nicht, da musst du dir selbst etwas basteln, denn bei der MAus herrscht "Stille", solange nichts passiert.
-
Dafür braucht er keinen Timer. man braucht nur in OnMouseDown eine bool-Variable auf true zu setzen, die in OnMouseUp wieder false wird. Die kann man dann jederzeit abfragen.
-
JA, aber er muss doch im Interval seinen Befehl senden, dafür würde sich die TTimer-Komponente ganz nützlich machen, es sei denn er hat bereits eine andere Lösung für dieses Problem.
-
Die Frage ist ja dann wohl, wie man diesen Satz interpretiert
etzt möchte ich, das dies zyklisch geschieht solange ich den Button drücke (dadurch dreht ein Motor).
Ich denke, wir warten mal ab, was der OP dazu zu sagen hat.
-
Hallo zusammen,
also das setzen einer bool variablen und diese als Bediengung für eine while schleife zu benutzen funktioniert leider nicht! Dies gibt nur eine Endlosschleife (Ich denke, dass das Programm auf "OnMouseUp" nicht reagiert, weil die while schleife "läuft".)Mit dem Timer habe ich es noch nicht probiert, werd wohl auch erst morgen dazu kommen.
Das zyklische senden ist nicht das Problem, da der Hersteller der Bustreiberkarte über DLL die Funktionen für den Bus zu Verfügung stellt und ich lediglich einen Befehl mit Übergabeparamtern aufrufen muss.
-
Wer hat was von eine while-Schleife gesagt?
-
also das setzen einer bool variablen und diese als Bediengung für eine while schleife zu benutzen funktioniert leider nicht! Dies gibt nur eine Endlosschleife (Ich denke, dass das Programm auf "OnMouseUp" nicht reagiert, weil die while schleife "läuft".)
Schon mal ProcessMessages in die Schleife gesetzt?
-
@Braunstein: While - schleife war einfach mein Versuch!
ALso ich hab es jetzt über den Timer gelöst (kürzeste Intervallzeit und als Timerevent das senden über den Bus).
Das aktivieren des Timers mache ich mit MouseDown bzw. MouseUp. Die Lösung funktioniert, also vielen Dank für die Hilfe.
Allerdings würde mich eine Lösung ohne Timer ebenfalls interessieren.mfg Hans