Nouveau

Sujets variés concernant le développement en PureBasic
Raym
Messages : 4
Inscription : lun. 13/mai/2013 23:14

Nouveau

Message par Raym »

Bonjour, bonsoir plutôt. Il y a 25ans je ne connaissais que QBasic, amstrad et un peu d'assembleur sur "AIM65"". j'ai découvert PB, et je reconnais qu'il faut s'y plonger. J'ai écris mon premier petit prog, un peu finalisé. Si quelqu'un peut me donner son opinion, ???

Code : Tout sélectionner

;
;	===================================================================
;	CalcSouitFinal_10_Cst_Enum.pb
;	Liste:  -Constantes/-Variables/-Fonts/-etc
;		Recopier pour un seul fichier
;	===================================================================

;- Window Constants
;
Enumeration
  #Window_0
EndEnumeration

;- MenuBar Constants
;
Enumeration
  #MenuBar_0
EndEnumeration

Enumeration
  #MENU_1
  #MENU_2
  #MENU_3
EndEnumeration

;- Gadget Constants
;
Enumeration
  #String_0
  #String_1
  #String_2
  #String_3
  #String_4
  #String_5
  #String_6
  #String_7
  #String_8
  #String_10
  #String_11
  #String_12
  #String_14
  #String_15
  #String_16
  #String_17
  #String_18
  #String_19
  #String_20
  #String_21
  #String_22
  #String_23
  #String_24
  #String_25
  #String_27
  #String_28
  #String_29
  #String_30
  #String_31
  #String_32
  #String_33
  #String_34
  #String_35
  #String_36
  #String_37
  #String_38
  #String_40
  #String_41
EndEnumeration

Global Nbr25$, Nbr33$, Nbr37$, Nbr50$, Nbr66$,Nbr75$, Nbr100$, Nbr5f$,Nbr20f$, Nbr30f$, Nbr50f$, TotalSout$
Global Nbr25,Nbr33, Nbr37, Nbr50, Nbr66, Nbr75, Nbr100, Nbr5f, Nbr20f, Nbr30f, Nbr50f
Global Tot25, Tot33, Tot37, Tot50, Tot66, Tot75, Tot100, Tot5f, Tot20f, Tot30f,Tot50f, Total

;- Fonts
Global FontID1
FontID1 = LoadFont(1, "Arial", 9, #PB_Font_Bold)
Global FontID3
FontID3 = LoadFont(3, "Courier", 10, #PB_Font_Bold)

;      =======================================================================
;  	CalcSoutFinal_10_Inc.pb
;	Les procedures
;		recopier pour un seul fichier
;	=======================================================================

Procedure Open_Window_0()
	
  If OpenWindow(#Window_0, 224, 59, 487, 451, "Volume d'un embouteillage (bouteilles et fûts)",  #PB_Window_SystemMenu | #PB_Window_TitleBar | #PB_Window_ScreenCentered | #PB_Window_WindowCentered )
    If CreateMenu(#MenuBar_0, WindowID(#Window_0))
      MenuTitle("Infos")
      MenuItem(#MENU_1, "Notes")
      MenuBar()
      MenuItem(#MENU_2, "A propos ...")
      MenuBar()
      MenuItem(#MENU_3, "Quitter")
    EndIf
            

      If CreateGadgetList(WindowID(#Window_0))
          StringGadget(#String_0, 65, 45, 135, 25, "Contidionnement", #PB_String_ReadOnly)
          SetGadgetFont(#String_0, FontID1)
        StringGadget(#String_1, 65, 70, 135, 25, "   Bouteilles de 25 cl.", #PB_String_ReadOnly)
        StringGadget(#String_2, 65, 95, 135, 25, "   Bouteilles de 33 cl.", #PB_String_ReadOnly)
        StringGadget(#String_3, 65, 120, 135, 25, "  Bouteilles de 37,5 cl.", #PB_String_ReadOnly)
        StringGadget(#String_4, 65, 145, 135, 25, "   Bouteilles de 50 cl.", #PB_String_ReadOnly)
        StringGadget(#String_5, 65, 170, 135, 25, "   Bouteilles de 66 cl.", #PB_String_ReadOnly)
        StringGadget(#String_6, 65, 195, 135, 25, "   Bouteilles de 75 cl.", #PB_String_ReadOnly)
        StringGadget(#String_7, 65, 220, 135, 25, "  Bouteilles de 100 cl.", #PB_String_ReadOnly)
        StringGadget(#String_8, 65, 245, 135, 25, "           Fûts de 5 l.", #PB_String_ReadOnly)
        StringGadget(#String_10, 65, 270, 135, 25, "          Fûts de 20 l.", #PB_String_ReadOnly)
        StringGadget(#String_11, 65, 295, 135, 25, "          Fûts de 30 l.", #PB_String_ReadOnly)
        StringGadget(#String_12, 65, 320, 135, 25, "          Fûts de 50 l.", #PB_String_ReadOnly)
        StringGadget(#String_14, 200, 45, 100, 25, " Nbr. d'unit.", #PB_String_ReadOnly)
        SetGadgetFont(#String_14, FontID1)
        StringGadget(#String_15, 200, 70, 100, 25, "", #PB_String_Numeric)	
        StringGadget(#String_16, 200, 95, 100, 25, "", #PB_String_Numeric)
        StringGadget(#String_17, 200, 120, 100, 25, "", #PB_String_Numeric)
        StringGadget(#String_18, 200, 145, 100, 25, "", #PB_String_Numeric)
        StringGadget(#String_19, 200, 170, 100, 25, "", #PB_String_Numeric)
        StringGadget(#String_20, 200, 195, 100, 25, "", #PB_String_Numeric)
        StringGadget(#String_21, 200, 220, 100, 25, "", #PB_String_Numeric)
        StringGadget(#String_22, 200, 245, 100, 25, "", #PB_String_Numeric)
        StringGadget(#String_23, 200, 270, 100, 25, "", #PB_String_Numeric)
        StringGadget(#String_24, 200, 295, 100, 25, "", #PB_String_Numeric)
        StringGadget(#String_25, 200, 320, 100, 25, "", #PB_String_Numeric)
        StringGadget(#String_27, 300, 45, 115, 25, " Vol. en litres", #PB_String_ReadOnly); | #PB_String_Numeric)
        SetGadgetFont(#String_27, FontID1)
        StringGadget(#String_28, 300, 70, 115, 25, "", #PB_String_ReadOnly | #PB_String_Numeric)
        SetGadgetFont(#String_28, FontID3)
        StringGadget(#String_29, 300, 95, 115, 25, "", #PB_String_ReadOnly | #PB_String_Numeric)
        SetGadgetFont(#String_29, FontID3)
        StringGadget(#String_30, 300, 120, 115, 25, "", #PB_String_ReadOnly | #PB_String_Numeric)
        SetGadgetFont(#String_30, FontID3)
        StringGadget(#String_31, 300, 145, 115, 25, "", #PB_String_ReadOnly | #PB_String_Numeric)
        SetGadgetFont(#String_31, FontID3)
        StringGadget(#String_32, 300, 170, 115, 25, "", #PB_String_ReadOnly | #PB_String_Numeric)
        SetGadgetFont(#String_32, FontID3)
        StringGadget(#String_33, 300, 195, 115, 25, "", #PB_String_ReadOnly | #PB_String_Numeric)
        SetGadgetFont(#String_33, FontID3)
        StringGadget(#String_34, 300, 220, 115, 25, "", #PB_String_ReadOnly | #PB_String_Numeric)
        SetGadgetFont(#String_34, FontID3)
        StringGadget(#String_35, 300, 245, 115, 25, "", #PB_String_ReadOnly | #PB_String_Numeric)
        SetGadgetFont(#String_35, FontID3)
        StringGadget(#String_36, 300, 270, 115, 25, "", #PB_String_ReadOnly | #PB_String_Numeric)
        SetGadgetFont(#String_36, FontID3)
        StringGadget(#String_37, 300, 295, 115, 25, "", #PB_String_ReadOnly | #PB_String_Numeric)
        SetGadgetFont(#String_37, FontID3)
        StringGadget(#String_38, 300, 320, 115, 25, "", #PB_String_ReadOnly | #PB_String_Numeric)
        SetGadgetFont(#String_38, FontID3)        	        
         
        StringGadget(#String_40, 65, 360, 235, 25, "     Total du volume en litres", #PB_String_ReadOnly)       
        SetGadgetFont(#String_40, FontID1)
       
        StringGadget(#String_41, 300, 360, 115, 25, "", #PB_String_ReadOnly)
        SetGadgetFont(#String_41, FontID3)
        
      EndIf
    EndIf
EndProcedure

Procedure Total_Soutirre()
	
	
    
	If Nbr25$ = ""
        Nbr25 = 0
	EndIf
    If Nbr33$ = ""
        Nbr33 = 0
	EndIf
    If Nbr37$ = ""
        Nbr37= 0
	EndIf
    If Nbr50$ = ""
        Nbr50 = 0
    EndIf
    If Nbr66$ = ""
        Nbr66 = 0
	EndIf
    If Nbr75$ = ""
        Nbr75 = 0
	EndIf
    If Nbr100$ = ""
        Nbr100= 0
	EndIf
    If Nbr5f$ = ""
        Nbr5f = 0
    EndIf
      If Nbr20f$ = ""
        Nbr20f = 0
	EndIf
    If Nbr30f$ = ""
        Nbr30f= 0
	EndIf
    If Nbr50f$ = ""
        Nbr50f = 0
	EndIf
    
	Total=Tot25 + Tot33 + Tot37 + Tot50 + Tot66 + Tot75 + Tot100 + Tot5f +Tot20f + Tot30f +Tot50f
	TotalSout$ =Str(Total)
	Longueur = Len(TotalSout$)
	NouveauTot$ = Space(8 - Longueur) + TotalSout$
	TotalSout$ = NouveauTot$
	       SetGadgetColor(#String_41, #PB_Gadget_BackColor, $00FFFF)
            SetGadgetColor(#String_41, #PB_Gadget_FrontColor, $000000)
	SetGadgetText(#String_41, TotalSout$)                       
	
EndProcedure

Procedure Bt_25cl()
	
 Nbr25$ = GetGadgetText(#String_15)
			
			Nbr25 = Val(Nbr25$)        
			If Nbr25 >= 132000
				MessageRequester("Information", "Le nombre de bts. de 25 cl. est limité à 132000", #PB_MessageRequester_Ok)
				Nbr25$ = ""
				SetGadgetText(#String_15, Nbr25$)
				Tot25$ =""
				SetGadgetText(#String_28, Tot25$)
				Nbr25 = 0
			EndIf
			
			Tot25= (Val(Nbr25$)) * 0.25
			Tot25$ =Str(Tot25)
			
			Longueur = Len(Tot25$)
			NouveauTot25$ = Space(8 - Longueur) + Tot25$
			Tot25$ = NouveauTot25$
			SetGadgetText(#String_28, Tot25$)
			Total_Soutirre() 
		EndProcedure
		
Procedure Bt_33cl()
			Nbr33$ = GetGadgetText(#String_16)
			
			Nbr33 = Val(Nbr33$)        
			If Nbr33 >= 99000
				MessageRequester("Information", "Le nombre de 33cl. est limité à 99000bts.", #PB_MessageRequester_Ok)
				Nbr33$ = ""
				SetGadgetText(#String_16, Nbr33$)
				Tot33$ =""
				SetGadgetText(#String_29, Tot33$)
				Nbr33 = 0
			EndIf       
			
			Tot33 = (Val(Nbr33$)) * 0.33
			Tot33$ =Str(Tot33)
		
			Tot33$ = Space(8 -Len(Tot33$)) +Tot33$
			
			SetGadgetText(#String_29, Tot33$)    
			Total_Soutirre()
		EndProcedure
		
Procedure Bt_37cl()
		 Nbr37$ = GetGadgetText(#String_17)
			
			Nbr37 = Val(Nbr37$)        
			If Nbr37 >= 88000
				MessageRequester("Information", "Le nombre de 37,5cl. est limité à 88000bts.", #PB_MessageRequester_Ok)
				Nbr37$ = ""
				SetGadgetText(#String_17, Nbr37$)
				Tot37$ =""
				SetGadgetText(#String_30, Tot37$)
				Nbr37 = 0
			EndIf       
			
			Tot37 = (Val(Nbr37$)) * 0.375
			Tot37$ =Str(Tot37)

			Tot37$ = Space(8 -Len(Tot37$)) +Tot37$
			
			SetGadgetText(#String_30, Tot37$)    
			Total_Soutirre()
EndProcedure
		
Procedure Bt_50cl()		
		
	Nbr50$ = GetGadgetText(#String_18)
			
			Nbr50 = Val(Nbr50$)        
			If Nbr50 >= 66000
				MessageRequester("Information", "Le nombre de 50cl. est limité à 66000bts.", #PB_MessageRequester_Ok)
				Nbr50$ = ""
				SetGadgetText(#String_18, Nbr37$)
				Tot50$ =""
				SetGadgetText(#String_31, Tot37$)
				Nbr50 = 0
			EndIf       
			
			Tot50 = (Val(Nbr50$)) * 0.5
			Tot50$ =Str(Tot50)
			
			Tot50$ = Space(8 -Len(Tot50$)) +Tot50$
			
			SetGadgetText(#String_31, Tot50$)    
			Total_Soutirre()
EndProcedure
		
Procedure Bt_66cl()
	
		 Nbr66$ = GetGadgetText(#String_19)
			
			Nbr66 = Val(Nbr66$)        
			If Nbr66 >= 50000
				MessageRequester("Information", "Le nombre de 66cl. est limité à 50000bts.", #PB_MessageRequester_Ok)
				Nbr66$ = ""
				SetGadgetText(#String_19, Nbr66$)
				Tot66$ =""
				SetGadgetText(#String_32, Tot66$)
				Nbr66 = 0
			EndIf       
			
			Tot66 = (Val(Nbr66$)) * 0.66
			Tot66$ =Str(Tot66)
			
			Tot66$ = Space(8 -Len(Tot66$)) +Tot66$
			
			SetGadgetText(#String_32, Tot66$)    
			Total_Soutirre()
		EndProcedure
		
Procedure Bt_75cl()
			Nbr75$ = GetGadgetText(#String_20)
			
			Nbr75 = Val(Nbr75$)        
			If Nbr75 >= 44000
				MessageRequester("Information", "Le nombre de bts. de 75 cl. est limité à 44000", #PB_MessageRequester_Ok)
				Nbr75$ = ""
				SetGadgetText(#String_20, Nbr75$)
				Tot75$ =""
				SetGadgetText(#String_33, Tot75$)
				Nbr75 = 0
			EndIf
			
			Tot75= (Val(Nbr75$)) * 0.75
			Tot75$ =Str(Tot75)
			
			Longueur = Len(Tot75$)
			NouveauTot75$ = Space(8 - Longueur) + Tot75$
			Tot75$ = NouveauTot75$
			SetGadgetText(#String_33, Tot75$)
			Total_Soutirre()
		EndProcedure
		
Procedure Bt_100cl()
			Nbr100$ = GetGadgetText(#String_21)
			
			Nbr100 = Val(Nbr100$)        
			If Nbr100 >= 33000
				MessageRequester("Information", "Le nombre de bts. de 100 cl. est limité à 33000", #PB_MessageRequester_Ok)
				Nbr100$ = ""
				SetGadgetText(#String_21, Nbr100$)
				Tot100$ =""
				SetGadgetText(#String_34, Tot100$)
				Nbr100 = 0
			EndIf
			
			Tot100= (Val(Nbr100$)) * 1
			Tot100$ =Str(Tot100)
			
			Longueur = Len(Tot100$)
			NouveauTot100$ = Space(8 - Longueur) + Tot100$
			Tot100$ = NouveauTot100$
			SetGadgetText(#String_34, Tot100$)
			Total_Soutirre()
		EndProcedure
		
Procedure Fut_5l()
			Nbr5f$ = GetGadgetText(#String_22)
			
			Nbr5f = Val(Nbr5f$)        
			If Nbr5f >= 6600
				MessageRequester("Information", "Le nombre de fûts de 5 ltr. est limité à 6600", #PB_MessageRequester_Ok)
				Nbr5f$ = ""
				SetGadgetText(#String_22, Nbr5f$)
				Tot5f$ =""
				SetGadgetText(#String_35, Tot5f$)
				Nbr5f = 0
			EndIf
			
			Tot5f= (Val(Nbr5f$)) * 5
			Tot5f$ =Str(Tot5f)
			
			Longueur = Len(Tot5f$)
			NouveauTot5f$ = Space(8 - Longueur) + Tot5f$
			Tot5f$ = NouveauTot5f$
			SetGadgetText(#String_35, Tot5f$)
			Total_Soutirre()
EndProcedure
				
Procedure Fut_20l()
	
	Nbr20f$ = GetGadgetText(#String_23)
			
			Nbr20f = Val(Nbr20f$)        
			If Nbr20f >= 1650
				MessageRequester("Information", "Le nombre de fûts de 20 ltr. est limité à 1650", #PB_MessageRequester_Ok)
				Nbr20f$ = ""
				SetGadgetText(#String_23, Nbr20f$)
				Tot20f$ =""
				SetGadgetText(#String_36, Tot20f$)
				Nbr20f = 0
			EndIf
			
			
			Tot20f = (Val(Nbr20f$)) * 20
			Tot20f$ =Str(Tot20f)
			Longueur = Len(Tot20f$)
			NouveauTot20f$ = Space(8 - Longueur) + Tot20f$
			Tot20f$ = NouveauTot20f$
			SetGadgetText(#String_36, Tot20f$)
			Total_Soutirre()
		EndProcedure
		
Procedure Fut_30l()
			 Nbr30f$ = GetGadgetText(#String_24)
			
			Nbr30f = Val(Nbr30f$)        
			If Nbr30f >= 1100
				MessageRequester("Information", "Le nombre de fûts de 30 ltr. est limité à 1100", #PB_MessageRequester_Ok)
				Nbr30f$ = ""
				SetGadgetText(#String_24, Nbr30f$)
				Tot30f$ =""
				SetGadgetText(#String_37, Tot30f$)
				Nbr30f = 0
			EndIf
			
			Tot30f = (Val(Nbr30f$)) * 30
			Tot30f$ =Str(Tot30f)
			Longueur = Len(Tot30f$)
			NouveauTot30f$ = Space(8 - Longueur) + Tot30f$
			Tot30f$ = NouveauTot30f$
			SetGadgetText(#String_37, Tot30f$)
			Total_Soutirre()
EndProcedure
		
Procedure Fut_50l()
			Nbr50f$ = GetGadgetText(#String_25)
			
			Nbr50f = Val(Nbr50f$)        
			If Nbr50f >= 660
				MessageRequester("Information", "Le nombre de fûts de 50 ltr. est limité à 660", #PB_MessageRequester_Ok)
				Nbr50f$ = ""
				SetGadgetText(#String_25, Nbr50f$)
				Tot50f$ =""
				SetGadgetText(#String_38, Tot50f$)
				Nbr50f = 0
			EndIf
			
			Tot50f = (Val(Nbr50f$)) * 50
			Tot50f$ =Str(Tot50f)
			Longueur = Len(Tot50f$)
			NouveauTot50f$ = Space(8 - Longueur) + Tot50f$
			Tot50f$ = NouveauTot50f$
			SetGadgetText(#String_38, Tot50f$)
			Total_Soutirre()
		EndProcedure
		
;========================================================================================		
;===============================Programme principal =====================================
;======================================================================================== 
;IncludeFile "CalcSoutFinal_10_Cst_Enum.pb"	;constantes, enum et compagnie
;IncludeFile "CalcSoutFinal_10_Inc.pb"			;les  procedures
;========================================================================================

Open_Window_0()

Repeat ; boucle principale
  
  Event_De_Win_OS = WaitWindowEvent()     ; Reçu de Window_OS
  WindowID = EventWindow() 					 ; La fenètre concernée
  GadgetID = EventGadget()					 ; Le gadget concerné
  EventType = EventType()						 ; Type d'évènement
  
  ;Code menu
  
  If Event_De_Win_OS = #PB_Event_Menu   
       MenuID = EventMenu()
    
    		If MenuID = #MENU_1
            		MessageRequester("Note !", "La  valeur dans la colonne [Nbr. d'unit.] est limitée à     " + Chr(10) + "  " + Chr(10) + "    132 000  pour les btls. de   25 cl." + Chr(10) + "      99 000  pour les btls. de   33 cl." + Chr(10) + "      88 000  pour les btls. de   37,5 cl." + Chr(10) + "      66 000  pour les btls. de   50 cl." + Chr(10) + "      50 000  pour les btls. de   66 cl. " + Chr(10) + "      44 000  pour les btls. de   75 cl." + Chr(10) + "      33 000  pour les btls. de 100 cl." + Chr(10) + "        6 600  pour les fûts   de      5 ltrs. " + Chr(10) + "        1 650  pour les fûts   de    20 ltrs." + Chr(10) + "        1 100  pour les fûts   de    30 trs." + Chr(10) + "           660  pour les fûts   de    50 ltrs." + Chr(10) + "" + Chr(10) + "Dans la colonne [Vol. en litres], le produit est " + Chr(10) + "arrondi au litre le plus proche." + Chr(10) + "", #MB_OK|#MB_ICONWARNING)
            
      		ElseIf MenuID = #MENU_2
                        MessageRequester("Info !", "    " + Chr(10) + "    Compiler avec PureBasic 5.11   " + Chr(10) + "    " + Chr(10) + "    Site : www.purebasic.com/french/index.php      " + Chr(10) + "" + Chr(10) + "    Auteur R-Skr - Mai 2013", #MB_OK|#MB_ICONINFORMATION|#MB_DEFBUTTON3)
                        
                  ElseIf MenuID = #MENU_3
        			   End     
    		EndIf  
    	EndIf
    	
  ;Code Gadget  	
  
  If Event_De_Win_OS = #PB_Event_Gadget
   
  	If GadgetID = #String_15;------------------------------------------------------------ BTL 25cl
  			Bt_25cl()
			
     		 ElseIf  GadgetID = #String_16;-------------------------------------------------BTL 33cl
        		Bt_33cl()		
      
		ElseIf GadgetID = #String_17;---------------------------------------------------BTL 37,5cl
		  	 Bt_37cl()
      
		ElseIf GadgetID = #String_18;---------------------------------------------------BTL 50cl
		    	Bt_50cl()
      
		ElseIf GadgetID = #String_19;---------------------------------------------------BTL 66cl
		   	Bt_66cl()
		    
    		ElseIf GadgetID = #String_20;---------------------------------------------------BTL 75cl
        		Bt_75cl()
			      
		ElseIf GadgetID = #String_21;---------------------------------------------------BTL 100cl
			Bt_100cl()
			
		ElseIf GadgetID = #String_22;---------------------------------------------------FU 5 L
		     Fut_5l()
      
    		ElseIf GadgetID = #String_23;---------------------------------------------------FU 20 L
        		Fut_20l()		
      
        	ElseIf GadgetID = #String_24;---------------------------------------------------FU 30 L
        		Fut_30l()	   
      
    		ElseIf GadgetID = #String_25;---------------------------------------------------FU 50 L
      		Fut_50l()
      
   		; ElseIf GadgetID = #String_41
      
    EndIf
    
  EndIf
  
Until Event_De_Win_OS = #PB_Event_CloseWindow 		; Fin de la boucle principale

End
; ================================ Fin ========================================
	
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Nouveau

Message par Backup »

je ne sais pas trop ce que ton prg calcul ... j'ai pas testé
(d'ailleurs c'est toujours mieux d'expliquer ce qu'est sensé faire le prg sur le forum ...pour eviter qu'on se pose la question)

mais lorsque je vois que tu fais x procedure ayant cette structure

Code : Tout sélectionner

Procedure Bt_25cl()
   
Nbr25$ = GetGadgetText(#String_15)
         
         Nbr25 = Val(Nbr25$)       
         If Nbr25 >= 132000
            MessageRequester("Information", "Le nombre de bts. de 25 cl. est limité à 132000", #PB_MessageRequester_Ok)
            Nbr25$ = ""
            SetGadgetText(#String_15, Nbr25$)
            Tot25$ =""
            SetGadgetText(#String_28, Tot25$)
            Nbr25 = 0
         EndIf
         
         Tot25= (Val(Nbr25$)) * 0.25
         Tot25$ =Str(Tot25)
         
         Longueur = Len(Tot25$)
         NouveauTot25$ = Space(8 - Longueur) + Tot25$
         Tot25$ = NouveauTot25$
         SetGadgetText(#String_28, Tot25$)
         Total_Soutirre()
      EndProcedure
je me dis , "pourquoi , il a pas utilisée les parametres de procedure pour changer ce qui doit changer
au lieu de repeter x foix la meme procedure avec des variables differentes ? "


par exemple tu fais * 0.25 ben ça pourrait etre un parametre passé a la procedure sous forme de variable
pour eviter d'avoir x procedure qui font le meme calcul avec une valeur differente .....

bon ce soir je vais me coucher , je reprendrai ton prg demain ;)
Avatar de l’utilisateur
MLD
Messages : 1103
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: Nouveau

Message par MLD »

Salut Raym

Bienvenue parmis nous. :lol:

Pour un début en PB c'est pas mal du tout. CreateGadgetList n'est plus obligatoire.Pour le reste c'est comme tu le sens. :lol:
Il est possible de faire mieux, en présentation, et en programmation, mais cela viendra avec le temps.
Si tu as la possibilité d'acheter la licence, fait le, le rapport produit/prix est imbattable. :wink:
Tu auras alors la possibilité d'utiliser l'API windows, donc la possibilité maximum pour la réalisation des programmes.

Regarde sur le forum, les programmes des copains et tu apprendras beaucoup.
Pose toutes les questions que tu souhaite, montre tes codes, il y aura toujours des réponses.

A+

PS : Tu es dans la limonade :?: :oops: :mrgreen:
Avatar de l’utilisateur
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Nouveau

Message par Kwai chang caine »

Bienvenue RAYM
J'aurais aimé débuter mon premier programme comme ça :wink:
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
omega
Messages : 626
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Re: Nouveau

Message par omega »

Bonjour Raym et bienvenue parmi nous

Pour un débutant en Pb, je te félicite bravo, j'ai testé ton programme et je te donne 10/10.
Je n'ai rien à dire à part la répétition des procédures qui font le même travail alors que tu pouvais utiliser une seule procédure qui calcule en fonction de la variable concernée.

J'espère que pb va répondre à tes attentes car il est extra tu verras... (c'est mon avis personnel, il me convient parfaitement)
Win7 (x64) 64 bits Pb 5.72
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Nouveau

Message par Backup »

voila la version avec une seule procedure ...

note qu'on peut améliorer encore le code

au niveau des répétitions de

Code : Tout sélectionner

 If Nbr >= 6600
            MessageRequester("Information", "Le nombre de fûts de 5 ltr. est limité à 6600", #PB_MessageRequester_Ok)
            Nbr$ = ""
            SetGadgetText(#String_22, Nbr$)
            Tot$ =""
            SetGadgetText(#String_35, Tot$)
            Nbr = 0
         EndIf
tu pourra faire une procédure qui tiens compte (select-case) d'un affichage différent suivant le cas ....
au lieu de ces répétitions...
(ce sont des bout de code extrait de tes anciennes procedure )




j'ai tout passé en "Flottants" (nombre a virgule)
car 0.33 cl *2 ça fait 0.66 cl ;)


remarque l'utilisation des "Select-Case" plus lisible que if elseif endif

j'ai fait ça a la "va vite" , mais ça fonctionne

Code : Tout sélectionner

;
;   ===================================================================
;   CalcSouitFinal_10_Cst_Enum.pb
;   Liste:  -Constantes/-Variables/-Fonts/-etc
;      Recopier pour un seul fichier
;   ===================================================================

;- Window Constants
;
Enumeration
	#Window_0
EndEnumeration

;- MenuBar Constants
;
Enumeration
	#MenuBar_0
EndEnumeration

Enumeration
	#MENU_1
	#MENU_2
	#MENU_3
EndEnumeration

;- Gadget Constants
;
Enumeration
	#String_0
	#String_1
	#String_2
	#String_3
	#String_4
	#String_5
	#String_6
	#String_7
	#String_8
	#String_10
	#String_11
	#String_12
	#String_14
	#String_15
	#String_16
	#String_17
	#String_18
	#String_19
	#String_20
	#String_21
	#String_22
	#String_23
	#String_24
	#String_25
	#String_27
	#String_28
	#String_29
	#String_30
	#String_31
	#String_32
	#String_33
	#String_34
	#String_35
	#String_36
	#String_37
	#String_38
	#String_40
	#String_41
EndEnumeration

Declare  Open_Window_0()
Declare  Total_Soutirre()
Declare  Bt(Nbr,type.f)


Global Nbr$, TotalSout$
;Global Nbr


;- Fonts
Global FontID1
FontID1 = LoadFont(1, "Arial", 9, #PB_Font_Bold)
Global FontID3
FontID3 = LoadFont(3, "Courier", 10, #PB_Font_Bold)


;      =======================================================================
;     CalcSoutFinal_10_Inc.pb
;   Les procedures
;      recopier pour un seul fichier
;   =======================================================================




;========================================================================================      
;===============================Programme principal =====================================
;========================================================================================
;IncludeFile "CalcSoutFinal_10_Cst_Enum.pb"   ;constantes, enum et compagnie
;IncludeFile "CalcSoutFinal_10_Inc.pb"         ;les  procedures
;========================================================================================
global Dim toto.f(11)

Open_Window_0()

Repeat ; boucle principale
	
	Event_De_Win_OS = WaitWindowEvent(2)     ; Reçu de Window_OS
	WindowID = EventWindow()                 ; La fenètre concernée
	GadgetID = EventGadget()                ; Le gadget concerné
	EventType = EventType()                   ; Type d'évènement
	
	;Code menu
	
	If Event_De_Win_OS = #PB_Event_Menu   
		MenuID = EventMenu()
		
		If MenuID = #MENU_1
			MessageRequester("Note !", "La  valeur dans la colonne [Nbr. d'unit.] est limitée à     " + Chr(10) + "  " + Chr(10) + "    132 000  pour les btls. de   25 cl." + Chr(10) + "      99 000  pour les btls. de   33 cl." + Chr(10) + "      88 000  pour les btls. de   37,5 cl." + Chr(10) + "      66 000  pour les btls. de   50 cl." + Chr(10) + "      50 000  pour les btls. de   66 cl. " + Chr(10) + "      44 000  pour les btls. de   75 cl." + Chr(10) + "      33 000  pour les btls. de 100 cl." + Chr(10) + "        6 600  pour les fûts   de      5 ltrs. " + Chr(10) + "        1 650  pour les fûts   de    20 ltrs." + Chr(10) + "        1 100  pour les fûts   de    30 trs." + Chr(10) + "           660  pour les fûts   de    50 ltrs." + Chr(10) + "" + Chr(10) + "Dans la colonne [Vol. en litres], le produit est " + Chr(10) + "arrondi au litre le plus proche." + Chr(10) + "", #MB_OK|#MB_ICONWARNING)
			
			ElseIf MenuID = #MENU_2
			MessageRequester("Info !", "    " + Chr(10) + "    Compiler avec PureBasic 5.11   " + Chr(10) + "    " + Chr(10) + "    Site : www.purebasic.com/french/index.php      " + Chr(10) + "" + Chr(10) + "    Auteur R-Skr - Mai 2013", #MB_OK|#MB_ICONINFORMATION|#MB_DEFBUTTON3)
			
			ElseIf MenuID = #MENU_3
			End     
		EndIf 
	EndIf
	
	;Code Gadget     
	
	If Event_De_Win_OS = #PB_Event_Gadget
		
		select GadgetID 
			case #String_15;------------------------------------------------------------ BTL 25cl
			Nbr$ = GetGadgetText(#String_15)
			Nbr = Val(Nbr$)       
			If Nbr >= 132000
				MessageRequester("Information", "Le nombre de bts. de 25 cl. est limité à 132000", #PB_MessageRequester_Ok)
				Nbr$ = ""
				SetGadgetText(#String_15, Nbr$)
				Tot$ =""
				SetGadgetText(#String_28, Tot$)
				Nbr = 0
			EndIf
			Bt(Nbr,0.25)
			
			case  #String_16;-------------------------------------------------BTL 33cl
			Nbr$ = GetGadgetText(#String_16)
			Nbr = Val(Nbr$)       
			If Nbr >= 99000
				MessageRequester("Information", "Le nombre de 33cl. est limité à 99000bts.", #PB_MessageRequester_Ok)
				Nbr$ = ""
				SetGadgetText(#String_16, Nbr$)
				Tot$ =""
				SetGadgetText(#String_29, Tot$)
				Nbr = 0
			EndIf       
			Bt(Nbr,0.33)
			
			case #String_17;---------------------------------------------------BTL 37,5cl
			Nbr$ = GetGadgetText(#String_17)
			Nbr = Val(Nbr$)       
			If Nbr >= 88000
				MessageRequester("Information", "Le nombre de 37,5cl. est limité à 88000bts.", #PB_MessageRequester_Ok)
				Nbr$ = ""
				SetGadgetText(#String_17, Nbr$)
				Tot$ =""
				SetGadgetText(#String_30, Tot$)
				Nbr = 0
			EndIf       
			Bt(Nbr,0.375)
			case #String_18;---------------------------------------------------BTL 50cl
			Nbr$ = GetGadgetText(#String_18)
			
			Nbr = Val(Nbr$)       
			If Nbr >= 66000
				MessageRequester("Information", "Le nombre de 50cl. est limité à 66000bts.", #PB_MessageRequester_Ok)
				Nbr$ = ""
				SetGadgetText(#String_18, Nbr$)
				Tot$ =""
				SetGadgetText(#String_31, Tot$)
				Nbr = 0
			EndIf       
			Bt(Nbr,0.50)
			case #String_19;---------------------------------------------------BTL 66cl
			Nbr$ = GetGadgetText(#String_19)
			
			Nbr = Val(Nbr$)       
			If Nbr >= 50000
				MessageRequester("Information", "Le nombre de 66cl. est limité à 50000bts.", #PB_MessageRequester_Ok)
				Nbr$ = ""
				SetGadgetText(#String_19, Nbr$)
				Tot$ =""
				SetGadgetText(#String_32, Tot$)
				Nbr = 0
			EndIf       
			Bt(Nbr,0.66)
			case #String_20;---------------------------------------------------BTL 75cl
			Nbr$ = GetGadgetText(#String_20)
			
			Nbr = Val(Nbr$)       
			If Nbr >= 44000
				MessageRequester("Information", "Le nombre de bts. de 75 cl. est limité à 44000", #PB_MessageRequester_Ok)
				Nbr$ = ""
				SetGadgetText(#String_20, Nbr$)
				Tot$ =""
				SetGadgetText(#String_33, Tot$)
				Nbr = 0
			EndIf
			Bt(Nbr,0.75)
			case #String_21;---------------------------------------------------BTL 100cl
			Nbr$ = GetGadgetText(#String_21)
			
			Nbr = Val(Nbr$)       
			If Nbr >= 33000
				MessageRequester("Information", "Le nombre de bts. de 100 cl. est limité à 33000", #PB_MessageRequester_Ok)
				Nbr$ = ""
				SetGadgetText(#String_21, Nbr$)
				Tot$ =""
				SetGadgetText(#String_34, Tot$)
				Nbr = 0
			EndIf
			Bt(Nbr,1)
			case #String_22;---------------------------------------------------FU 5 L
			Nbr$ = GetGadgetText(#String_22)
			
			Nbr = Val(Nbr$)       
			If Nbr >= 6600
				MessageRequester("Information", "Le nombre de fûts de 5 ltr. est limité à 6600", #PB_MessageRequester_Ok)
				Nbr$ = ""
				SetGadgetText(#String_22, Nbr$)
				Tot$ =""
				SetGadgetText(#String_35, Tot$)
				Nbr = 0
			EndIf
			Bt(Nbr,5)
			case #String_23;---------------------------------------------------FU 20 L
			Nbr$ = GetGadgetText(#String_23)
			
			Nbr = Val(Nbr$)       
			If Nbr >= 1650
				MessageRequester("Information", "Le nombre de fûts de 20 ltr. est limité à 1650", #PB_MessageRequester_Ok)
				Nbr$ = ""
				SetGadgetText(#String_23, Nbr$)
				Tot$ =""
				SetGadgetText(#String_36, Tot$)
				Nbr = 0
			EndIf
			Bt(Nbr,20)
			
			case  #String_24;---------------------------------------------------FU 30 L
			Nbr$ = GetGadgetText(#String_24)
			
			Nbr= Val(Nbr$)       
			If Nbr >= 1100
				MessageRequester("Information", "Le nombre de fûts de 30 ltr. est limité à 1100", #PB_MessageRequester_Ok)
				Nbr$ = ""
				SetGadgetText(#String_24, Nbr$)
				Tot$ =""
				SetGadgetText(#String_37, Tot$)
				Nbr = 0
			EndIf 
			Bt(Nbr,30)
			case #String_25;---------------------------------------------------FU 50 L
			Nbr$ = GetGadgetText(#String_25)
			
			Nbr = Val(Nbr$)       
			If Nbr >= 660
				MessageRequester("Information", "Le nombre de fûts de 50 ltr. est limité à 660", #PB_MessageRequester_Ok)
				Nbr$ = ""
				SetGadgetText(#String_25, Nbr$)
				Tot$ =""
				SetGadgetText(#String_38, Tot$)
				Nbr = 0
			EndIf
			Bt(Nbr,50)
			; ElseIf GadgetID = #String_41
			
		EndSelect
		
	EndIf
	
Until Event_De_Win_OS = #PB_Event_CloseWindow       ; Fin de la boucle principale

End
; ================================ Fin ========================================


;- zone procedures
; ************************************************************************************************
Procedure Open_Window_0()
	
	If OpenWindow(#Window_0, 224, 59, 487, 451, "Volume d'un embouteillage (bouteilles et fûts)",  #PB_Window_SystemMenu | #PB_Window_TitleBar | #PB_Window_ScreenCentered | #PB_Window_WindowCentered )
		If CreateMenu(#MenuBar_0, WindowID(#Window_0))
			MenuTitle("Infos")
			MenuItem(#MENU_1, "Notes")
			MenuBar()
			MenuItem(#MENU_2, "A propos ...")
			MenuBar()
			MenuItem(#MENU_3, "Quitter")
		EndIf
		
		
		
		StringGadget(#String_0, 65, 45, 135, 25, "Contidionnement", #PB_String_ReadOnly)
		SetGadgetFont(#String_0, FontID1)
		StringGadget(#String_1, 65, 70, 135, 25, "   Bouteilles de 25 cl.", #PB_String_ReadOnly)
		StringGadget(#String_2, 65, 95, 135, 25, "   Bouteilles de 33 cl.", #PB_String_ReadOnly)
		StringGadget(#String_3, 65, 120, 135, 25, "  Bouteilles de 37,5 cl.", #PB_String_ReadOnly)
		StringGadget(#String_4, 65, 145, 135, 25, "   Bouteilles de 50 cl.", #PB_String_ReadOnly)
		StringGadget(#String_5, 65, 170, 135, 25, "   Bouteilles de 66 cl.", #PB_String_ReadOnly)
		StringGadget(#String_6, 65, 195, 135, 25, "   Bouteilles de 75 cl.", #PB_String_ReadOnly)
		StringGadget(#String_7, 65, 220, 135, 25, "  Bouteilles de 100 cl.", #PB_String_ReadOnly)
		StringGadget(#String_8, 65, 245, 135, 25, "           Fûts de 5 l.", #PB_String_ReadOnly)
		StringGadget(#String_10, 65, 270, 135, 25, "          Fûts de 20 l.", #PB_String_ReadOnly)
		StringGadget(#String_11, 65, 295, 135, 25, "          Fûts de 30 l.", #PB_String_ReadOnly)
		StringGadget(#String_12, 65, 320, 135, 25, "          Fûts de 50 l.", #PB_String_ReadOnly)
		StringGadget(#String_14, 200, 45, 100, 25, " Nbr. d'unit.", #PB_String_ReadOnly)
		SetGadgetFont(#String_14, FontID1)
		StringGadget(#String_15, 200, 70, 100, 25, "", #PB_String_Numeric)   
		StringGadget(#String_16, 200, 95, 100, 25, "", #PB_String_Numeric)
		StringGadget(#String_17, 200, 120, 100, 25, "", #PB_String_Numeric)
		StringGadget(#String_18, 200, 145, 100, 25, "", #PB_String_Numeric)
		StringGadget(#String_19, 200, 170, 100, 25, "", #PB_String_Numeric)
		StringGadget(#String_20, 200, 195, 100, 25, "", #PB_String_Numeric)
		StringGadget(#String_21, 200, 220, 100, 25, "", #PB_String_Numeric)
		StringGadget(#String_22, 200, 245, 100, 25, "", #PB_String_Numeric)
		StringGadget(#String_23, 200, 270, 100, 25, "", #PB_String_Numeric)
		StringGadget(#String_24, 200, 295, 100, 25, "", #PB_String_Numeric)
		StringGadget(#String_25, 200, 320, 100, 25, "", #PB_String_Numeric)
		StringGadget(#String_27, 300, 45, 115, 25, " Vol. en litres", #PB_String_ReadOnly); | #PB_String_Numeric)
		SetGadgetFont(#String_27, FontID1)
		StringGadget(#String_28, 300, 70, 115, 25, "", #PB_String_ReadOnly | #PB_String_Numeric)
		SetGadgetFont(#String_28, FontID3)
		StringGadget(#String_29, 300, 95, 115, 25, "", #PB_String_ReadOnly | #PB_String_Numeric)
		SetGadgetFont(#String_29, FontID3)
		StringGadget(#String_30, 300, 120, 115, 25, "", #PB_String_ReadOnly | #PB_String_Numeric)
		SetGadgetFont(#String_30, FontID3)
		StringGadget(#String_31, 300, 145, 115, 25, "", #PB_String_ReadOnly | #PB_String_Numeric)
		SetGadgetFont(#String_31, FontID3)
		StringGadget(#String_32, 300, 170, 115, 25, "", #PB_String_ReadOnly | #PB_String_Numeric)
		SetGadgetFont(#String_32, FontID3)
		StringGadget(#String_33, 300, 195, 115, 25, "", #PB_String_ReadOnly | #PB_String_Numeric)
		SetGadgetFont(#String_33, FontID3)
		StringGadget(#String_34, 300, 220, 115, 25, "", #PB_String_ReadOnly | #PB_String_Numeric)
		SetGadgetFont(#String_34, FontID3)
		StringGadget(#String_35, 300, 245, 115, 25, "", #PB_String_ReadOnly | #PB_String_Numeric)
		SetGadgetFont(#String_35, FontID3)
		StringGadget(#String_36, 300, 270, 115, 25, "", #PB_String_ReadOnly | #PB_String_Numeric)
		SetGadgetFont(#String_36, FontID3)
		StringGadget(#String_37, 300, 295, 115, 25, "", #PB_String_ReadOnly | #PB_String_Numeric)
		SetGadgetFont(#String_37, FontID3)
		StringGadget(#String_38, 300, 320, 115, 25, "", #PB_String_ReadOnly | #PB_String_Numeric)
		SetGadgetFont(#String_38, FontID3)                  
		
		StringGadget(#String_40, 65, 360, 235, 25, "     Total du volume en litres", #PB_String_ReadOnly)       
		SetGadgetFont(#String_40, FontID1)
		
		StringGadget(#String_41, 300, 360, 115, 25, "", #PB_String_ReadOnly)
		SetGadgetFont(#String_41, FontID3)
		
		
	EndIf
EndProcedure

Procedure Total_Soutirre()
	
	If Nbr$ = ""
		Nbr = 0
	EndIf
	Total.f=toto(1) + toto(2) + toto(3) + toto(4) + toto(5) + toto(6) + toto(7) + toto(8) +toto(9) + toto(10) +toto(11)
	TotalSout$ =Strf(Total,2)
	Longueur = Len(TotalSout$)
	NouveauTot$ = Space(8 - Longueur) + TotalSout$
	TotalSout$ = NouveauTot$
	SetGadgetColor(#String_41, #PB_Gadget_BackColor, $00FFFF)
	SetGadgetColor(#String_41, #PB_Gadget_FrontColor, $000000)
	SetGadgetText(#String_41, TotalSout$)                       
	
EndProcedure

Procedure Bt(Nbr,type.f)
	
	; une seule procedure ;) 
	Tot.f= Nbr* type.f ; 0.25
	Tot$ =Strf(Tot.f,2)
	
	if tot>0
		Longueur = Len(Tot$)
		NouveauTot$ = Space(8 - Longueur) + Tot$
		Tot$ = NouveauTot$
	endif
	ch$=strf(type.f,2)
	select ch$
		case "0.25"
		SetGadgetText(#String_28, Tot$)
		toto(1)=tot
		
		case "0.33"
		SetGadgetText(#String_29, Tot$)  
		toto(2)=tot 
		
		case "0.38"
		SetGadgetText(#String_30, Tot$)   
		toto(3)=tot
		
		case "0.50"
		SetGadgetText(#String_31, Tot$) 
		toto(4)=tot
		
		case "0.66"
		SetGadgetText(#String_32, Tot$) 
		toto(5)=tot
		
		case "0.75"
		SetGadgetText(#String_33, Tot$)
		toto(6)=tot
		
		case "1.00"
		SetGadgetText(#String_34, Tot$)
		toto(7)=tot
		
		case "5.00"
		SetGadgetText(#String_35, Tot$)
		toto(8)=tot
		
		case "20.00"
		SetGadgetText(#String_36, Tot$)
		toto(9)=tot
		
		case "30.00"
		SetGadgetText(#String_37, Tot$)
		toto(10)=tot
		
		case "50.00"
		SetGadgetText(#String_38, Tot$)
		toto(11)=tot
		
	EndSelect
	Total_Soutirre()
EndProcedure
; EPB
Raym
Messages : 4
Inscription : lun. 13/mai/2013 23:14

Re: Nouveau

Message par Raym »

reBonjour merci pour vos encouragements et remarques.

A Dobro: effectivement je n'ai pas expliqué. Alors voila: le but est de calculer le volume de "BIERE" soutiré en fonction des différents conditionnements. Pour le problème de mes procédures, je m'en suis rendu compte, mais pour l'instant je n'est pas su faire. Je découvre.

A MLD: Oui pour la licence c'est fait depuis. Heu, non pas dans la limonade,, j' étais dans la bière "Pas en bière" je précise.

A Kwai chang caine, merci.

A omega, remerci,, je crois que j'ai des vieux relents de qbasic. Et c'est dure de se libérer de son "amour" d'enfance (rire). Mais j'adore faire un truc qui marche.

A+
Raym
Messages : 4
Inscription : lun. 13/mai/2013 23:14

Re: Nouveau

Message par Raym »

Merci dobro, j'imprime et je vais cogiter :idea:
Avatar de l’utilisateur
Ar-S
Messages : 9477
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Nouveau

Message par Ar-S »

Salut Raym,
Bienvenue dans le monde de PB.

Les procedures évitant les multiples répétitions sont vraiment importantes et pas difficile à utiliser.
Je t'invite aussi à t'intéresser aux structures qui te permettront un classement lisible de tes données.

Pour les proces voir le code de Dobro. Pour les structures tu as la doc et ce petit exemple plus en rapport avec tes données.

Code : Tout sélectionner

Structure Conteneur
    Nom.s
    Qte.f 
EndStructure

Dim Bierre.Conteneur(1) ; 2 places dans le tableau : 0 à 1

; On entre les données de la structure dans le tableau 

Bierre(0)\Nom = " Bouteilles de 25 cl."
Bierre(0)\Qte = 0.25

Bierre(1)\Nom = " Bouteilles de 33 cl."
Bierre(1)\Qte = 0.33



; ---Affichage des données---

For i = 0 To 1
      Debug Bierre(i)\Nom + " contient " + StrF(Bierre(i)\Qte,2) ; Le ,2 est le nbr de décimale.
Next

~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: Nouveau

Message par graph100 »

Arf :oops: comme tout le monde, voilà mon grain de sel, et cadeau de bienvenu :D

Tu trouveras dans ce code quelques fonctions plus avancées qui te permettent de faire la même chose, mais en plus concis, plus lisible (quand tu seras plus à l'aise), et surtout qui permettent de modifier le fonctionnement bcp plus rapidement car le code n'est pas recopié (des blocs identiques qui se succèdent avec juste une variable qui change c'est moche :lol: )

Tu remarqueras qu'il n'y a plus que 277 lignes, tout en étant confortable avec les lignes vides / commentaires / balises de bloc (ctrl + F4 pour toutes les ouvrir / fermer).
Et puis au niveau de la structure, je trouve que ça rend le monstre plus lisible !

Il y a des commentaires éparpillés dans le code pour aider à la compréhension. D'ailleurs ça devrais aller dans une section tutoriel je pense (modo magique ? 8) )

Code : Tout sélectionner

;
;   =======================================================================
;   CalcSouitFinal_10_Cst_Enum.pb
;   Liste:  -Constantes/-Variables/-Fonts/-etc
;   
;   Modification :	Gadgets dynamiques / MAP / pointeurs / structure
;										DataSection / constantes avec un nom compréhensible
;										utilisation des balises ;{ et ;} pour délimiter le code
;   =======================================================================


;{ CONSTANTES & STRUCTURES
;- ZONE Costantes

Enumeration
	#Window_0
EndEnumeration

Enumeration
	#MenuBar_0
EndEnumeration

Enumeration
	#MENU_1
	#MENU_2
	#MENU_3
EndEnumeration

Enumeration
	#String_Colonne_Contidionnement
	#String_Colonne_NBunite
	#String_Colonne_Volume
	#String_Colonne_Total
	#String_Total
EndEnumeration



;- ZONE Structures
Structure Type_bouteille
	GD_txt.l
	GD_nb.l
	GD_res.l
	
	limite.l
	volume.d
	IS_bouteille.b
	
	volume_total.d
EndStructure

;}

;{ VARIABLES GLOBALES
;- ZONE Variables globales

Global NewMap Contenant.Type_bouteille()
Global TXT_note_limite$

;- Fonts
Global FontID1 = LoadFont(1, "Arial", 9, #PB_Font_Bold)
Global FontID3 = LoadFont(3, "Courier", 10, #PB_Font_Bold)


;}

;{ PROCEDURES
;- ZONE procedures

Procedure Open_Window_0()
	
	If OpenWindow(#Window_0, 224, 59, 487, 451, "Volume d'un embouteillage (bouteilles et fûts)",  #PB_Window_SystemMenu | #PB_Window_TitleBar | #PB_Window_ScreenCentered | #PB_Window_WindowCentered ) = 0
		; n'arrive jamais en théorie !
		
		; Eviter les Grand IF qui peuvent l'être améliore la lisibilité du code !
		
		End
	EndIf
	
	If CreateMenu(#MenuBar_0, WindowID(#Window_0))
		MenuTitle("Infos")
		MenuItem(#MENU_1, "Notes")
		MenuBar()
		MenuItem(#MENU_2, "A propos ...")
		MenuBar()
		MenuItem(#MENU_3, "Quitter")
	EndIf
	
	;{ création du texte de la note sur la limite des bouteilles
	
	TXT_note_limite$ = "La  valeur dans la colonne [Nbr. d'unit.] est limitée à" + Chr(10) + Chr(10)
	
	;}
	
	; Lecture des informations stockées en DATA et création des gadgets dynamiques
	Restore info_bouteille
	
	Read.l nb_contenant.l
	nb_contenant - 1 ; pour les besoins de la boucle for-next (l'index commence à 0 pour faciliter le calcul)
	
	For i = 0 To nb_contenant
		Read.d type.b
		Read.d volume.d
		Read.d limite.l
		
		If type
			gadget_txt.l = StringGadget(#PB_Any, 65, 70 + i * 25, 135, 25, RSet("Bouteilles de " + StrD(volume) + " cl", 23), #PB_String_ReadOnly)
			
			TXT_note_limite$ = TXT_note_limite$ + Space(9) + RSet(Str(Int(limite / 1000)), 6) + " " + RSet(Str(limite % 1000), 3, "0") + " pour les btls. de" + #TAB$ + StrD(volume) + " cl" + Chr(10)
		Else
			gadget_txt.l = StringGadget(#PB_Any, 65, 70 + i * 25, 135, 25, RSet("Fûts de " + StrD(volume) + " L", 23), #PB_String_ReadOnly)
			
			TXT_note_limite$ = TXT_note_limite$ + Space(9) + RSet(Str(Int(limite / 1000)), 6) + " " + RSet(Str(limite % 1000), 3, "0") + " pour les fûts  de" + #TAB$ + StrD(volume) + " L" + Chr(10)
		EndIf
		
		gadget_nb.l = StringGadget(#PB_Any, 200, 70 + i * 25, 100, 25, "", #PB_String_Numeric)
		gadget_res.l = StringGadget(#PB_Any, 300, 70 + i * 25, 115, 25, "", #PB_String_ReadOnly | #PB_String_Numeric)
		SetGadgetFont(gadget_res, FontID3)
		
		*map_element.Type_bouteille = AddMapElement(Contenant(), Str(gadget_nb))
		
		; on stocke les infos dans la map (l'utilisation du pointeur est optionelle, mais je préfère pour les map. sinon : Gadget()\IS_bouteille fonctionne aussi.
		*map_element\GD_nb = gadget_nb
		*map_element\GD_res = gadget_res
		*map_element\GD_txt = gadget_txt
		
		*map_element\IS_bouteille = type
		*map_element\volume = volume
		*map_element\limite = limite
		
		
	Next
	
	StringGadget(#String_Colonne_Contidionnement, 65, 45, 135, 25, "Contidionnement", #PB_String_ReadOnly)
	SetGadgetFont(#String_Colonne_Contidionnement, FontID1)
	
	StringGadget(#String_Colonne_NBunite, 200, 45, 100, 25, " Nbr. d'unit.", #PB_String_ReadOnly)
	SetGadgetFont(#String_Colonne_NBunite, FontID1)
	
	StringGadget(#String_Colonne_Volume, 300, 45, 115, 25, " Vol. en litres", #PB_String_ReadOnly); | #PB_String_Numeric)
	SetGadgetFont(#String_Colonne_Volume, FontID1)
	
	StringGadget(#String_Colonne_Total, 65, 360, 235, 25, "     Total du volume en litres", #PB_String_ReadOnly)       
	SetGadgetFont(#String_Colonne_Total, FontID1)
	
	StringGadget(#String_Total, 300, 360, 115, 25, "", #PB_String_ReadOnly)
	SetGadgetFont(#String_Total, FontID3)
	
	SetGadgetColor(#String_Total, #PB_Gadget_BackColor, $00FFFF)
	SetGadgetColor(#String_Total, #PB_Gadget_FrontColor, $000000)
	
EndProcedure


Procedure Calcul_Volume_Total()
	Protected Total.d
	
	ForEach Contenant()
		Total + Contenant()\volume_total
	Next
	
	SetGadgetText(#String_Total, RSet(StrD(Total, 2), 8))            
EndProcedure

;-
;}


;{ INITIALISATION

Open_Window_0()


;}


;{ BOUCLE PRINCIPALE
;- Boucle principale

Repeat
	Event = WaitWindowEvent()	; Reçu de Window_OS   -  ne pas mettre de timeout si il n'y en a pas besoin dans le programme.
	WindowID = EventWindow()	; La fenètre concernée
	GadgetID = EventGadget()	; Le gadget concerné
	EventType = EventType()		; Type d'évènement
	
	;{ Code menu
	
	If Event = #PB_Event_Menu   
		MenuID = EventMenu()
		
		If MenuID = #MENU_1
			MessageRequester("Note !", TXT_note_limite$, #MB_OK|#MB_ICONWARNING)
			
		ElseIf MenuID = #MENU_2
			MessageRequester("Info !", "    " + Chr(10) + "    Compilé avec PureBasic 5.11   " + Chr(10) + "    " + Chr(10) + "    Site : www.purebasic.com/french/index.php      " + Chr(10) + "" + Chr(10) + "    Auteur R-Skr - Mai 2013", #MB_OK|#MB_ICONINFORMATION|#MB_DEFBUTTON3)
			
		ElseIf MenuID = #MENU_3
			End
		EndIf
	EndIf
	
	;}
	
	;{ Code Gadget     
	
	If Event = #PB_Event_Gadget
		
		; On regarde si le gadget est un des contenants, (comme le numéro du gadget est aussi la clé de l'élément correspondant dans la map, c'est facile !)
		*map_element.Type_bouteille = FindMapElement(Contenant(), Str(GadgetID))
		If *map_element
			Nbr = Val(GetGadgetText(*map_element\GD_nb))
			
			If Nbr > *map_element\limite ; Attention, si tu mets >= l'erreur apparaitra même pour le nb exacte !
				If *map_element\IS_bouteille
					MessageRequester("Information", "Le nombre de bts. de " + StrD(*map_element\volume) + " cl est limité à " + Str(*map_element\limite), #PB_MessageRequester_Ok)
				Else
					MessageRequester("Information", "Le nombre de fûts de " + StrD(*map_element\volume) + " L est limité à " + Str(*map_element\limite), #PB_MessageRequester_Ok)
				EndIf
				Nbr = *map_element\limite
				
				SetGadgetText(*map_element\GD_nb, Str(Nbr))
			EndIf
			
			If *map_element\IS_bouteille
				*map_element\volume_total = Nbr * *map_element\volume / 100
			Else
				*map_element\volume_total = Nbr * *map_element\volume
			EndIf
			
			; Mise à jour du gadget, tout simplement...
			SetGadgetText(*map_element\GD_res, RSet(StrD(*map_element\volume_total, 2), 8))
			
			; Calcul du volume total. Comme cette procédure n'est appelée qu'une seule fois dans tout le code on pourrait carrément mettre le code à cet endroit, mais si jamais tu la réutilise ailleurs, c'est plus pratique.
			Calcul_Volume_Total()
		EndIf
		
		; 		Select GadgetID
		; 			Case  ; Si tu rajoutes des gadgets, tu peux les traiter ici (avec CASE)
		; 				
		; 		EndSelect
		
	EndIf
	;}
	
Until Event = #PB_Event_CloseWindow       ; Fin de la boucle principale

;}


End


;{ DATA : infos sur les bouteilles
;- DATA Section

DataSection
	info_bouteille:
	Data.l 11 ; nombre de contenant
	; 1 = est une bouteille et 0 = fût, xx est le volume en cl ou l pour les fûts, limite de contenant (je n'ai pas bien compris à quoi ça servait)
	
	Data.d 1, 25, 132000
	Data.d 1, 33, 99000
	Data.d 1, 37.5, 88000
	Data.d 1, 50, 66000
	Data.d 1, 66, 50000
	Data.d 1, 75, 44000
	Data.d 1, 100, 33000
	Data.d 0, 5, 6600
	Data.d 0, 20, 1650
	Data.d 0, 30, 1100
	Data.d 0, 50, 660
	
EndDataSection


;}
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Nouveau

Message par Backup »

graph100 a écrit : Il y a des commentaires éparpillés dans le code pour aider à la compréhension. D'ailleurs ça devrais aller dans une section tutoriel je pense (modo magique ? 8) )

je ne pense pas non !

comme je l'ai deja expliqué , un Tuto c'est pas un prg commenté !

mais une demarche d'explications point par point , en étayant le pourquoi du comment,
expliquant pourquoi tel choix , en emmenant le lecteur a un cheminement qui apporte la connaissance ...

un Tuto est un Cours !

ici par exemple , tu n'expliques pas pourquoi avoir utilisé des Data
si il existe une autre methode ....

ton code est tres bien ... mais on a besoin de comprendre de suivre un cheminement de pensées
faut se mettre a la place de quelqu'un qui ne connais pas

je sais qu'il y a malgres tout des Tuto qui ne correspondent pas a ça
mais c'est bien dommage un Tuto ça se présente un cours jte dis :)
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: Nouveau

Message par graph100 »

Effectivement, tu as raison... En revanche mettre un code qui reste assez simple dans un endroit qui permet aux débutants de le trouver est à mon avis la chose à faire. Surtout que dans ce cas nous avons le même code au complet en 3 versions différentes, avec des niveaux de difficultés différents.

Bref, pour un nouveau compétent, c'est utile, d'où ma demande de mise en valeur du post ! :)
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Répondre