Page 1 sur 1

Gestion souris avec OpenWindow et OpenWindowedScreen (HELP)

Publié : ven. 16/avr./2021 17:03
par jak64
Bonjour,
Depuis 1 an que j'utilise Purebasic, je n'ai toujours pas compris comment gérer la souris lorsqu'on a un écran "OpenWindowedScreen" inclus dans une fenêtre "OpenWindow". Dans le petit programme que je mets ci-dessous, je n'arrive pas à cliquer sur le X qui est en haut à droite afin de fermer le programme ou sur _ pour minimiser la fenêtre.
Je souhaite redéfinir le curseur souris avec un sprite qui sera utilisé dans la fenêtre "OpenWindowedScreen" mais je souhaite pouvoir cliquer sur le X de la fenêtre "OpenWindow" pour fermer le jeu ou sur _ pour minimiser la fenêtre.

Merci de votre aide précieuse.

Cordialement,
Jacques Joly

Code : Tout sélectionner

;========== Gestion de la souris avec fenêtre "OpenWindow" et fenêtre "OpenWindowedScreen"
;= QUESTION :
;= Comment gérer la souris pour pouvoir cliquer sur le X de la fenêtre Windows afin de fermer la fenêtre ???????????

EnableExplicit
Global event.i
Global x_pave.w, y_pave.w
Global police.w

;=---------- Initialisation des environnements nécessaires
If InitSprite()=0 : MessageRequester("Erreur", "InitSprite() non initialisé !"):End:EndIf
If InitMouse()=0 : MessageRequester("Erreur", "InitMouse() non initialisé !"):End:EndIf

;=---------- Création de la fenêtre Windows
OpenWindow(0, 0, 0, 800,600, "Gestion souris avec fenêtre (OpenWindow) et fenêtre (OpenWindowedScreen) avec sprites", #PB_Window_ScreenCentered | #PB_Window_SystemMenu |  #PB_Window_MinimizeGadget)

;=---------- Création de la fenêtre de jeu
OpenWindowedScreen(WindowID(0),0,0,800,600,1,0,0)

;=---------- Création du sprite cercle
CreateSprite(0,50,50,#PB_Sprite_PixelCollision)
StartDrawing(SpriteOutput(0))
Circle(25, 25, 24, #Yellow)
StopDrawing()

;=---------- Création du sprite pavé
CreateSprite(1,15,15,#PB_Sprite_PixelCollision)
StartDrawing(SpriteOutput(1))
Box(0, 0, 15,15, #White)
StopDrawing()

;=---------- Chargement de la police
police=LoadFont(0, "Calibri", 24)

;=---------- Boucle
  Repeat    
    Repeat
      event = WindowEvent()
      Select event 
        Case #PB_Event_CloseWindow
          End 
      EndSelect
    Until event = 0
    
    ClearScreen(#Blue)
    ExamineMouse()
    x_pave=MouseX()
    y_pave=MouseY()
    DisplayTransparentSprite(0,100,100)
    DisplayTransparentSprite(1,x_pave,y_pave)
    ;=---------- Vérifier si collision entre le curseur (pavé) et le cercle
    If SpriteCollision(0,100,100,1,x_pave,y_pave)
      StartDrawing(ScreenOutput()) 
      DrawingMode(#PB_2DDrawing_Transparent)
      DrawingFont(police)
      DrawText(100,300,"Collision",#Black)
      StopDrawing()
    EndIf
    FlipBuffers()
  ForEver

Re: Gestion souris avec OpenWindow et OpenWindowedScreen (HELP)

Publié : ven. 16/avr./2021 19:30
par venom
Salut,

Je ne sais pas si c'est ça que tu souhaites, mais falsam avait fait ce type de code







@++

Re: Gestion souris avec OpenWindow et OpenWindowedScreen (HELP)

Publié : ven. 16/avr./2021 20:05
par jak64
Bonjour venom,
C'est exactement ce que je cherchais... OUF....

Merci beaucoup à toi et à Falsam.

Re: Gestion souris avec OpenWindow et OpenWindowedScreen (HELP)

Publié : sam. 17/avr./2021 8:16
par Mesa
Dans l'aide, il y a un exemple tout prêt dans la fonction ReleaseMouse(), je le mets en dessous.

Code : Tout sélectionner

; Quelques variables
  MargeG = 20 
  MargeH = 20 
  LargeurEcran = 440 
  HauteurEcran = 440 

  ; Initialisation du monde 2D
  InitSprite()
  InitMouse() 
  
  ; Ouverture de la fenêtre et de l'écran
  OpenWindow(0,0,0,650,480,"Capture/Libération de la souris",#PB_Window_ScreenCentered|#PB_Window_SystemMenu) 
  ButtonGadget(1,500,440,120,24,"Cliquez !") 
  OpenWindowedScreen(WindowID(0),20,20,LargeurEcran,HauteurEcran,0,0,0) 

  ; Gestion de la fenêtre et de l'écran
  Repeat
    
    Repeat ; Gestion de la fenêtre
      Event  = WindowEvent()  
      Select Event 
        Case #PB_Event_Gadget 
          If EventGadget() = 1     ; Si Clic sur le Bouton "Cliquez !"
            MessageRequester("Attention","Bouton cliqué !") 
          EndIf 
        Case #PB_Event_CloseWindow ; Si fermeture de la fenêtre
          End
      EndSelect
      
      ; Affichage de la position de la souris dans la fenêtre
      SetWindowTitle(0, "Capture/Libération de la souris X= " + Str(mx) + " Y= "+ Str(my))
    Until Event =  0 
    
    ; Gestion de la capture de la souris dans l'écran noir
      If inScreen = #True       ; Si la souris est dans l'écran noir...
        If MouseX() > LargeurEcran-2 Or MouseY() > HauteurEcran-2 Or MouseX() < 1 Or MouseY() <1 
              ReleaseMouse(#True)   ; ...et si elle s'approche des bords de l'écran alors on libère la souris
              inScreen = #False 
          EndIf  
      Else                      
        mx = WindowMouseX(0)      ; Sinon, si la souris entre dans l'écran noir...
        my = WindowMouseY(0)
        If mx < LargeurEcran + MargeG And mx > MargeG And my > MargeH And my < MargeH + HauteurEcran                         
          ReleaseMouse(#False)    ; ... alors on capture la souris 
            MouseLocate(mx-MargeG,my-MargeH) 
            inScreen = #True 
        EndIf 
    EndIf 
    
    ; Affichage de l'écran noir
    ClearScreen(0) 
    StartDrawing(ScreenOutput()) 
        DrawText(150,200,"Souris relachée") 
        DrawText(180,230,"X= ")
        DrawText(180,260,"Y= ")
    StopDrawing()  
    If inScreen  ; Si la souris est dans l'écran noir... 
        ExamineMouse() 
        StartDrawing(ScreenOutput())
        FrontColor(RGB(255,255,0))
        DrawText(150,200,"Souris capturée" ) 
        DrawText(180,230,"X= "+ Str(MouseX())) 
        DrawText(180,260,"Y= "+ Str(MouseY()))
        DrawText(MouseX(), MouseY(), "["+Chr(164)+"]")
        StopDrawing() 
    EndIf 
    FlipBuffers() 
 ForEver


M.