Maus/ Tastaturpuffer löschen
Maus/ Tastaturpuffer löschen
Gibt es eigentlich einen Befehl in PB, mit dem man den Mauspuffer bzw. den Tastaturpuffer wieder leer machen kann?
Ähnlich den Befehlen FlushMouse() oder FlushKeyboard() aus BlitzBasic?
Die Suchfunktion brachte keine Einträge darüber und die WinAPI- Doku schweigt sich auch aus.
Wer Ansätze für einen Alghorithmus kennt oder einen Link, bitte posten!
thx, Leute!
Ähnlich den Befehlen FlushMouse() oder FlushKeyboard() aus BlitzBasic?
Die Suchfunktion brachte keine Einträge darüber und die WinAPI- Doku schweigt sich auch aus.
Wer Ansätze für einen Alghorithmus kennt oder einen Link, bitte posten!
thx, Leute!
gô ni itte wa gô ni shitagae.
(Wenn du in ein Dorf kommst, richte dich nach seinen Gepflogenheiten - jap. Sprichwort.)
(Wenn du in ein Dorf kommst, richte dich nach seinen Gepflogenheiten - jap. Sprichwort.)
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
Naja, die Sache ist die: Ich frage im Rahmen eines Programms die Maus ab, woraufhim man in so eine Art Zeichenmodus kommt und dann mit der Maus auf dem Bildschirm rummalen kann. Blöderweise habe ich jedesmal, wo ich auf den Selfmadebutton geklickt habe auch schon einen Punkt auf den Bildschirm gemalt.
Allerdings hat bisher auch kein zweimaliges ExamineMouse() geholfen...
Allerdings hat bisher auch kein zweimaliges ExamineMouse() geholfen...
gô ni itte wa gô ni shitagae.
(Wenn du in ein Dorf kommst, richte dich nach seinen Gepflogenheiten - jap. Sprichwort.)
(Wenn du in ein Dorf kommst, richte dich nach seinen Gepflogenheiten - jap. Sprichwort.)
Nachdem du auf den Button geklickt hast, kannst du doch mit einer Schleife warten, bis die Maustaste wieder losgelassen wurde, oder?
Einfacher gehts mit der API, aber du kannst es vom Sinn her auch umschreiben mit PB-Befehlen:
Es wird solange das Delay repeated, bis die Linke Maustaste losgelassen wurde; die API Funktion dort gibt dann null zurück. Die 2. Schleife mit While habe ich drunter geschrieben, als alternative, die fiel mir hinterher ein (ist eleganter); es ist aber egal welche Methode du Benutzt. Haken: Dieser Code funktioniert nur unter Windows. Das Delay ist dazu da, damit der Computer nicht allzustark ausgelastet wird, wenn die chleife solange wiederholt wird.
Einfacher gehts mit der API, aber du kannst es vom Sinn her auch umschreiben mit PB-Befehlen:
Code: Alles auswählen
; Button wurde geklickt
Repeat : Delay(1) : Until GetAsyncKeystate_(#VK_LBUTTON) = 0
While GetAsyncKeystate_(#VK_LBUTTON) : Delay(1) : Wend
; Hier bei erneutem Druck malen oder ein Eis backen...
PB 4.30
Code: Alles auswählen
Macro Happy
;-)
EndMacro
Happy End
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
> Allerdings hat bisher auch kein zweimaliges ExamineMouse() geholfen...
also arbeitest du mit nem screen?
die lösung die AND51 vorgeschlagen hat, kannst du auch mit dem PB-Befehl MouseButton() durchführen.
wichtig ist: warten bis wieder losgelassen.
auch bei abfrage von ESC ist sowas wichtig, wenn ESC ein untermenu verlässt, und danach auch das Hauptmenu verlassen kann.
also arbeitest du mit nem screen?
die lösung die AND51 vorgeschlagen hat, kannst du auch mit dem PB-Befehl MouseButton() durchführen.
wichtig ist: warten bis wieder losgelassen.
auch bei abfrage von ESC ist sowas wichtig, wenn ESC ein untermenu verlässt, und danach auch das Hauptmenu verlassen kann.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
Danke, das hilft mir enorm weiter.
Nur unter Windows, ist immer noch besser als gar nicht...
Aber findet sich auch ein Linux oder MAC Progger, der dafür ne Lösung parat hat.
Und ja, ich arbeite mit nem Screen, gut kombiniert Watson
Nur unter Windows, ist immer noch besser als gar nicht...
Aber findet sich auch ein Linux oder MAC Progger, der dafür ne Lösung parat hat.
Und ja, ich arbeite mit nem Screen, gut kombiniert Watson

gô ni itte wa gô ni shitagae.
(Wenn du in ein Dorf kommst, richte dich nach seinen Gepflogenheiten - jap. Sprichwort.)
(Wenn du in ein Dorf kommst, richte dich nach seinen Gepflogenheiten - jap. Sprichwort.)
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
du kannst statt mit einer warteschleife auch mit flags arbeiten...
MB liefert nur beim ersten Hauptschleifendurchgang den Mausklick,
wenn man den Button noch weitere Hauptschleifendurchgänge gedrückt hält,
bleibt MB = 0, erst wenn man den Button wieder losläßt, kann man erneut drücken,
und MB wird wieder =1 für genau einen Durchgang.
ich persönlich ziehe flags vor.
warteschleifen innerhalb von hauptschleifen, die das komplette timing stören können, sind in meinen augen schlechter programmier-stil.
Code: Alles auswählen
; ---- innerhalb der Hauptschleife ----
MB = 0
If MouseButton(1)
If MBOld = 0
MB = 1
MBOld = 1
EndIf
Else
MBOld = 0
EndIf
wenn man den Button noch weitere Hauptschleifendurchgänge gedrückt hält,
bleibt MB = 0, erst wenn man den Button wieder losläßt, kann man erneut drücken,
und MB wird wieder =1 für genau einen Durchgang.
ich persönlich ziehe flags vor.
warteschleifen innerhalb von hauptschleifen, die das komplette timing stören können, sind in meinen augen schlechter programmier-stil.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
Hmm.... ich hab das mal ausprobiert und es läuft tatsächlich besser, als mit der Warteschleife, meiner Meinung nach.
Die Idee mit den Flags war mir früher schon in ähnlicher Form gekommen, hat aber damals nicht hingehauen... (frag nicht warum, ich lerne noch)

Die Idee mit den Flags war mir früher schon in ähnlicher Form gekommen, hat aber damals nicht hingehauen... (frag nicht warum, ich lerne noch)
gô ni itte wa gô ni shitagae.
(Wenn du in ein Dorf kommst, richte dich nach seinen Gepflogenheiten - jap. Sprichwort.)
(Wenn du in ein Dorf kommst, richte dich nach seinen Gepflogenheiten - jap. Sprichwort.)