kein Mouse-Event Maustaste

Anfängerfragen zum Programmieren mit PureBasic.
z3alf
Beiträge: 1
Registriert: 01.05.2022 14:39

kein Mouse-Event Maustaste

Beitrag von z3alf »

Hallo PB-Forum

ich bekomme keinen MouseEvent (linke Maustaste) obwohl die Maus angeschlossen ist.
Wird im Fenster angezeigt...
Bei einem Linken Maustasten-Cklick sollte eine Nachricht aufpoppen das die besagte Taste gedrückt wurde !?

Danke für jede Hilfe

Hier mein Beispiel:

Code: Alles auswählen

EnableExplicit  ; damit wird vom Compiler erst geprüft ob eine Variable vereinbart ist

Procedure main()
  #RandLinks = 5
  #RandOben  = 5
  #Fensterbreite = 300 + #RandLinks * 2 ; die maximale Fensterbreite
  #Fensterhoehe = 200
  Define Mausangeschlossen = InitMouse()
  Define Mausnachricht$
  If Mausangeschlossen = 0
    Mausnachricht$ = "keine Maus angeschlossen."
  Else
    Mausnachricht$ = Str(Mausangeschlossen) + " Maus angeschlossen und verfügbar."
  EndIf
  
  ; **** ab hier wird das Windows-Fenster mit den Anzuzeigenden Strings, Bildern, Button, Texten usw. definiert ***************************************************
  Define Fensterhandle = OpenWindow(#PB_Any , 0, 0, #Fensterbreite, #Fensterhoehe, "Maustasten-Test", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_ScreenCentered)  
  If Fensterhandle  ; nur wenn ein Fenster erzeugt werden kann
    Define Beendenhandle  = ButtonGadget( #PB_Any,  10, #Fensterhoehe - 25, 100,  20, "Beenden") ; der Button Beenden
    Define Texthandle     = TextGadget(#PB_Any,  10, 25, 270,  50, Mausnachricht$ + Chr(10) + Chr(13) + Chr(10) + Chr(13) + "drücke linke Maustaste") ; die Textnachricht
    ; ********** Ende der Windows-Fensterdefinition ***************************************************************************************************************
  
    Repeat    ; ****  Die Hauptprogrammschleife ****
      Define Event = WaitWindowEvent(50)
      
      Define mausstatus = ExamineMouse()
      If mausstatus
        Define Ergebnis = MessageRequester("Maus und so", "der Status = " + Str(mausstatus), #PB_MessageRequester_YesNo | #PB_MessageRequester_Info)
        If Ergebnis = #PB_MessageRequester_No
          End ; hier wird das Programm beendet, sonst braucht es den Tasktmanager
        EndIf
        
        If MouseButton(#PB_MouseButton_Left)
          Define Ergebnis = MessageRequester("Maus und so", "linke Maustaste gedrückt...", #PB_MessageRequester_YesNo | #PB_MessageRequester_Info)
          If Ergebnis = #PB_MessageRequester_No
            End ; hier wird das Programm beendet, sonst braucht es den Tasktmanager
          EndIf
        EndIf
      EndIf
      
      If Event = #PB_Event_CloseWindow ; die Schliessbox im Fenster rechts oben abfragen
        Break  ; das ganze Programm beenden
      EndIf
      
      Select EventGadget()  ; bezieht sich auf ButtonGadget() 
        Case Beendenhandle  ; ButtonGadget(..., ... "Beenden") 
          Break             ; Prozedur beenden und damit auch das Programm
          ;case Ende
      EndSelect
    ForEver   ; ****  Die Hauptprogrammschleife ****
  EndIf ; keine Fenster dann Programm Ende
  
EndProcedure

main()
Benutzeravatar
mk-soft
Beiträge: 3700
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: kein Mouse-Event Maustaste

Beitrag von mk-soft »

PB Hilfe:
Verwenden Sie die Befehle dieser Bibliothek nicht in einer regulären Applikation, realisieren Sie in diesem Fall die Mausabfrage mittels WindowMouseX(), WindowMouseY() und EventType().
Ist für Games gedacht (engine3D) und nicht für reguläre Anwendungen.

P.S.
Maus Drücken und loslassen kommen nicht immer am Hauptfenster an, sondern werden von System am Gadget (Control) intern verarbeitet und als Ereignis (EventType) and das Gadget versendet.
Welche EventType von den verschiedenen Gadget unterstützt wird, siehe PB Hilfe der einzelnen Gadgets.
Zuletzt geändert von mk-soft am 01.05.2022 16:05, insgesamt 2-mal geändert.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
mk-soft
Beiträge: 3700
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: kein Mouse-Event Maustaste

Beitrag von mk-soft »

Hier mal eine Vorlage für eine Application ...

Auch wie man das Event Management in der richtigen Reihenfolge abfragt.

Code: Alles auswählen

;-TOP

Enumeration Windows
  #Main
EndEnumeration

Enumeration MenuBar
  #MainMenu
EndEnumeration

Enumeration MenuItems
  
EndEnumeration

Enumeration Gadgets
  #MainEdit
  #MainButtonOk
  #MainButtonCancel
EndEnumeration

Enumeration StatusBar
  #MainStatusBar
EndEnumeration

Procedure UpdateWindow()
  Protected dx, dy
  dx = WindowWidth(#Main)
  dy = WindowHeight(#Main) - StatusBarHeight(#MainStatusBar)
  ; Resize gadgets
  ResizeGadget(#MainEdit, 5, 5, dx -10, dy - 45)
  ResizeGadget(#MainButtonok, 10, dy - 35, 120, 30)
  ResizeGadget(#MainButtonCancel, dx - 130, dy - 35, 120, 30)
EndProcedure

Procedure Main()
  Protected dx, dy
  
  #MainStyle = #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_MaximizeGadget | #PB_Window_MinimizeGadget
  
  If OpenWindow(#Main, #PB_Ignore, #PB_Ignore, 800, 600, "Window" , #MainStyle)
    ; Menu
    CreateMenu(#MainMenu, WindowID(#Main))
    
    ; StatusBar
    CreateStatusBar(#MainStatusBar, WindowID(#Main))
    AddStatusBarField(#PB_Ignore)
    
    ; Gadgets
    dx = WindowWidth(#Main)
    dy = WindowHeight(#Main) - StatusBarHeight(#MainStatusBar)
    EditorGadget(#MainEdit, 5, 5, dx -10, dy - 45)
    ButtonGadget(#MainButtonok, 10, dy - 35, 120, 30, "Ok")
    ButtonGadget(#MainButtonCancel, dx - 130, dy - 35, 120, 30, "Abbruch")
    
    ; Bind Events
    BindEvent(#PB_Event_SizeWindow, @UpdateWindow(), #Main)
    
    Repeat
      Select WaitWindowEvent()
        Case #PB_Event_CloseWindow
          Break
          
        Case #PB_Event_Menu
          Select EventMenu()
            CompilerIf #PB_Compiler_OS = #PB_OS_MacOS   
              Case #PB_Menu_About
                
              Case #PB_Menu_Preferences
                
              Case #PB_Menu_Quit
                PostEvent(#PB_Event_CloseWindow, #Main, #Null)
                
            CompilerEndIf
              
          EndSelect
          
        Case #PB_Event_Gadget
          Select EventGadget()
            Case #MainEdit
              Select EventType()
                Case #PB_EventType_Change
                  ;
              EndSelect
              
            Case #MainButtonOk
              MessageRequester("Info", "Button Ok gedrückt")
              
            Case #MainButtonCancel
              MessageRequester("Info", "Button Abbruch gedrückt")
            
          EndSelect
          
      EndSelect
    ForEver
    
  EndIf
  
EndProcedure : Main()
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Antworten