addition contenu de plusieurs StringGadget ( numériques)

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Ayai j'ai été le plus rapide :D

Voila comment un débutant ferait :wink:

Code : Tout sélectionner

#Window_0 = 1
#Gadget_0 = 2
#Gadget_1 = 3

LoadFont(1, "Arial", 14) 
LoadFont(2, "Arial", 10) 

OpenWindow(#Window_0, 216, 0, 480, 88, "Test - validation par entrée",  #PB_Window_ScreenCentered | #PB_Window_SystemMenu) 
CreateGadgetList(WindowID(#Window_0)) 

SetGadgetFont(#PB_Default, FontID(1)) 
StringGadget(#Gadget_1, 20, 50, 450, 30, "Coucou, j'suis à droite et arial 14", #PB_Text_Right) 

SetGadgetFont(#PB_Default, FontID(2)) 
StringGadget(#Gadget_0, 20, 10, 450, 30, "Coucou, j'suis à gauche et arial 10") 
   
Repeat 
 Delay(1) 
Until WaitWindowEvent() = #PB_Event_CloseWindow                         
fouilloud
Messages : 34
Inscription : ven. 07/déc./2007 17:15

Message par fouilloud »

bonjour Kwai chang caine,

merci pour les fonts
pour le sens d'alignement texte c'est ce que j'avais essayé sans succès, mais je viens de trouver à l'instant pourqoi PB me répondai "nombre de param. incorrect" - j'utilise en plus "#PB_String_BorderLess" -
j'avais mis une virgule au lieu de la barre verticale entre les deux options!!
Avatar de l’utilisateur
case
Messages : 1546
Inscription : lun. 10/sept./2007 11:13

Message par case »

fouilloud a écrit : 2 ----
comment écrire les chiffres par la droite dans les StringGadgets, ce qui en + arrêterais les décimales à deux dans ceux récupérants les valeurs d'additions.

merci
pour arreter les decimales a deux dans les stringgadgets
tu peux envisager un code comme celui ci

Code : Tout sélectionner

Declare.s monaie(number_monaie.f)
c.f=25.56516516
Debug c ; c a plein de chiffres apres la virgule
Debug monaie(c)
;
;
;
Procedure.s monaie(number_monaie.f)
	chaine_monaie$=StrF(number_monaie) 						; convertis le nombre en chaine
	virgule_monaie=FindString(chaine_monaie$,".",1)			; cherche la virgule dans la chaine
	If virgule_monaie										; si il y a une virgule
		chaine_monaie$=Left(chaine_monaie$,virgule_monaie+2); on prend deux chiffres apres la virgule
	EndIf
	ProcedureReturn chaine_monaie$							; on retourne la chaine
EndProcedure
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Code : Tout sélectionner

Declare.s monaie(number_monaie.f) 
c.f=25.56516516 
Debug c ; c a plein de chiffres apres la virgule 
Debug monaie(c) 
; 
; 
; 
Procedure.s monaie(number_monaie.f) 
   ProcedureReturn StrF(number_monaie, 2)                    ; on retourne la chaine 
EndProcedure 
:roll:
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

:lol: :lol: :lol:
fouilloud
Messages : 34
Inscription : ven. 07/déc./2007 17:15

Message par fouilloud »

merci Chris, mais je n'arrive pas à récupérer la somme correspondant à ton " c.f "

voici un début de ce que je veux faire.
j'en ai enlevé une grande partie pour plus de simplicité.

le PB est dans le total, qui ne veux pas conserver seulement deux décimales
sinon, je reviendrai à n'inscrire que des sommes entières.
me dire aussi si je ne pollue pas trop avec un ex. aussi long

Code : Tout sélectionner

Enumeration
 #fenetre_principale=0
 #Text_0:#Text_1:#Text_2:#Text_3:#Text_4:#Text_5:#Text_6:#Text_7:#Text_8:#Text_9:#Text_10:#Text_11:#Text_12:#Text_13:#Text_14:#Text_15:#Text_16:#Text_17:#Text_18:#Text_19:#Text_20:#Text_21:#Text_22:#Text_23:#Text_24:#Text_25:#Text_26:#Text_27:#Text_28:#Text_29:#Text_30:#Text_31:#Text_32:#Text_33:#Text_34:#Text_35:#Text_36:#Text_37:#Text_38:#Text_39:#Text_40
#total_dec
EndEnumeration
LoadFont(1, "Arial", 14) 
LoadFont(2, "Arial", 8)
OpenWindow(#fenetre_principale, 0, 0, 1280, 913, "DEPENSES ANNUELLES",  #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_TitleBar | #PB_Window_WindowCentered )
    CreateGadgetList(WindowID(#fenetre_principale))
      ButtonGadget(#PB_Any, 220,20, 140, 30, "CHARGER une ANNEE", #PB_Button_Default)
      ButtonGadget(#PB_Any, 400,20, 140, 30, "SAUVER L'ANNEE  >>", #PB_Button_Default)
      TextGadget(#Text_0, 0, 90, 214, 16, "NOURRITURE", #PB_Text_Right)
      TextGadget(#Text_1, 0, 115, 214, 16, "SORTIES,...etc", #PB_Text_Right)
      TextGadget(#Text_22, 0, 640, 214, 20, "INFORMATIQUE internet", #PB_Text_Right)
      TextGadget(#Text_25, 220, 724, 790, 20, "---------------------------------------------------------------------------------------------------------TOTAL de chaque MOIS --------------------------------------------------------------------------------------------------------------------", #PB_Text_Center) 
      TextGadget(#Text_26, 220, 70, 60, 20, "JANVIER", #PB_Text_Center) 
      TextGadget(#Text_27, 285, 70, 60, 20, "FEVRIER", #PB_Text_Center) 
      TextGadget(#Text_38,1030, 70, 90,20, "TOTAL du POSTE", #PB_Text_Center)
      TextGadget(#Text_40,1020, 724, 110,20, "TOTAL de l'ANNEE", #PB_Text_Center)
      SetGadgetFont(#PB_Default, FontID(1)) 
      TextGadget(#Text_39, 560, 25, 60, 30 ,"2008",#PB_Text_Center) 
      SetGadgetFont(#PB_Default, FontID(2)) 

Dim TOT_janvier(25):Dim TOT_fevrier(25):Dim TOT_mars(25):Dim TOT_avril(25):Dim TOT_mai(25):Dim TOT_juin(25):Dim TOT_juillet(25):Dim TOT_aout(25):Dim TOT_sept(25):Dim TOT_oct(25):Dim TOT_nov(25):Dim TOT_dec(25):Dim TOT_postes(25)
y=90
poste$="nourr,sortie,linge,livre,MutSante,santeAutoP,santeNonR,TV,Tel,EDF,diversCour,diversExcep,chargeAppart,chargeMaman,impotsISF,impotsRev,impotsImmob,impotsFoncier,libre1,informMatos,informLog,informLivre,informWeb,libre2,libre3"
For a = 1 To CountString(poste$,",")+1
TOT_janvier(a)=StringGadget(#PB_Any, 220,y,60,16,"",#PB_String_BorderLess|#PB_Text_Right)       ; crée les StringGadgets pour janvier
y=y+25
Next
y=90

total_janvier = StringGadget ( #PB_Any ,220 ,740 ,60 ,16 , "", #PB_String_BorderLess |#PB_Text_Right )  ;StringGadget "totaux du mois"
total_annee= StringGadget ( #PB_Any ,1030,740,90,16, "" , #PB_String_BorderLess|#PB_Text_Right ) 
 Repeat 
Event = WaitWindowEvent () 
Select event 
Case #PB_Event_Gadget ; utilisation d'un gadget 
If EventType ()= #PB_EventType_Change ;si le contenu d'un gadget a changé 
gad= EventGadget () ; on regarde quel gadget a ete utilisé 

For a= 1 To 25                              ; total annuel par postes

Next 
     ;  faire le total des postes pour le mois 
 SetGadgetText (total_janvier, StrD ( ValD ( GetGadgetText (TOT_janvier(1)))+ ValD ( GetGadgetText (TOT_janvier(2)))+ ValD ( GetGadgetText (TOT_janvier(3)))+ ValD ( GetGadgetText (TOT_janvier(4)))+ ValD ( GetGadgetText (TOT_janvier(5)))+ ValD ( GetGadgetText (TOT_janvier(6)))+ ValD ( GetGadgetText (TOT_janvier(7))) + ValD ( GetGadgetText (TOT_janvier(8)))+ ValD ( GetGadgetText (TOT_janvier(9)))+ ValD ( GetGadgetText (TOT_janvier(10)))+ ValD ( GetGadgetText (TOT_janvier(11)))+ ValD ( GetGadgetText (TOT_janvier(12)))+ ValD ( GetGadgetText (TOT_janvier(13)))+ ValD ( GetGadgetText (TOT_janvier(14)))+ ValD ( GetGadgetText (TOT_janvier(15)))+ ValD ( GetGadgetText (TOT_janvier(16)))+ ValD ( GetGadgetText (TOT_janvier(17)))+ ValD ( GetGadgetText (TOT_janvier(18)))+ ValD ( GetGadgetText (TOT_janvier(19)))+ ValD ( GetGadgetText (TOT_janvier(20)))+ ValD ( GetGadgetText (TOT_janvier(21)))+ ValD ( GetGadgetText (TOT_janvier(22)))+ ValD ( GetGadgetText (TOT_janvier(23)))+ ValD ( GetGadgetText (TOT_janvier(24)))+ ValD ( GetGadgetText (TOT_janvier(25)))))                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
 
 EndIf 

Case #PB_Event_CloseWindow 
End 
EndSelect 
ForEver

Repeat 
      Event = WaitWindowEvent ()                                  
 Until Event = #PB_Event_CloseWindow : End
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Tu devrais mettre ton code entre les balises [.code] et [./code] (Retire les points dans les balises).

Le problème, c'est que quand tu colles ton code directement comme un texte, certaines valeurs se transforment en smileys. (la ligne "LoadFont(2, "Arial", 8 ), par exemple), et ça provoque des erreurs dans le compilo quand on veut le tester.

[.code]
Code du programme
[./code]

Sinon, pour ton problème, ben tu indiques le nombre de décimales dans ta fonction qui remplit le StringGadget() affichant le total.

Code : Tout sélectionner

 ; faire le total des postes pour le mois
        SetGadgetText (total_janvier, StrD ( ValD ( GetGadgetText (TOT_janvier(1)))+ ValD ( GetGadgetText (TOT_janvier(2)))+ ValD ( GetGadgetText (TOT_janvier(3)))+ ValD ( GetGadgetText (TOT_janvier(4)))+ ValD ( GetGadgetText (TOT_janvier(5)))+ ValD ( GetGadgetText (TOT_janvier(6)))+ ValD ( GetGadgetText (TOT_janvier(7))) + ValD ( GetGadgetText (TOT_janvier(8)))+ ValD ( GetGadgetText (TOT_janvier(9)))+ ValD ( GetGadgetText (TOT_janvier(10)))+ ValD ( GetGadgetText (TOT_janvier(11)))+ ValD ( GetGadgetText (TOT_janvier(12)))+ ValD ( GetGadgetText (TOT_janvier(13)))+ ValD ( GetGadgetText (TOT_janvier(14)))+ ValD ( GetGadgetText (TOT_janvier(15)))+ ValD ( GetGadgetText (TOT_janvier(16)))+ ValD ( GetGadgetText (TOT_janvier(17)))+ ValD ( GetGadgetText (TOT_janvier(18)))+ ValD ( GetGadgetText (TOT_janvier(19)))+ ValD ( GetGadgetText (TOT_janvier(20)))+ ValD ( GetGadgetText (TOT_janvier(21)))+ ValD ( GetGadgetText (TOT_janvier(22)))+ ValD ( GetGadgetText (TOT_janvier(23)))+ ValD ( GetGadgetText (TOT_janvier(24)))+ ValD ( GetGadgetText (TOT_janvier(25))),2))
mais à mon avis, tu te simplifierai la tâche en utilisant une liste chainée ou un tableau, couplé à une structure.
fouilloud
Messages : 34
Inscription : ven. 07/déc./2007 17:15

Message par fouilloud »

ah ! OK,OK

merci pour tout, mais je crois que sans livre "en français" genre que j'avais pour visual basic je ne m'en sortirai pas, ai commencé à réfléchir à comment sauvegarder / charger une année...mais hou là là !!

enfin je vais continuer encore un peu mais me vois mal parti.
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

En fait, tu fais une structure dont chaque variable est un poste de dépenses, et tu lui couples un tableau à 12 éléments qui correspondent à chaque mois de l'année.

Code : Tout sélectionner

Structure Depenses
  Impots.f
  Nourriture.f
  Vetements.f
  Vacances.f
  
  Total.f 
EndStructure

Dim MesDepenses.Depenses(11)

MesDepenses(0)\Impots = 1250
MesDepenses(0)\Nourriture = 892.50
MesDepenses(0)\Vetements = 237.95
MesDepenses(0)\Vacances = 128.77

MesDepenses(0)\Total = MesDepenses(0)\Impots + MesDepenses(0)\Nourriture + MesDepenses(0)\Vetements + MesDepenses(0)\Vacances

Debug StrF(MesDepenses(0)\Total, 2)
Ca donnerait en gros, un truc comme ça. Les valeurs sont récupérées dans les différents StringGadget() avec ValF()
Avatar de l’utilisateur
case
Messages : 1546
Inscription : lun. 10/sept./2007 11:13

Message par case »

mouarf :)

strf...


bien vu chris !
fouilloud
Messages : 34
Inscription : ven. 07/déc./2007 17:15

Message par fouilloud »

merci, je vais voir dans cette direction, et comme pour l'instant c'est " assez noir " je vais me replonger dans toute la doc que j'ai trouvé
fouilloud
Messages : 34
Inscription : ven. 07/déc./2007 17:15

Message par fouilloud »

bonjour et bonne année à tous,

comment faire pour savoir si l'on a cliqué sur un bouton "O" et "S" et pouvoir déclencher une action ? l'aide ne m'a été d'aucune ....aide !

voici un abrégé:

Code : Tout sélectionner

#fenetre_principale=0 : #ouvre=0 : #sauve=1
Dim T_janvier(4):Dim T_fevrier(4):Dim T_postes(4) 
poste$="nourr,sortie,linge,livre"
OpenWindow(#fenetre_principale, 100, 200, 300, 300, "",  #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_TitleBar | #PB_Window_WindowCentered )
CreateGadgetList(WindowID(#fenetre_principale))
ButtonGadget(#ouvre,50,10,40,40,"O") : ButtonGadget(#sauve,110,10,40,40,"S")

y=90
For a = 1 To CountString(poste$,",")+1
T_janvier(a)=StringGadget(#PB_Any, 50,y,60,16,"",#PB_String_BorderLess|#PB_Text_Right )      
y=y+25 : Next : y=90
For a = 1 To CountString(poste$,",")+1
T_fevrier(a)=StringGadget(#PB_Any, 115,y,60,16,"",#PB_String_BorderLess|#PB_Text_Right)       
y=y+25 : Next : y=90   
total_janvier = StringGadget ( #PB_Any ,50 ,220 ,60 ,16 , "", #PB_String_BorderLess |#PB_Text_Right )  
total_fevrier = StringGadget ( #PB_Any ,115 ,220 ,60 ,16 , "", #PB_String_BorderLess|#PB_Text_Right  )  
  
Repeat 
Event = WaitWindowEvent () 

Select event 
Case #PB_Event_Gadget 
If EventType ()= #PB_EventType_Change 
gad= EventGadget ()
SetGadgetText (total_janvier, StrD ( ValD ( GetGadgetText (T_janvier(1)))+ ValD ( GetGadgetText (T_janvier(2)))+ ValD ( GetGadgetText (T_janvier(3)))+ ValD ( GetGadgetText (T_janvier(4))),2))
SetGadgetText (total_fevrier, StrD ( ValD ( GetGadgetText (T_fevrier(1)))+ ValD ( GetGadgetText (T_fevrier(2)))+ ValD ( GetGadgetText (T_fevrier(3)))+ ValD ( GetGadgetText (T_fevrier(4))),2))
EndIf  
 
 ;Case  ?????
  
Case #PB_Event_CloseWindow 
End 
EndSelect 
ForEver
désolé de tant vous solliciter mais la réponse désirée n'est jamais dans la doc ! - ou je ne la comprends pas !!
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Voila..... avec la methode select case et la methode IF ELSEIF :wink:
Je te conseille de prendre l'habitude dés le debut de faire une indentation dans tes codes.
Il sera bien plus lisible et ce sera plus facile plus tard pour trouver les bugs et surtout au debut pour bien comprendre la gestion des evenements qui n'est pas facile à comprendre.

Code : Tout sélectionner

#fenetre_principale=0 : #ouvre=0 : #sauve=1 
Dim T_janvier(4):Dim T_fevrier(4):Dim T_postes(4) 
poste$="nourr,sortie,linge,livre" 
OpenWindow(#fenetre_principale, 100, 200, 300, 300, "",  #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_TitleBar | #PB_Window_WindowCentered ) 
CreateGadgetList(WindowID(#fenetre_principale)) 
ButtonGadget(#ouvre,50,10,40,40,"O") : ButtonGadget(#sauve,110,10,40,40,"S") 

y=90 
For a = 1 To CountString(poste$,",")+1 
T_janvier(a)=StringGadget(#PB_Any, 50,y,60,16,"",#PB_String_BorderLess|#PB_Text_Right )      
y=y+25 : Next : y=90 
For a = 1 To CountString(poste$,",")+1 
T_fevrier(a)=StringGadget(#PB_Any, 115,y,60,16,"",#PB_String_BorderLess|#PB_Text_Right)        
y=y+25 : Next : y=90    
total_janvier = StringGadget ( #PB_Any ,50 ,220 ,60 ,16 , "", #PB_String_BorderLess |#PB_Text_Right )  
total_fevrier = StringGadget ( #PB_Any ,115 ,220 ,60 ,16 , "", #PB_String_BorderLess|#PB_Text_Right  )  
  
Repeat 

 Event = WaitWindowEvent () 
 
 Select event 
 
  Case #PB_Event_Gadget 
  
   If EventType ()= #PB_EventType_Change 
    gad= EventGadget () 
    SetGadgetText (total_janvier, StrD ( ValD ( GetGadgetText (T_janvier(1)))+ ValD ( GetGadgetText (T_janvier(2)))+ ValD ( GetGadgetText (T_janvier(3)))+ ValD ( GetGadgetText (T_janvier(4))),2)) 
    SetGadgetText (total_fevrier, StrD ( ValD ( GetGadgetText (T_fevrier(1)))+ ValD ( GetGadgetText (T_fevrier(2)))+ ValD ( GetGadgetText (T_fevrier(3)))+ ValD ( GetGadgetText (T_fevrier(4))),2)) 
   EndIf  
   
   If EventGadget() = #ouvre
    MessageRequester("Kcc", "Coucou, je suis le bouton ''OUVRE'', tu m'a appellé ?")
   ElseIf EventGadget() = #sauve
    MessageRequester("Kcc", "Coucou, je suis le bouton ''SAUVE'', tu m'a appellé ?")
   EndIf
   
   ; Ou bien en select case
   
;    Select EventGadget()
;     Case #ouvre
;      MessageRequester("Kcc", "Coucou, je suis le bouton ''OUVRE'', tu m'a appellé ?")
;     Case #sauve
;      MessageRequester("Kcc", "Coucou, je suis le bouton ''SAUVE'', tu m'a appellé ?")
;    EndSelect 
    
 Case #PB_Event_CloseWindow 
  End 
 EndSelect 
 
ForEver
fouilloud
Messages : 34
Inscription : ven. 07/déc./2007 17:15

Message par fouilloud »

merci, merci, c'était si simple et dire que j'y avais passé une partie de l'après midi !

n'y a t'il pas un endroit ou trouver ce genre de petites choses ? perso je passe beaucoup de temps à chercher dans des progr. divers, souvent sans trouver, la preuve !!

je vous apprécis tous beaucoup pour votre gentillesse et dévouement
Avatar de l’utilisateur
case
Messages : 1546
Inscription : lun. 10/sept./2007 11:13

Message par case »

tout (ou presque) est dans la notice de purebasic :)
ceci dit le forum est fait pour y poser des questions et peut etre avoir des reponses
Répondre