Page 1 sur 1

plein écran et barre de tâches...

Publié : lun. 17/mai/2021 20:05
par jak64
Bonjour,
Dans le petit bout de code qui suit, le programme lance en plein écran sans la barre de titre de Windows, c'est voulu. Si on approche la souris du haut de l'écran, la barre de titre apparaît (ce qui permet par exemple de fermer le programme ou de le minimiser) et si on déplace la souris vers la bas, la barre de titre disparaît : c'est ce que je veux afin de pouvoir bénéficier de tout l'écran pour mes programmes de jeu.

Le problème que je rencontre, c'est que la barre de tâches, en bas, apparaît lorsque la souris redéfinie est affichée (petit carré blanc entouré de rouge), c'est à dire quand je rentre dans l'écran de jeu, et je ne voudrais pas que la barre de tâche s'affiche.

Merci de votre aide.

Code : Tout sélectionner

;================================================================================================================================
;= Programme squelette gérant la souris avec une fenêtre OpenWindow() et une fenêtre OpenWindowedScreen()
;================================================================================================================================
EnableExplicit
;---------- Constantes
  #couleur_fond_ecran=$FACE87
  #largeur_ecran=1366
  #hauteur_ecran=768
  #options_ecran=#PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_ScreenCentered

;---------- Enumérations
  Enumeration
    #fenetre_windows
    #souris
  EndEnumeration
  
;---------- Variables
  Global event.i
  Global souris_dans_ecran_de_jeu.b
  Global mx.w
  Global my.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(#fenetre_windows, 0, -26, #largeur_ecran,#hauteur_ecran, "Programme squelette - Jacques Joly (2021)",#options_ecran)
  
  ;=---------- Création de la fenêtre de jeu
  OpenWindowedScreen(WindowID(#fenetre_windows),0,0,#largeur_ecran,#hauteur_ecran,1,0,0) ; le 1=redimensionnement automatique
  CreateSprite(#souris,18,18)
  StartDrawing(SpriteOutput(#souris))
  Box(0,0,18,18,#Red)
  Box(2,2,14,14,#White)
  StopDrawing()
  
Procedure gerer_souris()
  ;=---------- Routine de gestion de la souris qui est soit dans l'écran de jeu, soit sur la fenêtre Windows
  If souris_dans_ecran_de_jeu    ; Si la souris est dans l'écran de jeu
    If MouseX() > #largeur_ecran-2 Or MouseY() > #hauteur_ecran-2  Or MouseX() < 1 Or MouseY() <1 ; ...et si elle s'approche des bords de l'écran
      ReleaseMouse(#True)                                                                         ; ....alors on libère la souris pour la rendre à la fenêtre Windows
      souris_dans_ecran_de_jeu = #False ; ... et on indique que q'elle n'est plus dans l'écran de jeu
      If MouseY() <1
        ResizeWindow(#fenetre_windows,#PB_Ignore,0,#PB_Ignore,#PB_Ignore)
      EndIf 
    EndIf  
  Else ; Sinon, c'est qu'elle est dans l'écran Windows                    
    mx = WindowMouseX(#fenetre_windows)  ; ... on récupère les coordonnées de la souris    
    my = WindowMouseY(#fenetre_windows)
    If mx < #largeur_ecran And mx > 0 And my > 0 And my < #hauteur_ecran ; ... et si elle entre dans l'écran de jeu                     
      ReleaseMouse(#False)                                               ; ... alors on capture la souris dans l'écran de jeu
      MouseLocate(mx,my)                                                 ; ... on la positionne
      souris_dans_ecran_de_jeu = #True                                   ;... et on indique que la souris est dans l'écran de jeu
      If my > 0
        ResizeWindow(#fenetre_windows,#PB_Ignore,-26,#PB_Ignore,#PB_Ignore)
        EndIf 
    EndIf 
  EndIf
  ;=---------- Fin de la routine de gestion de la souris (voir aussi test dans procedure "afficher_la_souris")     
EndProcedure

Procedure afficher_souris()
  If souris_dans_ecran_de_jeu ; Ajouté car sans ce test, la souris redéfinie par un sprite s'affiche en plus de la souris "Windows"
                              ; quand on arrive au bord de l'écran
    DisplayTransparentSprite(#souris, MouseX(),MouseY())
  EndIf
EndProcedure

  Repeat    
    Repeat
      event = WindowEvent()
      Select event 
        Case #PB_Event_CloseWindow
          End 
      EndSelect
    Until event = 0
    ClearScreen(#couleur_fond_ecran)
    ExamineMouse()
    gerer_souris()
    afficher_souris()
    FlipBuffers()
  Until event=#PB_Event_CloseWindow

Re: plein écran et barre de tâches...

Publié : mar. 18/mai/2021 8:32
par vurvur
Le flag Borderless:

Code : Tout sélectionner

;================================================================================================================================
;= Programme squelette gérant la souris avec une fenêtre OpenWindow() et une fenêtre OpenWindowedScreen()
;================================================================================================================================
EnableExplicit
;---------- Constantes
  #couleur_fond_ecran=$FACE87
  #largeur_ecran=1366
  #hauteur_ecran=768
  #options_ecran=#PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_ScreenCentered | #PB_Window_BorderLess

;---------- Enumérations
  Enumeration
    #fenetre_windows
    #souris
  EndEnumeration
  
;---------- Variables
  Global event.i
  Global souris_dans_ecran_de_jeu.b
  Global mx.w
  Global my.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(#fenetre_windows, 0, -26, #largeur_ecran,#hauteur_ecran, "Programme squelette - Jacques Joly (2021)",#options_ecran)
  
  ;=---------- Création de la fenêtre de jeu
  OpenWindowedScreen(WindowID(#fenetre_windows),0,0,#largeur_ecran,#hauteur_ecran,1,0,0) ; le 1=redimensionnement automatique
  CreateSprite(#souris,18,18)
  StartDrawing(SpriteOutput(#souris))
  Box(0,0,18,18,#Red)
  Box(2,2,14,14,#White)
  StopDrawing()
  
Procedure gerer_souris()
  ;=---------- Routine de gestion de la souris qui est soit dans l'écran de jeu, soit sur la fenêtre Windows
  If souris_dans_ecran_de_jeu    ; Si la souris est dans l'écran de jeu
    If MouseX() > #largeur_ecran-2 Or MouseY() > #hauteur_ecran-2  Or MouseX() < 1 Or MouseY() <1 ; ...et si elle s'approche des bords de l'écran
      ReleaseMouse(#True)                                                                         ; ....alors on libère la souris pour la rendre à la fenêtre Windows
      souris_dans_ecran_de_jeu = #False ; ... et on indique que q'elle n'est plus dans l'écran de jeu
      If MouseY() <1
        ResizeWindow(#fenetre_windows,#PB_Ignore,0,#PB_Ignore,#PB_Ignore)
      EndIf 
    EndIf  
  Else ; Sinon, c'est qu'elle est dans l'écran Windows                    
    mx = WindowMouseX(#fenetre_windows)  ; ... on récupère les coordonnées de la souris    
    my = WindowMouseY(#fenetre_windows)
    If mx < #largeur_ecran And mx > 0 And my > 0 And my < #hauteur_ecran ; ... et si elle entre dans l'écran de jeu                     
      ReleaseMouse(#False)                                               ; ... alors on capture la souris dans l'écran de jeu
      MouseLocate(mx,my)                                                 ; ... on la positionne
      souris_dans_ecran_de_jeu = #True                                   ;... et on indique que la souris est dans l'écran de jeu
      If my > 0
        ResizeWindow(#fenetre_windows,#PB_Ignore,-26,#PB_Ignore,#PB_Ignore)
        EndIf 
    EndIf 
  EndIf
  ;=---------- Fin de la routine de gestion de la souris (voir aussi test dans procedure "afficher_la_souris")     
EndProcedure

Procedure afficher_souris()
  If souris_dans_ecran_de_jeu ; Ajouté car sans ce test, la souris redéfinie par un sprite s'affiche en plus de la souris "Windows"
                              ; quand on arrive au bord de l'écran
    DisplayTransparentSprite(#souris, MouseX(),MouseY())
  EndIf
EndProcedure

  Repeat    
    Repeat
      event = WindowEvent()
      Select event 
        Case #PB_Event_CloseWindow
          End 
      EndSelect
    Until event = 0
    ClearScreen(#couleur_fond_ecran)
    ExamineMouse()
    gerer_souris()
    afficher_souris()
    FlipBuffers()
  Until event=#PB_Event_CloseWindow

Re: plein écran et barre de tâches...

Publié : mar. 18/mai/2021 10:26
par jak64
Bonjour vurvur,
Merci de ta réponse, c'est nickel, par contre, je ne comprends pas pourquoi en mettant "#PB_Window_BorderLess" on voit la barre de titre quand on monte la souris (ce que je veux). je n'ai pas essayé cette option car j'imaginais qu'en employant "#PB_Window_BorderLess", la barre de titre n'apparaitrait pas lorsqu'on approche la souris du haut de l'écran.
Encore merci.
"
"

Re: plein écran et barre de tâches...

Publié : mar. 18/mai/2021 14:40
par Micoute
Si tu ne souhaite pas voir s'afficher la barre de titre, supprime les options #PB_Window_MinimizeGadget et #PB_Window_MaximizeGadget et pour fermer la fenêtre presse les touche Alt et F4.

Re: plein écran et barre de tâches...

Publié : mar. 18/mai/2021 14:51
par venom
J'ai pas suivi, mais si dans les options de ta fenêtre tu met juste #PB_Window_BorderLess tu aura une fenêtre sans aucune bordure. :| et tu l'ouvre en full screen + échap pour killer et hop







@++

Re: plein écran et barre de tâches...

Publié : mar. 18/mai/2021 16:25
par Micoute
Oui, c'est une solution que j'utilise fréquemment.

Re: plein écran et barre de tâches...

Publié : mar. 18/mai/2021 16:30
par jak64
Bonjour,
Merci à tous pour vos réponses, mais je souhaite tout de même pouvoir au minimum mettre #PB_Window_MinimizeGadget afin de pouvoir mettre la fenêtre dans la barre de tâches si je veux pouvoir accéder à une autre application, par exemple.

Re: plein écran et barre de tâches...

Publié : mar. 18/mai/2021 17:51
par venom
Ba un ButtonGadget qui minimize la fenêtre et hop :D

genre ça :

Code : Tout sélectionner

  If OpenWindow(0, 0, 0, 220, 100, "Exemple...", #PB_Window_BorderLess | #PB_Window_Maximize)

   ButtonGadget  (1, 0, 0, 20, 20, "_")
   ButtonGadget  (2, 20, 0, 20, 20, "X")
   
   Repeat
     Event = WaitWindowEvent()
     
     Select Event
     
       Case #PB_Event_Gadget
         Select EventGadget()
           Case 1 
            SetWindowState(0, #PB_Window_Minimize); <----- si appuie sur button 1 minimize la fenetre 
           Case 2 
            CloseWindow(0); <----- si appuie sur button 2 ferme la fenetre 
             End 
         EndSelect
            
     EndSelect
   Until Event = #PB_Event_CloseWindow
 EndIf





@++

Re: plein écran et barre de tâches...

Publié : mar. 18/mai/2021 18:32
par jak64
Bonjour venon,
Ca ne me va pas car j'ai un écran de jeu et je veux que rien n'apparaisse (ni barre de titre ni autre quand le jeu se déroule), c'est pour ça que dans l'exemple que j'ai mis au début, la barre de titre n'apparaît que lorsqu'on monte la souris en haut de l'écran.
En résumé :
Quand on joue avec le jeu, tout l'écran est consacré au jeu, pas de barre de titre, pas de bouton ou autre pour minimiser ou fermer, rien...
Par contre, si on souhaite minimiser la fenêtre, on monte la souris vers le haut de l'écran et la barre de titre apparaît alors. Je ne souhaite pas, de plus, utiliser les raccourcis pour fermer la fenêtre (sur mon vieil ordi, pour faire ALT + F4, il me faut appuyer 3 touches en même temps (ALT + FN + F4)

Re: plein écran et barre de tâches...

Publié : mar. 18/mai/2021 19:04
par venom
Ah ok ok.
jak64 a écrit : mar. 18/mai/2021 18:32Je ne souhaite pas, de plus, utiliser les raccourcis pour fermer la fenêtre (sur mon vieil ordi, pour faire ALT + F4, il me faut appuyer 3 touches en même temps (ALT + FN + F4)
Perso je ne trouve pas plus pratique le fait d'afficher la barre en testant si le curseur arrive en haut de la fenêtre. (En terme de codage)
Ça n'est que mon avis. :wink:

Pour le coup, rien ne t'empêche d'utiliser genre juste la touche F4 (par exemple) pour réduire la fenêtre.







@++

Re: plein écran et barre de tâches...

Publié : mar. 18/mai/2021 19:49
par jak64
Si tu regardes le code que j'ai fait (avec la modification que m'a proposée vurvur) cela ne prend que 2 lignes de code et ça fonctionnera même si j'utilise plusieurs procédures d'affichage (exemple, un affichage règles du jeu, un affichage saisie du nom du joueur, un affichage début de partie, un affichage partie, etc...) puisque cette gestion de la barre de titre est dans la routine "gerer_souris" qui est utilisée dans tous mes affichages.
J'ai déjà vu cette façon de faire (barre de titre apparaissant quand on monte la souris en haut de l'écran), entre autres dans le jeu de Klondike "Klondike Planet"

Re: plein écran et barre de tâches...

Publié : mar. 18/mai/2021 19:58
par venom
Il est vrai que je n'ai pas essayé le code. Le principal, c'est que tu es trouver solution :D






@++