Les gadgets

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
nash
Messages : 42
Inscription : ven. 07/nov./2008 18:02

Re: Les gadgets

Message par nash »

Code : Tout sélectionner

Enumeration
#nomduprogramme
#buttongadget
EndEnumeration

Declare a()
Declare b()

Repeat
event=WaitWindowEvent()
Select event
  Case #PB_Event_Gadget;appel des evenements gadget
    Select EventGadget()
      Case #buttongadget;(exemple buttongadget)
      a();appel de procedure a()aprés selection de #buttongadget
;ect....
     EndSelect
  Case #PB_Event_Menu;
    If EventMenu()=0;0=idmenu (ou 1...) appel des evenements menues
      b()
    EndIf
;ect...
EndSelect
Until event=#PB_Event_CloseWindow

;main()appel de la première instruction
;creation des gadgets
;fenetre a ouvrir

Procedure a()
;....
AddKeyboardShortcut(#nomduprogramme,#PB_Shortcut_Return,idmenu);dans ce cas idmenu=0
;tant que la touche return n'est pas selectionner pas d'appel de la procedure b()
EndProcedure

Procedure b()
;procedure appeler aprés appui de la touche return
;.....
;......
RemoveKeyboardShortcut(#nomduprogramme,#PB_Shortcut_Return)
;sinon aprés chaque appui sur la touche return rappel de la procedure b()
;(aprés cette instruction remove...) neutralise la touche return
;plus d'appel de la procedure b()
;en rajoutant dans le bloc repeat (case #pb_event_menu) if event..(un idmenu
;different de 0 (1 par exemple pour ne pas rappeller la procedure b())
;appel d'une procedure differente c() par exemple cela avant le endif
EndProcedure
j'ai utilisé dans cet exemple la touche return
mais l'emploi d'une autre touche est tout aussi valable
j'utilise window(pas assez de connaissance sous linux désolé)
si cet exemple ne sert pas a SPH (linux?) peut-etre a d'autres
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Les gadgets

Message par falsam »

C'est un peu énervant que tu n'utilises aucune énumération pour tes fenêtres et tes gadgets. Mais ce n'est pas grave si tu arrives à te relire :)

Voici un exemple qui t'explique comment fermer une fenêtre avec la touche de raccourci Esc.

Pour commencer j’énumère ma fenêtre ainsi que la touche de raccourci Esc

Code : Tout sélectionner

Enumeration
  #Window1
  #Kbd_Esc
EndEnumeration
J'ouvre une fenêtre

Code : Tout sélectionner

OpenWindow(#Window1, 0, 0, 500, 400, "Fermeture avec la touche Esc")
et on attache la touche Escape à cette fenetre

Code : Tout sélectionner

AddKeyboardShortcut(#Window1, #PB_Shortcut_Escape, #Kbd_Esc)
Dans la boucle évènementielle nous allons tester notre raccourci Escape.

Un raccourci clavier génère un évènement du type Menu car ils sont souvent associés aux élèments des menus (CTRL+O, CTRL+C etc...)

Code : Tout sélectionner

Repeat
  Select WaitWindowEvent()
     
    Case #PB_Event_Menu
        Select EventMenu()
          Case #Kbd_Esc
            End
                        
        EndSelect

      Case #PB_Event_CloseWindow
        End                
      
  EndSelect
ForEver
le code complet

Code : Tout sélectionner

Enumeration
  #Window1
  #Kbd_Esc
EndEnumeration

OpenWindow(#Window1, 0, 0, 500, 400, "Fermeture avec la touche Esc")
AddKeyboardShortcut(#Window1, #PB_Shortcut_Escape, #Kbd_Esc)


Repeat
  Select WaitWindowEvent()
     
    Case #PB_Event_Menu
        Select EventMenu()
          Case #Kbd_Esc
            End
                        
        EndSelect

      Case #PB_Event_CloseWindow
        End                
      
  EndSelect
ForEver
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Les gadgets

Message par falsam »

Dans ce 2eme exemple commenté, on ouvre 2 fenêtres et on cherche à fermer uniquement la 2eme fenêtre avec la touche de raccourci Escape.

Code : Tout sélectionner

Enumeration
  #Window1 ;1er fenêtre
  #Window2 ;2eme fenêtre
  #Kbd_Esc ;Touche de racourci Escape
EndEnumeration

;Ouverture des deux fenetres
OpenWindow(#Window1, 0, 0, 500, 400, "Window1")
OpenWindow(#Window2, 0, 0, 300, 200, "Window2")

;On attache la touche de racourci Esc à la 2eme fenetre
AddKeyboardShortcut(#Window2, #PB_Shortcut_Escape, #Kbd_Esc)

Repeat
  Select WaitWindowEvent()
    ;Rappel de la documentation : Un raccourci clavier génère un évènement du type Menu 
    Case #PB_Event_Menu
        Select EventMenu()
          Case #Kbd_Esc
            ;On ferme Window2
            CloseWindow(#Window2)
                        
        EndSelect

      Case #PB_Event_CloseWindow
        ;l'utilisateur vient de cliquer sur l'icone system de fermeture de la fenetre
        ;Quel est la fenetre à l'origine de l'action de fermeture
        Select EventWindow() 
          Case #Window1
            ;Toutes les fenetres seront fermées 
            End 
            
          Case #window2
            ;On ferme uniquement window2
            CloseWindow(#Window2)
        EndSelect
           
  EndSelect
ForEver
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
SPH
Messages : 4937
Inscription : mer. 09/nov./2005 9:53

Re: Les gadgets

Message par SPH »

J'ai essayé d'adapter le zoom sur ce code mais je n'y suis pas arrivé. Y arriverez vous ? (il y a les boutons + et - et j'ai mis des raccourcis clavier sur + et - mais je n'ai pas reussi a faire le zoom) :

Code : Tout sélectionner

UseJPEGImageDecoder()

OpenWindow(0, 0, 0, 500,400, "PanelGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) 
    PanelGadget     (0, 8, 8, 484, 384)
    AddGadgetItem (0, -1, "L")
      ExplorerListGadget(8, 10, 108, 460, 244, "*.jpg")
      SetGadgetAttribute(8, #PB_Explorer_List,2)
    AddGadgetItem (0, -1,"C")
       PanelGadget (1, 10, 10, 460, 340)
         AddGadgetItem(1, -1, "C")
         AddGadgetItem(1, -1, "D")
       CloseGadgetList()
    AddGadgetItem (0, -1, "C")
    CloseGadgetList()
    
    Repeat
      
  Select WaitWindowEvent()
      
    Case #PB_Event_Menu
      Select EventMenu()
        Case 1000
          CloseWindow(1)
        Case 1001
                      Zoom=Zoom+0.05

        Case 1002
                      Zoom=Zoom-0.05

      EndSelect
      
  Case #PB_Event_Gadget
   
   Select EventGadget()
     
    Case 8 ; Play
          If EventType() = 2
            file$=GetGadgetText(8)+GetGadgetItemText(8, GetGadgetState(8))
            Gosub lire
          EndIf
          
      EndSelect  
   
  Case #PB_Event_CloseWindow
   
    Select EventWindow()
     Case 0
      Break
     Case 1 
       CloseWindow(1)

    EndSelect  
   
  EndSelect

ForEver

End 





lire:
If ReadFile(1, file$) 
      length = Lof(1)                            ; Lit la taille en octets du fichier 
      *MemoryID = AllocateMemory(length)         ; alloue un bloc mémoire de la taille du fichier
      If *MemoryID
        ReadData(1, *MemoryID, length)   ; Lit les données du fichier et les place dans le bloc mémoire
      EndIf
      CloseFile(1)
    Resultat = CatchImage(1, *MemoryID, length)
If resultat=0
  Debug("Erreur")
  End
EndIf

  OpenWindow(1, 0, 0, ImageWidth(1), ImageHeight(1), "MutanteKey");, #PB_Window_BorderLess)
   ButtonGadget(101,10,10,20,20,"+")
   ButtonGadget(102,30,10,20,20,"-")
   ImageGadget(#PB_Any, 0,0,300,200,ImageID(1))
  AddKeyboardShortcut(1,#PB_Shortcut_Escape,1000)
  AddKeyboardShortcut(1,#PB_Shortcut_Add,1001)
  AddKeyboardShortcut(1,#PB_Shortcut_Subtract,1002)
EndIf


Return

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
nash
Messages : 42
Inscription : ven. 07/nov./2008 18:02

Re: Les gadgets

Message par nash »

falsam
je me relis trés bien
pour cela j'applique une methodologie
pas trés conventionnelle c'est vrai
mais qui pour ma part (elle vaut ce qu"elle vaut)
permet de me reperer assez facilement(dés que l'on a
pas mal de procedures et gadgets)
_celle ci consiste a rapprocher le nom de mes procedures
avec les gadgets les unissant)le variables egalement
dans la mesure du possible
c'est un gain de temps appreciable
les gadget ont a cet effet une enumeration tant que possibles explicative
des lors on saisi plus facilement(j'espére)
la portée des procedures
c'est pour ma part la partie la plus importante d'un developpement
le reste( pas tous le temps, mais souvent du decorum!)

je te presente par la meme, mes felicitations pour ton sqlite vision
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Les gadgets

Message par falsam »

@Nash : Désolé, mes remarques s'adressaient à SPH.

@SPH : J'ai repris ton code en ajoutant un peu d’énumération et en incluant les touches de raccourcis, +, - et Esc.

Code : Tout sélectionner

Enumeration
  #Window1
  #Window2
  
  #Panel1
  #Panel2
  #Explorer
  
  #ViewImage
  #ImageTmp
  #Image

  
  #Kbd_Add ;Touche de racourci +
  #Kbd_Subtract; Touche de racourci -
  #Kbd_Esc ;Touche de racourci Escape
EndEnumeration

Zoom.f=1 ;Facteur de zoom


UseJPEGImageDecoder()

OpenWindow(#Window1, 0, 0, 500,400, "PanelGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) 

PanelGadget(#Panel1, 8, 8, 484, 384)
AddGadgetItem (#Panel1, -1, "L")
ExplorerListGadget(#Explorer, 10, 108, 460, 244, "*.jpg")
SetGadgetAttribute(#Explorer, #PB_Explorer_List,2)    
AddGadgetItem (#Panel1, -1,"C")
    
PanelGadget (#Panel2, 10, 10, 460, 340)
AddGadgetItem(#Panel2, -1, "C")
AddGadgetItem(#Panel2, -1, "D")
CloseGadgetList()
    
AddGadgetItem (#Panel1, -1, "C")
CloseGadgetList()
    
    
Repeat
  Select WaitWindowEvent()  
    Case #PB_Event_Menu 
      CopyImage(#ImageTmp, #Image)   
      
      Select EventMenu()    
        Case #Kbd_Add
          Zoom=Zoom+0.05
              
        Case #Kbd_Subtract
          Zoom=Zoom-0.05
                
      EndSelect
        
      SetWindowTitle(#Window1, "PanelGadget - "+Str(zoom*100)+" %")
      
      ;Mise à jour de l'image dans son gadget
      If Zoom>0.1
        Debug "passe"
        ResizeImage(#Image, ImageWidth(#Image)*Zoom, ImageHeight(#Image)*Zoom)
        SetGadgetState(#ViewImage, ImageID(#Image))
        ResizeWindow(#Window2, #PB_Ignore, #PB_Ignore, ImageWidth(#Image), ImageHeight(#Image))
      Else
        Zoom=0.1
      EndIf

     
    Case #PB_Event_Gadget
      Select EventGadget()
          
        Case #Explorer ; Play
          If EventType() = 2
            file$=GetGadgetText(#Explorer)+GetGadgetItemText(#Explorer, GetGadgetState(#Explorer))
            Gosub lire
          EndIf
          
      EndSelect  
     
    Case #PB_Event_CloseWindow
   
    Select EventWindow()
      Case #Window1
        End
        
      Case #Window2
        CloseWindow(#Window2)

    EndSelect   
  EndSelect
ForEver

lire:
If ReadFile(1, file$) 
  length = Lof(1)                            ; Lit la taille en octets du fichier 
  *MemoryID = AllocateMemory(length)         ; alloue un bloc mémoire de la taille du fichier
  If *MemoryID
    ReadData(1, *MemoryID, length)   ; Lit les données du fichier et les place dans le bloc mémoire
    CloseFile(1)
     
    Resultat = CatchImage(#ImageTmp, *MemoryID, length)
    If resultat=0
      Debug("Erreur")
      End
    Else
      CopyImage(#ImageTmp, #Image)
    EndIf
  EndIf

  
  OpenWindow(#Window2, 0, 0, ImageWidth(#Image), ImageHeight(#Image), "MutanteKey");, #PB_Window_BorderLess)
  ImageGadget(#ViewImage, 0,0,300,200,ImageID(#Image)) 
  ;On attache les touches de racourci à la fenetre de visualisation d'une image (#Window2)
  AddKeyboardShortcut(#Window2, #PB_Shortcut_Add, #Kbd_Add)
  AddKeyboardShortcut(#Window2, #PB_Shortcut_Subtract, #Kbd_Subtract)
  AddKeyboardShortcut(#Window2, #PB_Shortcut_Escape, #Kbd_Esc)
  
  ;Zoom à 100%
  Zoom=1
EndIf
Return

Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
boddhi
Messages : 604
Inscription : lun. 26/avr./2010 16:14
Localisation : S 48° 52' 31'' / O 123° 23' 33''

Re: Les gadgets

Message par boddhi »

falsam a écrit :

Code : Tout sélectionner

Enumeration
  #Window1 ;1er fenêtre
  #Window2 ;2eme fenêtre
  #Kbd_Esc ;Touche de racourci Escape
EndEnumeration
Petite précision, les énumérations des fenêtres, gadgets et menus (les raccourcis-claviers sont considérés comme des menus) peuvent être indépendantes les unes des autres...
Exemple :

Code : Tout sélectionner

Enumeration
  Fenetre1
  Fenetre2
  Fenetre3
EndEnumeration

Enumeration
  Gadget1
  Gadget2
  Gadget3
EndEnumeration

Enumeration
  Menu1
  Menu2
  Menu3
  Raccourci1
  Raccourci2
  Raccourci3
EndEnumeration
Avatar de l’utilisateur
SPH
Messages : 4937
Inscription : mer. 09/nov./2005 9:53

Re: Les gadgets

Message par SPH »

Merci falsam et boddhi. Le code s'etoffe et j'en perd de plus en plus le controle car je le trouve technique. Si seulement je savais a quoi servent les enumerations.
Petite precision a falsam : la touche ESC ne fonctionne pas.
J'aimerais savoir si tu peux implementer les touche PAGE UP et PAGE DOWN pour passer a la photo precedente et la suivante ?
Merci beaucoup en tout cas :arrow: :idea:

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
boddhi
Messages : 604
Inscription : lun. 26/avr./2010 16:14
Localisation : S 48° 52' 31'' / O 123° 23' 33''

Re: Les gadgets

Message par boddhi »

Je ne saurai que trop te conseiller de t'orienter vers la doc officielle.

Les énumérations servent à définir des constantes de manière incrémentielle d'1 en 1 (sauf si une valeur de départ ou intermédiaire est indiquée).
Elles sont pratiques pour notamment déclarer les constantes des fenêtres, gadgets, menus, images ou toute autre série et éviter les doublons de valeur.
boddhi
Messages : 604
Inscription : lun. 26/avr./2010 16:14
Localisation : S 48° 52' 31'' / O 123° 23' 33''

Re: Les gadgets

Message par boddhi »

SPH a écrit :J'aimerais savoir si tu peux implementer les touche PAGE UP et PAGE DOWN pour passer a la photo precedente et la suivante ?
En modifiant un peu ton code et celui de falsam, je te propose ceci :

Code : Tout sélectionner

UseJPEGImageDecoder()

Enumeration
  #Window1
  #Window2
EndEnumeration
Enumeration
  #Panel1
  #Panel2
  #Explorer
  
  #ViewImage
  #ImageTmp
  #Image
EndEnumeration
Enumeration
  #Kbd_Add ;Touche de racourci +
  #Kbd_Subtract; Touche de racourci -
  #Kbd_Esc ;Touche de racourci Escape
  #Kbd_PgUp
  #Kbd_PgDown
EndEnumeration

Global Zoom.f=1 ;Facteur de zoom
Global PosFichier ; Fichier dans l'ExplorerListGadget

Declare Pc_ChargerImage()
Declare Pc_AfficherImage()
Declare Pc_ZoomImage(Pas.f)
Declare Pc_ChangerImage(Pas.b)


OpenWindow(#Window1, 0, 0, 500,400, "PanelGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)

PanelGadget(#Panel1, 8, 8, 484, 384)
  AddGadgetItem (#Panel1, -1, "L")
  ExplorerListGadget(#Explorer, 10, 108, 460, 244, "*.jpg")
  SetGadgetAttribute(#Explorer, #PB_Explorer_List,2)   
  AddGadgetItem (#Panel1, -1,"C")
  
  PanelGadget (#Panel2, 10, 10, 460, 340)
    AddGadgetItem(#Panel2, -1, "C")
    AddGadgetItem(#Panel2, -1, "D")
  CloseGadgetList()
  
  AddGadgetItem (#Panel1, -1, "C")
CloseGadgetList()
   
   
Repeat
  Select WaitWindowEvent() 
    Case #PB_Event_Menu
      Select EventMenu()   
        Case #Kbd_Add
          Pc_ZoomImage(0.05)
        Case #Kbd_Subtract
          Pc_ZoomImage(-0.05)
        Case #Kbd_PgUp
          Pc_ChangerImage(-1)
        Case #Kbd_PgDown
          Pc_ChangerImage(1)
      EndSelect
      
    Case #PB_Event_Gadget
      Select EventGadget()
        Case #Explorer ; Play
          If EventType() = #PB_EventType_LeftDoubleClick
            PosFichier=GetGadgetState(#Explorer)
            Pc_ChargerImage()
          EndIf
      EndSelect 
      
    Case #PB_Event_CloseWindow
      Select EventWindow()
        Case #Window1
          End
        Case #Window2
          CloseWindow(#Window2)
      EndSelect   
  EndSelect
ForEver

Procedure Pc_ChangerImage(Pas.b)
  If GetGadgetItemState(#Explorer,PosFichier+Pas)&1=#PB_Explorer_File
    PosFichier+Pas
    Pc_ChargerImage()
  EndIf
EndProcedure

Procedure Pc_ChargerImage()
  file$=GetGadgetText(#Explorer)+GetGadgetItemText(#Explorer,PosFichier)
  If FileSize(file$)>0
    If ReadFile(1, file$)
      length = Lof(1)                            ; Lit la taille en octets du fichier
      *MemoryID = AllocateMemory(length)         ; alloue un bloc mémoire de la taille du fichier
      If *MemoryID
        ReadData(1, *MemoryID, length)   ; Lit les données du fichier et les place dans le bloc mémoire
        CloseFile(1)
        
        Resultat = CatchImage(#ImageTmp, *MemoryID, length)
        If Resultat<>0
          CopyImage(#ImageTmp, #Image)
          ;Zoom à 100%
          Zoom=1
          Pc_AfficherImage()
          ProcedureReturn #True
        EndIf
      EndIf
    EndIf
  EndIf
  ProcedureReturn #False
EndProcedure

Procedure Pc_ZoomImage(Pas.f)
  CopyImage(#ImageTmp, #Image)   
  Zoom+Pas
  SetWindowTitle(#Window2, "MutanteKey - Zoom "+Str(Zoom*100)+" %")
  ;Mise à jour de l'image dans son gadget
  If Zoom>0.1
    ResizeImage(#Image, ImageWidth(#Image)*Zoom, ImageHeight(#Image)*Zoom)
    SetGadgetState(#ViewImage, ImageID(#Image))
    ResizeWindow(#Window2, #PB_Ignore, #PB_Ignore, ImageWidth(#Image), ImageHeight(#Image))
  Else
    Zoom=0.1
  EndIf
EndProcedure

Procedure Pc_AfficherImage()
  If IsWindow(#Window2)=0
    OpenWindow(#Window2, 0, 0, ImageWidth(#Image), ImageHeight(#Image), "MutanteKey");, #PB_Window_BorderLess)
    ;On attache les touches de racourci à la fenetre de visualisation d'une image (#Window2)
    AddKeyboardShortcut(#Window2, #PB_Shortcut_Add, #Kbd_Add)
    AddKeyboardShortcut(#Window2, #PB_Shortcut_Subtract, #Kbd_Subtract)
    AddKeyboardShortcut(#Window2, #PB_Shortcut_Escape, #Kbd_Esc)
    AddKeyboardShortcut(#Window2, #PB_Shortcut_Prior, #Kbd_PgUp)
    AddKeyboardShortcut(#Window2, #PB_Shortcut_Next, #Kbd_PgDown)
  Else
    ResizeWindow(#Window2,0,0,ImageWidth(#Image), ImageHeight(#Image))
  EndIf
  SetWindowTitle(#Window2, "MutanteKey - Zoom 100%")
  ImageGadget(#ViewImage, 0,0,300,200,ImageID(#Image))
EndProcedure
Remarque : La gestion des évènements et les interactions avec un ExplorerListGadget sont très très limitées. Si tu souhaites "complexifier" tes actions, il faudra songer à utiliser plutôt un ListIconGadget...
Dernière modification par boddhi le mar. 28/juin/2011 22:53, modifié 1 fois.
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Les gadgets

Message par falsam »

SPH a écrit :Petite precision a falsam : la touche ESC ne fonctionne pas.
Normal je n'ai pas fait attention au code que je t'ai fourni. Il manque le test de la touche Esc.

Code : Tout sélectionner

Case #Kbd_Esc
   ;On ferme Window2
   CloseWindow(#Window2)

@boddhi : Petite erreur de déclaration de procédures
Remplaces Declare Pc_ChangementImage(Pas.b) par Declare Pc_ChangerImage(Pas.b)

A part ça tu as répondu à la dernière demande de SPH :)
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
boddhi
Messages : 604
Inscription : lun. 26/avr./2010 16:14
Localisation : S 48° 52' 31'' / O 123° 23' 33''

Re: Les gadgets

Message par boddhi »

falsam a écrit :@boddhi : Petite erreur de déclaration de procédures
Remplaces Declare Pc_ChangementImage(Pas.b) par Declare Pc_ChangerImage(Pas.b)
:) Ouups, j'ai voulu homogénéiser à la dernière seconde la syntaxe de mes procédures, et j'ai oublié celle-ci... A chaque fois, je me fais avoir :oops: :)
Merci de me l'avoir signalé... :wink: je corrige le code...
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Les gadgets

Message par falsam »

SPH a écrit :Le code s'etoffe et j'en perd de plus en plus le controle car je le trouve technique. Si seulement je savais a quoi servent les énumérations.
Le but n'était pas d'obtenir que le code t’échappe !!!!

Les énumérations sont très pratiques pour déclarer rapidement une série de constantes sans s'occuper de leur valeur numérique. La première constante de l'énumération prendra la valeur 0, la constante suivante prendra la valeur 1 etc.

Exemple

Code : Tout sélectionner

Enumeration
  #FenetrePrincipale ; Fenêtre principale 
  #Compteur ;Compteur
  #Bouton_Go ;Bouton qui lancera l'incrémentation du compteur
  #Bouton_Ferme ;Fermeture de la fenetre
EndEnumeration

;Ouverture de la fenetre principale
OpenWindow(#FenetrePrincipale, 0, 0, 500, 400, "Contact",#PB_Window_SystemMenu)

;Affichage du compteur 
TextGadget(#PB_Any, 10, 10, 120, 20, "Compteur") ; Ici on se fiche de la valeur donné au gadget
StringGadget(#Compteur, 150, 10, 100, 23, "0", #PB_String_ReadOnly)  

;Affichage du bouton qui lance le compteur
ButtonGadget(#Bouton_Go, 270, 10, 80, 24, "Go")

;Affichege du bouton qui ferme la fenetre 
ButtonGadget(#Bouton_Ferme, 270, 35, 80, 24, "Ferme")


;Boucle evenementielle
Repeat
  Select WaitWindowEvent()
      
    ;Un evenement est intervenu sur un gadget
    ;Mais on ne sait pas encore quel est le gadget 
    ;qui a déclenché cet événement
    Case #PB_Event_Gadget
 
      ;Quel est le gadget qui a déclenché l'évenement
      Select EventGadget()  
        Case #Bouton_Go
          ;On éxecute la boucle
          For i=1 To 1000
            SetGadgetText(#Compteur, Str(i))
          Next i

        
        Case #Bouton_Ferme         
          ;fin du programme
          End
          
      EndSelect
        
      
    ;Evenement fermeture de la fenetre  
    Case #PB_Event_CloseWindow
      ;Fin du programme   
      End                
      
  EndSelect
ForEver
Cette énumération de constantes est plus parlante que des nombres. Dans cet exemple c'est vrai qu'on aurait pu s'en passer mais dans le cadre d'applications plus complexes, il est préférable de passer par cette énumeration.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
SPH
Messages : 4937
Inscription : mer. 09/nov./2005 9:53

Re: Les gadgets

Message par SPH »

Boddhi et falsam, vous etes nouveaux mais vous assurez. Merci pour tout. :idea:

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Répondre