Maus loslassen wird null erkannt

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

Maus loslassen wird null erkannt

Beitrag von Re42 »

Hallo,

in meinem Programm reagiert #WM_LBUTTONUP null.

Code: Alles auswählen

If event = #WM_LBUTTONUP : Debug event

......

EndIf : Debug event
Der Debugger liefert nur nach Endif einen Wert (13112), also wird die Abfrage „Maus loslassen“ erst gar nicht erkannt. Die Maus ist aber in Ordnung, denn in meinem Parallelprogramm funktioniert die 1a mit exakt derselben Abfrage und auf ein und demselben Laptop. Ich habe sowas noch nicht erlebt, wie ist denn das möglich? Danke für Info.
Benutzeravatar
Mijikai
Beiträge: 754
Registriert: 25.09.2016 01:42

Re: Maus loslassen wird null erkannt

Beitrag von Mijikai »

Lauffähiger Code zum Testen wäre schön gewesen.

Funktioniert einwandfrei hier:

Code: Alles auswählen


;PB 5.73 x86/x64

EnableExplicit

Procedure.i WindowCallback(hWnd.i,uMsg.i,wParam.i,lParam.i)
  Select uMsg
    Case #WM_LBUTTONDOWN
      Debug 111
    Case #WM_LBUTTONUP
      Debug 222
  EndSelect
  ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure

Procedure.i Main()
  If OpenWindow(0,0,0,320,200,#Null$,#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_MinimizeGadget)
    SetWindowCallback(@WindowCallback())
    Repeat
      Select WaitWindowEvent()
        Case #PB_Event_CloseWindow
          Break
      EndSelect
    ForEver
    CloseWindow(0)  
  EndIf  
  ProcedureReturn #Null
EndProcedure

Main()

End
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6999
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Maus loslassen wird null erkannt

Beitrag von STARGÅTE »

13112 ist der Wert für das Pure Basic Event #PB_Event_LeftClick, also genau das Event was du suchst wenn die Maus losgelassen wird.
Wo kommt denn dein event her? Die #WM konstanten werden ja in der PB Dokumentation nicht aufgeführt, man sollte sie wenn überhaupt nur im Callback (SetWindowCallback()) nutzen (wie es Mijikai richtigerweise zeigt, danke dafür ^^).
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
tft
Beiträge: 605
Registriert: 08.09.2004 20:18
Computerausstattung: GTX Titan , i9 9900K , 32 GB Ram , 500 GB SSD , 3 ASUS FullHD Monitore and more
Wohnort: Dachsen
Kontaktdaten:

Re: Maus loslassen wird null erkannt

Beitrag von tft »

Hallo, .... Stargate ...... ich dachte du hast dich verabschiedet :-)

Nachfolgenden Code, der nicht von mir ist, aber etwas erweitert. Verwende ich um Events zu testen oder zu prüfen. Vielleicht hilft er ja.

Code: Alles auswählen

; German forum: http://www.purebasic.fr/german/archive/viewtopic.php?t=735&highlight=
; Author: bobobo (updated for PB4.00 by blbltheworm)
; Date: 23. April 2003
; OS: Windows
; Demo: No


;Autor : bobobo 
;----------------------------------------- 
;Tastatur und Mausmessages in Fenstern OHNE directX 
;dafür mit eventwParam und eventLParam (aber nur zur Anzeige für ganz Neugierige) 
;soweit ich weiß wird EventwParam und EventlParam irgendwann nicht mehr unterstützt 
;bis dahin gilt: 
;Solange die Maus im Fensterchen ist gibt es bei Bewegung derselben 
;diverse Mausmessages ..  Und .. Bei aktivem Fenster und Tastaturereignissen 
;gibt's Tastaturmessages (Taste runter und Tastehoch u.s.w.) 

;ömm ja .. Debug aktivieren !! 

OpenWindow(1,0,0,200,100,"Event Test",#PB_Window_SystemMenu |#PB_Window_ScreenCentered)    
ButtonGadget(1, 0, 0,  80, 20, "Play")
ButtonGadget(2, 90, 0,  80, 20, "Stop")  
DisableGadget(2,1) 
  
Debug "Bitte drücken sie eine beliebige Taste!"+Str(rr) 
GetCursorPos_(st.POINT) 
Debug st\x 
Debug st\y 

Repeat 
  
  Event=WaitWindowEvent() 
  
  Select Event
    Case #PB_Event_CloseWindow  
      Break
    Case #PB_Event_Gadget
      Select EventGadget()
       Case 1 ; Play
          DisableGadget(2,0)  ; Enable the 'Stop' gadget
          DisableGadget(1,1)  ; Disable the 'Play' Gadget
       Case 2 ; Stop
          DisableGadget(1,0)  ; Enable the 'Play' gadget
          DisableGadget(2,1)  ; Disable the 'Stop' Gadget
       EndSelect 
     
    Case #WM_MOUSEWHEEL
      If (EventwParam() >> 16) & $8000
        Debug "Down"
      Else         
        Debug "Up"
      EndIf
    Case #WM_MOUSEMOVE 
      Debug "#WM_MOUSEMOVEw " + Str(EventwParam()) 
      Debug "#WM_MOUSEMOVEl " + StrF(EventlParam()) 
    Case #WM_LBUTTONDBLCLK  
      Debug "#WM_LBUTTONDBLCLK " + Str(EventwParam()) 
      Debug "#WM_LBUTTONDBLCLK " + Str(EventlParam()) 
      
    Case #WM_LBUTTONDOWN  
      Debug "#WM_LBUTTONDOWN " + Str(EventwParam()) 
      Debug "#WM_LBUTTONDOWN " + Str(EventlParam()) 
      
    Case #WM_LBUTTONUP  
      Debug "#WM_LBUTTONUP " + Str(EventwParam()) 
      Debug "#WM_LBUTTONUP " + Str(EventlParam()) 
      
    Case #WM_RBUTTONDOWN  
      Debug "#WM_RBUTTONDOWN " + Str(EventwParam()) 
      Debug "#WM_RBUTTONDOWN " + Str(EventlParam()) 
      
    Case #WM_RBUTTONUP 
      Debug "#WM_RBUTTONUP" + Str(EventwParam()) 
      Debug "#WM_RBUTTONUP" + Str(EventlParam()) 
      
    Case #WM_MBUTTONDBLCLK 
      Debug "#WM_MBUTTONDBLCLK " + Str(EventwParam()) 
      Debug "#WM_MBUTTONDBLCLK " + Str(EventlParam()) 
    Case #WM_MBUTTONDOWN 
      Debug "#WM_MBUTTONDOWN " + Str(EventwParam()) 
      Debug "#WM_MBUTTONDOWN " + Str(EventlParam()) 
    Case #WM_MBUTTONUP 
      Debug "#WM_MBUTTONUP " + Str(EventwParam()) 
      Debug "#WM_MBUTTONUP " + Str(EventlParam()) 
      
    Case #WM_NCMOUSEMOVE 
      Debug "#WM_NCMOUSEMOVE " + Str(EventwParam()) 
      Debug "#WM_NCMOUSEMOVE " + Str(EventlParam()) 
      
    Case #WM_NCLBUTTONDBLCLK 
      Debug "#WM_NCLBUTTONDBLCLK " + Str(EventwParam()) 
      Debug "#WM_NCLBUTTONDBLCLK " + Str(EventlParam()) 
      
      
      
    Case #WM_ACTIVATE 
      Debug "#WM_ACTIVATE " +Str(EventwParam()) 
      Debug "#WM_ACTIVATE " +Str(EventlParam()) 
    Case #WM_CHAR 
      Debug "#CHAR w:    " + Chr(EventwParam())
      Debug "#CHAR l:    " + Str(EventlParam()) 
    Case #WM_DEADCHAR 
      Debug "#DEADCHAR:   " + Str(EventwParam()) 
    Case #WM_KEYDOWN 
      Debug "#KEYDOWN(w): " + Str(EventwParam()) 
      Debug "#KEYDOWN(l): " + Str(EventlParam()) 
    Case #WM_KEYUP 
      Debug "#KEYUP(w):   " + Str(EventwParam()) 
      Debug "#KEYUP(l):   " + Str(EventlParam()) 
    Case #WM_SYSCHAR 
      Debug "#SYSCHAR:   " + Str(EventwParam()) 
    Case #WM_SYSDEADCHAR  
      Debug "#SYDEADSCHAR:   " + Str(EventwParam()) 
    Case #WM_SYSKEYDOWN 
      Debug "#SYSKEYDOWN:   " + Str(EventwParam()) 
    Case #WM_SYSKEYUP 
      Debug "#SYSKEYUP:   " + Str(EventwParam()) 
    Default      
      Debug Event
  EndSelect 
  
  GetCursorPos_(st.POINT) 
  Debug st\x 
  Debug st\y 
  
  Debug "-----------------"   
  
ForEver 
End 
TFT seid 1989 , Turgut Frank Temucin , Dachsen/Berlin/Antalya
Aktuelles Projekte : Driving School Evergarden
YouTube : Pure Basic to go
FaceBook : Temuçin SourceMAgic Games
DISCORD : SourceMagic
W10 , i9 9900K ,32 GB Ram , GTX Titan , 3 Monitore FHD
ARDUINO Freak :-)
Re42
Beiträge: 91
Registriert: 08.11.2020 23:41

Re: Maus loslassen wird null erkannt

Beitrag von Re42 »

Danke für die Antworten, aber Windowcallback ist nur für erfahrene Programmierer und das ist mir auch zu hoch. PureBasic erhebt ja den Anspruch, für alle da zu sein, die logisch denken können und genau das tue ich. Ich habe schon etliche Programme geschrieben, auch mit #WM_LBUTTONUP dabei, aber sowas wie jetzt ist mir noch nicht vorgekommen.

Der Abfragewert für den Linksklick-Event = 13112
und der Abfragewert für den Mausloslassen-Event = 514

Edit: In meinem Code ist noch mehr im Busch, wie ich jetzt gemerkt habe. Ich melde mich später wieder, falls es dann doch funktioniert. Danke nochmals.
Zuletzt geändert von Re42 am 26.12.2020 14:55, insgesamt 1-mal geändert.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8679
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: Maus loslassen wird null erkannt

Beitrag von NicTheQuick »

Wieso nutzt du überhaupt die Windows-Konstanten, wenn du auch einfach #PB_Event_LeftClick benutzen könntest?
Bild
Re42
Beiträge: 91
Registriert: 08.11.2020 23:41

Re: Maus loslassen wird null erkannt

Beitrag von Re42 »

#PB_Event_Leftclick ist doch nur zum Abfragen der gedrückten Maus. Ich will aber die wieder losgelassene Maus abfragen.
Benutzeravatar
Mijikai
Beiträge: 754
Registriert: 25.09.2016 01:42

Re: Maus loslassen wird null erkannt

Beitrag von Mijikai »

Wenn (#WM_) Messages nicht im Callback abgefragt werden dann benutzt wenigestens PeekMessage_() :roll:
Re42
Beiträge: 91
Registriert: 08.11.2020 23:41

Re: Maus loslassen wird null erkannt

Beitrag von Re42 »

Edit: Ursprünglicher Beitrag war nicht mehr aktuell.
Zuletzt geändert von Re42 am 26.12.2020 18:27, insgesamt 1-mal geändert.
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: Maus loslassen wird null erkannt

Beitrag von ccode_new »

Frohe Weihnachten, Gesundheit, etc ...


An Re42:
Re42 hat geschrieben: Es bleibt dabei, daß in dem Code #WM_LBUTTONUP nicht die Bohne abgefragt werden kann und ich werde das auch Purebasic melden. Sollen die doch endlich mal einen PB-eigenen Befehl zum Abfragen der wieder losgelassenen Maus einführen.
Kannst du mal einen zusammenhängenden Code, oder ein Video, etc. posten wo man dein Problem sieht.

Vielleicht liegt auch einfach ein Gadget auf deinem Fenster und du kannst deswegen nicht direkt auf das Fenster klicken und bekommst daher keine Eventabfrage.

???
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
Antworten