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