Standby to See clone d' Inkey()

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
kernadec
Messages : 1594
Inscription : ven. 25/avr./2008 11:14

Standby to See clone d' Inkey()

Message par kernadec »

Bsr à tous
j'avais envie d''avoir une commande Pause key ilimitée genre : a$ = inkey()
pour le CanvasGadget() et l' OpenGLGadget. Mais cette commande fait défaut.
en mode sans API... Donc voici une solution avec un code test.
Ensuite je l'ai implanté dans le code mis à jour dans le topic "Texte sur du OpenGL" de SPH.
Ici : : https://www.purebasic.fr/french/viewtop ... 5&start=20

Cordialement

Code : Tout sélectionner

;##########################################################################
;###############   Kernadec : Standby to See : 14/12/2020   ###############
;##########################################################################

EnableExplicit

#Windows = 0


;{;-- ; Variables Globales
;--bloc intialisation de Standby to See
Define Event.l, EventMenu.l

Global Quit.l, KeyPause.l, KeySortie.l
Global Fond.l = RGB(240,240, 240)  ; Gris
                                   ;};--

;{;-- ; Déclaration des Procédures
;--  Déclaration des procédures 
Declare Pause_Key(KeyPause)               ; procedure utiles que pour ce test a supprimer
Declare Affiche(KeyPause)                 ; procedure utiles que pour ce test a supprimer
Declare Retour(KeySortie)
Declare Standby_to_See()
;};--

Procedure Affiche(KeyPause)                    
  StartDrawing(WindowOutput(#Windows))
  DrawText(220, 100, " Pause = " + Str(KeyPause) , #Red, fond)  ;  exemple test
  
  ;--{;-- Ici Affichage mis en Attendre??
  ;--};   afficher un titre bloc dwans la fenetre procedure
  
  StopDrawing()
EndProcedure 

Procedure Retour(KeySortie)                         
  If KeyPause = KeySortie                           ; Test OK si c'est la meme Touche
    StartDrawing(WindowOutput(#Windows))
    DrawText(220, 100, "                            " , #White, fond)
    
    ;--{;-- Ici Sortie de la mise en Attendre?? 
    ;--};  afficher un titre bloc dans la fenetre procedure
    
    StopDrawing()
    Quit = #True
  EndIf
EndProcedure 

Procedure Pause_Key(KeyPause)
  Protected Event, eventmenu
  Affiche(KeyPause)                            ; Pause er mise attente de la meme Touche
  
  Repeat
    Event = WaitWindowEvent()
    Select Event
      Case #PB_Event_Menu
        EventMenu = EventMenu()
        Select EventMenu 
          Case 27                               ; Touche Escape
            End
          Case 32                               ; Touche Espace  
            KeySortie = 32                      ; stock valeur touche pour comparaison à venir
            Retour(KeySortie)
            Debug "Quitter = Espace"
            If KeyPause = KeySortie              ; Test OK si c' est la meme Touche
              Quit = #True
            EndIf
          Case 119                               ; Touche w 
            KeySortie = 119                      ; stock valeur touche pour comparaison à venir
            Retour(KeySortie)          
            Debug "Quitter = w" 
            If KeyPause = KeySortie              ; Test OK si c' est la meme Touche
              Quit = #True
            EndIf
        EndSelect
      Default
    EndSelect
    
    Debug "" + KeyPause + " = " + KeySortie
    
  Until Quit Or Event = #PB_Event_CloseWindow
  ; quit = #False                                  ; pour test decommenter  sinon ajouer ";"
EndProcedure

Procedure Standby_to_See()
  Protected Event, eventmenu
  
  Quit = #False   
  
  ;{;-- ; debut Partie à mettre en commentaires
  ;--   pour utilisation dans un programme
  If OpenWindow(#Windows, 300, 300, 500, 200, "Standby_to_See",  #PB_Window_SystemMenu)
    ; SetActiveWindow(#Windows)
    StickyWindow(#Windows, #True ) 
    
    
    StartDrawing(WindowOutput(#Windows))
    DrawText(30, 20, "      Appuyez une fois sur Espace ou w = Mise en attente", #Blue, fond )          ;  exemple test
    DrawText(30, 36, "une seconde fois sur la même touche pour Sortir, ESC = Quit", #Blue, fond )       ;  exemple test
    StopDrawing()
   ;};--   fin de la partie commentaire
    
    ; debut du programme en mode implémenation
    
    AddKeyboardShortcut(#Windows, #PB_Shortcut_Escape, 27)  ;  27 = Valeur Touche Escape
    AddKeyboardShortcut(#Windows, #PB_Shortcut_Space, 32)   ;  32 = Valeur Touche Espace
    AddKeyboardShortcut(#Windows, #PB_Shortcut_W, 119)      ; 119 = Valeur Touche w
    
    
    Repeat
      Event = WaitWindowEvent()
      Select  Event
        Case #PB_Event_Menu
          EventMenu = EventMenu()
          Select EventMenu     
            Case 27                              ; Touche Escape
             End
            Case 32                              ; Touche Espace
              Debug "Pause = Espace"
              KeyPause = 32                       ; stock valeur touche pour comparaison à venir
              Pause_Key(KeyPause)      
              quit = #False
            Case 119                             ; Touche w
              Debug "Pause = Espace"
              KeyPause = 119                      ; stock valeur touche pour comparaison à venir
              Pause_Key(KeyPause)
              quit = #False
          EndSelect
        Default
      EndSelect
    Until Quit Or Event = #PB_Event_CloseWindow
    
    Debug " PauseTerminée " 
    
  EndIf
EndProcedure

Standby_to_See()                ; Départ Standby_to_See

Debug " Standby_to_See() " 

End