Page 1 sur 1

Gadgets

Publié : mer. 20/avr./2011 14:02
par gilles robert
Bonjour,

J'ai des problèmes avec mes gadgets.

Voici un petit programme qui ne marche pas et je ne sais pas pourquoi.

Code : Tout sélectionner

; PureBasic Visual Designer v3.95 build 1485 (PB4Code)


;- Window Constants
;
Enumeration
  #Window_0
EndEnumeration

;- Gadget Constants
;
Enumeration
  #Text_1
  #Text_2
  #Text_3
  #Text_4
  #Button_0
EndEnumeration

t=10
Dim longueur$(t) : Dim largeur$(t) : Dim hauteur$(t)


  If OpenWindow(#Window_0, 216, 0, 371, 195, "Test1",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
      TextGadget(#Text_1, 100, 10, 110, 20, "TEST1", #PB_Text_Center)
      TextGadget(#Text_2, 10, 50, 70, 20, "Longueur")
      TextGadget(#Text_3, 10, 80, 70, 20, "Largeur")
      TextGadget(#Text_4, 10, 110, 70, 20, "Hauteur")
      StringGadget(1, 100, 50, 90, 20, "")
      StringGadget(2, 100, 80, 90, 20, "")
      StringGadget(3, 100, 110, 90, 20, "")
      ButtonGadget(#Button_0, 120, 150, 50, 20, "Garder")
    Repeat
    EventID = WaitWindowEvent()
    If EventID = #PB_Event_Gadget
      Select EventGadget()
        Case #Button_0
          CloseWindow(#Window_0)
          Gosub recuperer : Gosub montrer
      EndSelect
    EndIf
    Until WaitWindowEvent()=#PB_Event_CloseWindow
  EndIf
  End
  
  recuperer:
  j=1
  For i=1 To 3
    Select i
      Case 1 :longueur$(j)=GetGadgetText(i)
      Case 2 :largeur$(j)=GetGadgetText(i)
      Case 3 :hauteur$(j)=GetGadgetText(i)
    EndSelect
  Next i
  Return
  
  montrer:
  Debug "Longueur: "+longueur$(j)
  Debug "Largeur: "+largeur$(j)
  Debug "Hauteur: "+hauteur$(j)
  Return
  
Les Textgadgets ne sont pas affichés.
Les getgadgetstext ne récupèrent pas les infos je reçois l'erreur Le #Gadget spécifié n'est pas initialisé.
quelle est mon erreur :?:

Gilles

Re: Gadgets

Publié : mer. 20/avr./2011 14:09
par Cls
Salut,
à la vue de ton code, tes identifiants de StringGadget écrasent ceux de tes TextGadget. Il suffit de remplacer 1, 2, 3 par #String_1, #String_2, #String_3 et de les rajouter à ton énumération.

Re: Gadgets

Publié : mer. 20/avr./2011 14:50
par gilles robert
Merci, cela resoud le probleme des textgadgets mais la récupération ne s'effectue toujours pas.
Comment se fait il qu'il faille appuyer plusieurs fois sur garder pour qu'il agisse?

Gilles

Code : Tout sélectionner

; PureBasic Visual Designer v3.95 build 1485 (PB4Code)


;- Window Constants
;
Enumeration
  #Window_0
EndEnumeration

;- Gadget Constants
;
Enumeration
  #Text_1
  #Text_2
  #Text_3
  #Text_4
  #String_1
  #String_2
  #String_3
  #Button_0
EndEnumeration

t=10
Dim longueur$(t) : Dim largeur$(t) : Dim hauteur$(t)


  If OpenWindow(#Window_0, 216, 0, 371, 195, "Test1",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
      TextGadget(#Text_1, 100, 10, 110, 20, "TEST1", #PB_Text_Center)
      TextGadget(#Text_2, 10, 50, 70, 20, "Longueur")
      TextGadget(#Text_3, 10, 80, 70, 20, "Largeur")
      TextGadget(#Text_4, 10, 110, 70, 20, "Hauteur")
      StringGadget(#String_1, 100, 50, 90, 20, "")
      StringGadget(#String_2, 100, 80, 90, 20, "")
      StringGadget(#String_3, 100, 110, 90, 20, "")
      ButtonGadget(#Button_0, 120, 150, 50, 20, "Garder")
    Repeat
    EventID = WaitWindowEvent()
    If EventID = #PB_Event_Gadget
      Select EventGadget()
        Case #Button_0
          CloseWindow(#Window_0)
          Gosub recuperer : Gosub montrer
      EndSelect
    EndIf
    Until WaitWindowEvent()=#PB_Event_CloseWindow
  EndIf
  End
  
  recuperer:
  j=1
  For i=1 To 3
    Select i
      Case #String_1 :longueur$(j)=GetGadgetText(i)
      Case #String_2 :largeur$(j)=GetGadgetText(i)
      Case #String_3 :hauteur$(j)=GetGadgetText(i)
    EndSelect
  Next i
  Return
  
  montrer:
  Debug "Longueur: "+longueur$(j)
  Debug "Largeur: "+largeur$(j)
  Debug "Hauteur: "+hauteur$(j)
  Return
  

Re: Gadgets

Publié : mer. 20/avr./2011 14:59
par Mindphazer
Tu fais ta fermeture de fenêtre avant de récupérer le contenu de tes gadgets.
Fais le contraire
Et ferme ta fenêtre lorsque tu quittes le programme.

Et puis au lieu d'utiliser des "gosub etiquette:", essaie plutôt de faire des procédures.
C'est plus... moderne.....

Re: Gadgets

Publié : mer. 20/avr./2011 16:02
par Geo Trouvpatou
Salut.

Regarde les modifs et essaie de comprendre.
Le mieux est de mettre EnableExplicit en début de code pour s'éviter bien des problèmes.

Code : Tout sélectionner

; PureBasic Visual Designer v3.95 build 1485 (PB4Code)

EnableExplicit  ;<--- A METTRE

;- Window Constants
;
Enumeration
  #Window_0
EndEnumeration

;- Gadget Constants
;
Enumeration
  #Text_1
  #Text_2
  #Text_3
  #Text_4
  #String_1
  #String_2
  #String_3
  #Button_0
EndEnumeration

Global t.i = 10, EventID.i, i.i, j.i


Dim longueur$(t) : Dim largeur$(t) : Dim hauteur$(t)


  If OpenWindow(#Window_0, 216, 0, 371, 195, "Test1",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
      TextGadget(#Text_1, 100, 10, 110, 20, "TEST1", #PB_Text_Center)
      TextGadget(#Text_2, 10, 50, 70, 20, "Longueur")
      TextGadget(#Text_3, 10, 80, 70, 20, "Largeur")
      TextGadget(#Text_4, 10, 110, 70, 20, "Hauteur")
      StringGadget(#String_1, 100, 50, 90, 20, "")
      StringGadget(#String_2, 100, 80, 90, 20, "")
      StringGadget(#String_3, 100, 110, 90, 20, "")
      ButtonGadget(#Button_0, 120, 150, 50, 20, "Garder")
    Repeat
    EventID = WaitWindowEvent()
    If EventID = #PB_Event_Gadget
      Select EventGadget()
        Case #Button_0
              ;CloseWindow(#Window_0) <------ A VIRER
              
          Gosub recuperer : Gosub montrer
      EndSelect
    EndIf
    Until WaitWindowEvent()=#PB_Event_CloseWindow
  EndIf
  End
 
  recuperer:
  j=1
  For i=1 To 20 ; <-- pour que ça fonctionne faut au moin atteindre 6 pour la valeur de #String_3
    Select i
      Case #String_1 :longueur$(j)=GetGadgetText(i) ; <--#String_1 = 4
      Case #String_2 :largeur$(j)=GetGadgetText(i) ; <-- #String_2 = 5
      Case #String_3 :hauteur$(j)=GetGadgetText(i) ; <-- #String_3 = 6
    EndSelect
  Next i
  Return
 
  montrer:
  Debug "Longueur: "+longueur$(j)
  Debug "Largeur: "+largeur$(j)
  Debug "Hauteur: "+hauteur$(j)
  Return
Comme déjà dit les procédures c'est tellement plus moderne et pour ce que cela coûte.

Code : Tout sélectionner

; PureBasic Visual Designer v3.95 build 1485 (PB4Code)

EnableExplicit  ;<--- A METTRE

;- Window Constants
;
Enumeration
      #Window_0
EndEnumeration

;- Gadget Constants
;
Enumeration
      #Text_1
      #Text_2
      #Text_3
      #Text_4
      #String_1
      #String_2
      #String_3
      #Button_0
EndEnumeration

Global t.i = 10, EventID.i, i.i, j.i
Declare recuperer()
Declare montrer()

Global Dim longueur$(t)  
Global Dim largeur$(t)  
Global Dim hauteur$(t)


If OpenWindow(#Window_0, 216, 0, 371, 195, "Test1",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
      TextGadget(#Text_1, 100, 10, 110, 20, "TEST1", #PB_Text_Center)
      TextGadget(#Text_2, 10, 50, 70, 20, "Longueur")
      TextGadget(#Text_3, 10, 80, 70, 20, "Largeur")
      TextGadget(#Text_4, 10, 110, 70, 20, "Hauteur")
      StringGadget(#String_1, 100, 50, 90, 20, "")
      StringGadget(#String_2, 100, 80, 90, 20, "")
      StringGadget(#String_3, 100, 110, 90, 20, "")
      ButtonGadget(#Button_0, 120, 150, 50, 20, "Garder")
      Repeat
            EventID = WaitWindowEvent()

            If EventID = #PB_Event_Gadget
                  Select EventGadget()
                        Case #Button_0
                              ;CloseWindow(#Window_0) <------ A VIRER
                              
                              ;Gosub recuperer : Gosub montrer
                              recuperer()
                              montrer()
                  EndSelect
            EndIf
      Until EventID = #PB_Event_CloseWindow

EndIf
End

Procedure recuperer()
      j=1
      For i=1 To 20 ; <-- pour que ça fonctionne faut au moin atteindre 6 pour la valeur de #String_3
            Select i
                  Case #String_1 :longueur$(j)=GetGadgetText(i) ; <--#String_1 = 4
                  Case #String_2 :largeur$(j)=GetGadgetText(i) ; <-- #String_2 = 5
                  Case #String_3 :hauteur$(j)=GetGadgetText(i) ; <-- #String_3 = 6
            EndSelect
      Next i
EndProcedure

Procedure montrer()
      Debug "Longueur: "+longueur$(j)
      Debug "Largeur: "+largeur$(j)
      Debug "Hauteur: "+hauteur$(j)
EndProcedure
Tu aurais aussi pu combiner les 2 procédures en 1 seule

Code : Tout sélectionner

Procedure recuperer()
      j=1
      For i=1 To 20 ; <-- pour que ça fonctionne faut au moin atteindre 6 pour la valeur de #String_3
            Select i
                  Case #String_1 :longueur$(j)=GetGadgetText(i) ; <--#String_1 = 4
                        Debug "Longueur: "+longueur$(j)
                  Case #String_2 :largeur$(j)=GetGadgetText(i) ; <-- #String_2 = 5
                        Debug "Largeur: "+largeur$(j)
                  Case #String_3 :hauteur$(j)=GetGadgetText(i) ; <-- #String_3 = 6
                        Debug "Hauteur: "+hauteur$(j)
            EndSelect
      Next i
EndProcedure

Re: Gadgets

Publié : mer. 20/avr./2011 16:15
par Ar-S
Grillé par Geo...

Bon je poste mon code tout de même.
Je n'ai pas mis les DIM volontairement pour ne pas t'embrouiller. Ce qui compte c'est l'agencement.

Code : Tout sélectionner

quite=1
If OpenWindow(0, 216, 0, 371, 195, "Test1",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar ) 
	TextGadget(1, 10, 110, 20, 20, "TEST1", #PB_Text_Center) 
	TextGadget(2, 10, 50, 70, 20, "Longueur") 
	TextGadget(3, 10, 80, 70, 20, "Largeur") 
	TextGadget(4, 10, 110, 70, 20, "Hauteur") 
	StringGadget(5, 100, 50, 90, 20, "") 
	StringGadget(6, 100, 80, 90, 20, "") 
	StringGadget(7, 100, 110, 90, 20, "") 
	ButtonGadget(8, 120, 150, 50, 20, "Garder") 
  
  
	Repeat 
    Select WaitWindowEvent()
        
      Case #PB_Event_Gadget
        Select EventGadget()
            
          Case 8 
            longueur$=GetGadgetText(5) 
            largeur$=GetGadgetText(6) 
            hauteur$=GetGadgetText(7)
            
            Debug longueur$
            Debug largeur$
            Debug hauteur$
            
        EndSelect 
        
      Case #PB_Event_CloseWindow ; si clic sur la croix
        Select EventWindow() ; De quelle fenêtre ?
          Case 0 ; de la 0
            quite=0
        EndSelect
        
    EndSelect 
  Until quite=0
  CloseWindow(0) ; alors ferme 0
  End ; bing !
Else
  End
EndIf 

Re: Gadgets

Publié : jeu. 21/avr./2011 7:39
par gilles robert
Merci, c'est mieux comme ça.

Gilles