Werte auslesen bei bewegter Maus mit gedrückter Maustaste

Anfängerfragen zum Programmieren mit PureBasic.
Re42
Beiträge: 91
Registriert: 08.11.2020 23:41

Werte auslesen bei bewegter Maus mit gedrückter Maustaste

Beitrag 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.
Benutzeravatar
jacdelad
Beiträge: 341
Registriert: 03.02.2021 13:39
Computerausstattung: Ryzen 5800X, 108TB Festplatte, 32GB RAM, Radeon 7770OC
Wohnort: Riesa
Kontaktdaten:

Re: Werte auslesen bei bewegter Maus mit gedrückter Maustaste

Beitrag 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.
PureBasic 6.04/XProfan X4a/Embarcadero RAD Studio 11/Perl 5.2/Python 3.10
Windows 11/Ryzen 5800X/32GB RAM/Radeon 7770 OC/3TB SSD/11TB HDD
Synology DS1821+/36GB RAM/130TB
Synology DS920+/20GB RAM/54TB
Synology DS916+ii/8GB RAM/12TB
Benutzeravatar
Mijikai
Beiträge: 754
Registriert: 25.09.2016 01:42

Re: Werte auslesen bei bewegter Maus mit gedrückter Maustaste

Beitrag 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.
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Werte auslesen bei bewegter Maus mit gedrückter Maustaste

Beitrag von mk-soft »

CanvasGadget
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Re42
Beiträge: 91
Registriert: 08.11.2020 23:41

Re: Werte auslesen bei bewegter Maus mit gedrückter Maustaste

Beitrag von Re42 »

Der Code ist ja echt Klasse, besten Dank :allright: 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.
Benutzeravatar
jacdelad
Beiträge: 341
Registriert: 03.02.2021 13:39
Computerausstattung: Ryzen 5800X, 108TB Festplatte, 32GB RAM, Radeon 7770OC
Wohnort: Riesa
Kontaktdaten:

Re: Werte auslesen bei bewegter Maus mit gedrückter Maustaste

Beitrag 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...
PureBasic 6.04/XProfan X4a/Embarcadero RAD Studio 11/Perl 5.2/Python 3.10
Windows 11/Ryzen 5800X/32GB RAM/Radeon 7770 OC/3TB SSD/11TB HDD
Synology DS1821+/36GB RAM/130TB
Synology DS920+/20GB RAM/54TB
Synology DS916+ii/8GB RAM/12TB
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8675
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: Werte auslesen bei bewegter Maus mit gedrückter Maustaste

Beitrag 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.
Bild
Re42
Beiträge: 91
Registriert: 08.11.2020 23:41

Re: Werte auslesen bei bewegter Maus mit gedrückter Maustaste

Beitrag 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.
Antworten