Seite 1 von 1
Werte auslesen bei bewegter Maus mit gedrückter Maustaste
Verfasst: 24.09.2022 00:57
von Re42
Hallo, in der PureBasic-Hilfe gibt es ein Beispiel zu WindowMouseX.
Code: Alles auswählen
If OpenWindow(0, 0, 0, 300, 30, "Fenster Maus-Monitor", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
TextGadget(0, 10, 6, 200, 20, "")
Repeat
Event = WaitWindowEvent(20) ; kehre mindestens alle 20 ms für ein Update zurück
SetGadgetText(0, "Fenster Maus-Position: " + Str(WindowMouseX(0)) + "," + Str(WindowMouseY(0)))
Until Event = #PB_Event_CloseWindow
EndIf
Wie kann man das denn so modifizieren, daß die Werte NUR dann kontinuierlich angezeigt werden, wenn die Maus bewegt wird UND zugleich die linke Maustaste gedrückt ist?
Bei nicht gedrückter Maustaste sollen die Werte also nicht angezeigt werden. Danke für Info.
Re: Werte auslesen bei bewegter Maus mit gedrückter Maustaste
Verfasst: 24.09.2022 07:03
von jacdelad
Unter Windows kannst du #WM_LBUTTONDOWN abfangen, das würde ich aber nicht machen. Hier würde ich an deine Stelle über die Mouse-Funktionen der Mouse-Library gehen. Events werden erst ausgelöst, wenn die Maustaste wieder losgelassen wird, es sei denn du nutzt zum Beispiel ein CanvasGadget, dort kannst du auch LeftButtonDown abfragen.
Re: Werte auslesen bei bewegter Maus mit gedrückter Maustaste
Verfasst: 24.09.2022 09:41
von Mijikai
Beispiel (Windows OS):
Code: Alles auswählen
EnableExplicit
Procedure.i Main()
Protected pos.s
If OpenWindow(0,0,0,320,200,#Null$,#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_MinimizeGadget)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
EndSelect
If GetAsyncKeyState_(#VK_LBUTTON) & $8000
pos = Str(WindowMouseX(0)) + " x " + Str(WindowMouseY(0))
SetWindowTitle(0,pos)
ElseIf pos
pos = ""
SetWindowTitle(0,pos)
EndIf
ForEver
CloseWindow(0)
EndIf
ProcedureReturn #Null
EndProcedure
Main()
End
Um zu sehen ob die Maus seit der letzten Eingabe bewegt wurde einfach die alte Position mit der Neuen vergleichen
Es gibt auch hier Window Events & Apis die optional verwendet werden können.
Re: Werte auslesen bei bewegter Maus mit gedrückter Maustaste
Verfasst: 24.09.2022 11:24
von mk-soft
CanvasGadget
Re: Werte auslesen bei bewegter Maus mit gedrückter Maustaste
Verfasst: 24.09.2022 11:58
von Re42
Der Code ist ja echt Klasse, besten Dank

Danke auch für den Tipp mit dem CanvasGadget, allerdings sehen meine ersten Versuche damit total mau aus. Ich hatte versucht, das folgende Beispiel auch mal mit CanvasGadget zu machen, aber das kriege ich nicht hin. Wie geht das denn? Hier der Code:
Code: Alles auswählen
InitSprite()
If OpenWindow(1,0,0,300,300,"",#PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_ScreenCentered) = 0 ; 412
;MessageRequester("OpenWindow failed", "")
EndIf
If OpenWindowedScreen(WindowID(1),0,0,300,300) = 0
MessageRequester("OpenWindowedScreen failed", "")
EndIf
StartDrawing(ScreenOutput())
Box(100,100,100,100,RGB(0,200,0))
StopDrawing()
Repeat
event = WaitWindowEvent()
Until event = #PB_Event_CloseWindow
Danke für weitere Hilfe.
Re: Werte auslesen bei bewegter Maus mit gedrückter Maustaste
Verfasst: 24.09.2022 12:00
von jacdelad
Naja, das liegt daran, dass du kein CanvasGadget verwendest. Siehe mal in der Hilfe unter Gadgets und CanvasGadget nach. Und von Sprites war bisher auch nicht die Rede...
Re: Werte auslesen bei bewegter Maus mit gedrückter Maustaste
Verfasst: 24.09.2022 12:19
von NicTheQuick
Ich hab vor langer Zeit mal ein etwas erweitertes Tutorial zum CanvasGadget in Videoform gemacht, falls dir sowas hilft:
https://youtu.be/eYrBLy13y2Q
Ich bin gerade aber nur mobil unterwegs und am Smartphone. Viel weiter ausholen kann ich dazu gerade nicht.
Re: Werte auslesen bei bewegter Maus mit gedrückter Maustaste
Verfasst: 24.09.2022 12:32
von Re42
InitSprite ist überflüssig bei CanvasGadget, das ist mir klar, aber bei dem obigen ScreenOutput-Code mußte das ja rein. CanvasGadget-Hilfe hatte ich gelesen, aber egal, brauche ich jetzt eh nicht mehr, hat sich erledigt. Das Video werde ich mir aber trotzdem mal ansehen. Danke.
Edit: Vorhin hatte ich der Box, die ich im CanvasGadget zeichnen wollte, keine Farbe zugewiesen, daran lag's. Die Box ist ohne RGB eben nicht einfach schwarz.