Page 3 sur 3
Publié : dim. 06/janv./2008 20:04
par fouilloud
bonjour,
j'ai trouve ça:
Code : Tout sélectionner
#fenetre_principale = 0 : #gadget_affiche_texte = 0 : #gadget_editeur = 1
Procedure Ouvre_Fenetre_principale()
If OpenWindow ( #fenetre_principale , 0, 0, 200, 200, "fenêtre principale" , #PB_Window_SystemMenu | #PB_Window_WindowCentered )
If CreateGadgetList ( WindowID ( #fenetre_principale )) ; on créer la liste des éléments (gadget) de la fenètre
ButtonGadget ( #gadget_affiche_texte , 10, 10, 180, 20, "Créer le fichier texte" )
EditorGadget ( #gadget_editeur , 10, 40, 180, 150, Text1) ; on crée un EditorGadget
AddGadgetItem ( #gadget_editeur , 0, "Tapez du texte ici" ) ; on crée une ligne de texte dans l'EditorGadget
EndIf
EndIf
EndProcedure
Procedure Creation_Fichier_Texte()
Nombre_de_ligne = CountGadgetItems ( #gadget_editeur ) ; on compte le nombre de lignes
; on crée un fichier texte ( comme pas indiqué d'adresse de stockage, celui sera écrit à l'emplacement du programme )
If CreateFile (0, "EditorGadget.txt" ) ; On lit chaque ligne de l'EditorGadget, puis on l'enregistre dans le fichier "EditorGadget.txt"
For n = 0 To Nombre_de_ligne - 1 ; boucle For de la première ligne à la dernière
Texte.s = GetGadgetItemText ( #gadget_editeur , n, 0) ; on lit le texte de ligne n et l'enregistre dans fichiers "EditorGadget.txt"
WriteStringN (0,Texte) ; permet d'écrire dans le fichier en cours, ici, le 0 puis ajoute un saut de ligne
Next
; Une boucle fait évoluer une variable entre 2 valeurs, la valeur n va prendre les valeurs suivantes : 0, 1, 2, 3, 4, ... , Nombre_de_ligne - 1
; Pour chaque valeur de n, les actions placées entre le For et le Next seront executées
CloseFile (0) ; on ferme le fichier 0 qui correspond à "EditorGadget.txt"
EndIf
RunProgram ( "EditorGadget.txt" ) ; On ouvre le fichier texte avec les fonction RunProgram
EndProcedure
Ouvre_Fenetre_principale()
Repeat
Event = WaitWindowEvent ()
If Event = #PB_Event_Gadget
Select EventGadget ()
Case #gadget_affiche_texte
Creation_Fichier_Texte()
EndSelect
EndIf
Until Event = #PB_Event_CloseWindow : End
et ça:
Code : Tout sélectionner
StandardFile$ = "C:\" ; set initial file+path to display
Pattern$ = "Text (*.txt)|*.txt;All files (*.*)|*.*"
Pattern = 0 ; use the first of the three possible patterns as standard
File$ = OpenFileRequester("Please choose file to load", StandardFile$, Pattern$, Pattern)
mais comment faire pour passer de l'enreg. automatique dans dossier PB ( 1er code ) à un enreg. choisi -nom, dossier- avec la fenêtre ouvrir / sauver ?
je veux sauvegarder / recharger les sommes entrées dans les StringGadgets et le contenu d'un EditorGadget ?
merci[/quote]
Publié : lun. 07/janv./2008 14:05
par fouilloud
oups !!
j'ai mis le "open", mais mes essais avaient bien été faits avec le "save"
une journée sans m'en sortir...
Publié : lun. 07/janv./2008 17:46
par fouilloud
j'ai enfin trouvé !!!
Publié : lun. 07/janv./2008 18:04
par case
bravo

Publié : jeu. 10/janv./2008 21:43
par fouilloud
bonjour,
je me trouve bloqué:
comment faire pour sauver, puis ensuite charger le contenu des StringGadgets ?
comme je veux terminer au +vite et que je n'ai pas trop compris la méthode structure / tableau de Chris et que j'avais déja fait toute la présentation j'ai continué comme j'avais commencé.
mais est-ce possible pour la sauvegarde ?
je vois comment y arriver en construisant les stringGadgets sans #PB_Any mais cela conduit à une liste terrible de déclarations ! comment contourner le PB ? j'y ai passé beaucoup de temps mais rien !
c'est à la ligne 320.
Publié : jeu. 10/janv./2008 23:48
par fouilloud
et pourquoi cette ligne me donne:
incorrect number of parameters ?
Code : Tout sélectionner
SetGadgetText (#nourr13), StrD ( ValD ( GetGadgetText (#nourr1))+ValD ( GetGadgetText (#nourr2))+ ValD ( GetGadgetText (#nourr3))+ ValD ( GetGadgetText (#nourr4))+ ValD ( GetGadgetText (#nourr5))+ ValD ( GetGadgetText (#nourr6))+ ValD ( GetGadgetText (#nourr7))+ ValD ( GetGadgetText (#nourr8))+ ValD ( GetGadgetText (#nourr9))+ ValD ( GetGadgetText (#nourr10))+ ValD ( GetGadgetText (#nourr11))+ ValD ( GetGadgetText (#nourr12)),2)
Publié : ven. 11/janv./2008 0:39
par Backup
@fouilloud : je t'invite a reposter ton code en plusieurs morceaux si tu veux, mais entre balise s'il te plait ...
là c'etait pas possible, que je laisse un fouillis pareil !!!
tu as la possibilité aussi de mettre un lien vers ton source, a condition de pouvoir l'heberger bien sur ....
en plus un code long trouvera difficilement quelqu'un pour le debugger
car le nombre de bus augmente souvent de façon proportionelle a la longueur du code

Publié : ven. 11/janv./2008 18:01
par fouilloud
j'ai bien utilisé les balises ? peut-être des lignes trop longues, c'est quelque chose qui manque: pouvoir couper les ligne comme avec VB.
je refais un essai:...et je me rends Cpte en prévisu que c'est bien ça !!
n'ayant pas d'ébergement, je vais essayer de me faire comprendre.
j'ai des lignes de StringGadget ( j'y entre les dépenses par postes (23 x 12 mois) + total par mois + total par postes + total sur l'année + entrée du millésime année + revenu année + un EditorGadget pour du texte vrac .
voila comment sont créés les 312 StringGadget postes par mois et totaux:
Code : Tout sélectionner
y = 90 : x=220 : L=68
For a = 1 To CountString(mois$,",")+1
nourr(a)=StringGadget(#PB_Any, x,y, L,16,"",#PB_String_BorderLess|#PB_Text_Right ) ;crée StringGadgets poste nourriture
If a=12 : x=x+98 : L=90 : Else : x=x+76 : EndIf : Next : x=220 : y = y + 25 : L=68
et ça pour entrer les sommes de chaque poste chaque mois:
Code : Tout sélectionner
If EventType ()= #PB_EventType_Change ;si le contenu d'un gadget a changé
QuelGad= EventGadget () ; on regarde quel StringGadget a ete utilisé
For a= 1 To 13 ; total annuel poste "nourr"
If QuelGad=nourr(a)
SetGadgetText (nourr(13), StrD ( ValD ( GetGadgetText (nourr(1)))+ ValD ( GetGadgetText (nourr(2)))+ ...etc
EndIf
Next
idem pour tous les postes (23)
et voila mes procédures pour sauvegarder et charger le total:
Code : Tout sélectionner
Procedure sauver_tout()
mil_annee.s = SaveFileRequester("Sauver le fichier","c:\PureBasic\catalogue\","Fichiers: .fou|*.fou",0) ;sauve millésime année
CreateFile(0, mil_annee)
annee.s = GetGadgetText(#numero_annee)
WriteStringN(0,annee)
nombre_ligne = CountGadgetItems(#editeur) ; sauve le contenu texte de l'EditorGadget
For n = 0 To nombre_ligne-1
texte.s=GetGadgetItemText(#editeur,n,0)
WriteStringN(0,texte)
Next
; ICI JE VOUDRAI POUVOIR SAUVER LES SOMMES INSCRITES DANS TOUS LES STRINGGADGETS,
; POUR LES RECHARGER A LA SESSION SUIVANTE AVEC LA PROCEDURE OUVRIR_TOUT()
CloseFile(0)
EndProcedure
Procedure ouvrir_tout() ; ouvrir une année déja enregistrée
mil_annee.s = OpenFileRequester("Ouvrir le fichier", "c:\PureBasic\catalogue\", "Fichiers: .fou|*.fou", 0)
d=ReadFile(1, mil_annee)
If d
While Eof(1)=0
Text$ = Text$+ReadString(1)+Chr(13)+ Chr(10)
Wend
SetGadgetText(#numero_annee, Text$)
Text$ = Text$+ReadString(1)+Chr(13)+ Chr(10) ;COMMENT OUVRIR DANS #EDITEUR SEULEMENT SON TEXTE
SetGadgetText(#editeur, Text$) ; ET PAS EN PLUS L'ANNEE QUI VIENS D'ETRE CHARGEE DANS #NUMERO_ANNEE ?
EndIf
; ICI JE VOUDRAI POUVOIR OUVRIR LES SOMMES INSCRITES DANS TOUS LES STRINGGADGETS,
; PRECEDEMENT SAUVEGARDEES
CloseFile(1)
EndProcedure
deux PB:
1 - comment sauver/recharger chaque StringGadget des sommes postes/mois/totaux ?
2 - actuellement pour le millésime année et texte vrac (EditorGadget) c'est OK pour la sauvegarde mais au chargement le texte vrac reprends en + l'année ? bon, c'est normal comme ça, mais comment faire ?
PS - pas moyen de montrer ici des lignes + longues ?
Publié : ven. 11/janv./2008 18:05
par fouilloud
et, en plus, alors qu'en prévisu tout était OK je me rends compte qu'une fois envoyé mon texte pourtant placé avec balises et devenu diff. au point de vue des longueurs de lignes !!!
qu'est-ce que je fait de travers ?
Publié : ven. 11/janv./2008 19:25
par Backup
fouilloud a écrit :et, en plus, alors qu'en prévisu tout était OK je me rends compte qu'une fois envoyé mon texte pourtant placé avec balises et devenu diff. au point de vue des longueurs de lignes !!!
qu'est-ce que je fait de travers ?
fait tout simplement des blocs de code plus petit

Publié : ven. 11/janv./2008 19:35
par case
mon conseil pour plus de lisibilité de ton code.
utilise l'indentation pour t'y retrouver dans tes boucles tes if/endif select/case etc.
exemple
de cette maniere tu peux facilement voir si une boucle est bien fermée si chaque if est bien terminé etc... simplement en regardant plus bas dans le code si le endif est en face de son if etc...
personellement dans mes debut en programmation je ne faisais pas vraiment comme ca et depuis que je procede de la sorte j'ai echappé a un nombre incalculable de bugs
voici ton code
Code : Tout sélectionner
Procedure ouvrir_tout() ; ouvrir une année déja enregistrée
mil_annee.s = OpenFileRequester("Ouvrir le fichier", "c:\PureBasic\catalogue\", "Fichiers: .fou|*.fou", 0)
d=ReadFile(1, mil_annee)
If d
While Eof(1)=0
Text$ = Text$+ReadString(1)+Chr(13)+ Chr(10)
Wend
SetGadgetText(#numero_annee, Text$)
Text$ = Text$+ReadString(1)+Chr(13)+ Chr(10) ;COMMENT OUVRIR DANS #EDITEUR SEULEMENT SON TEXTE
SetGadgetText(#editeur, Text$) ; ET PAS EN PLUS L'ANNEE QUI VIENS D'ETRE CHARGEE DANS #NUMERO_ANNEE ?
EndIf
; ICI JE VOUDRAI POUVOIR OUVRIR LES SOMMES INSCRITES DANS TOUS LES STRINGGADGETS,
; PRECEDEMENT SAUVEGARDEES
CloseFile(1)
EndProcedure
je remarque que quand tu lis ton fichier
Code : Tout sélectionner
While Eof(1)=0
Text$ = Text$+ReadString(1)+Chr(13)+ Chr(10)
Wend
tu ajoute toute les lignes contenues dans le fichier dans la variable 'text$'
alors que si chaque ligne sauvée correspond a un gadget tu dois plutot metre le contenu de la ligne lue dans le bon gadget
donc plutôt quelque chose comme ça
et pourquoi cette ligne te donne:
incorrect number of parameters ?
SetGadgetText (#nourr13), StrD ( ValD ( GetGadgetText (#nourr1))+ValD ( GetGadgetText (#nourr2))+ ValD ( GetGadgetText (#nourr3))+ ValD ( GetGadgetText (#nourr4))+ ValD ( GetGadgetText (#nourr5))+ ValD ( GetGadgetText (#nourr6))+ ValD ( GetGadgetText (#nourr7))+ ValD ( GetGadgetText (#nourr8))+ ValD ( GetGadgetText (#nourr9))+ ValD ( GetGadgetText (#nourr10))+ ValD ( GetGadgetText (#nourr11))+ ValD ( GetGadgetText (#nourr12)),2)
regarde bien la position de tes parentheses
SetGadgetText (#nourr13),
tu ferme la fonction AVANT de lui transpmetre tout ses parametres
SetGadgetText (#nourr13,StrD (ValD (GetGadgetText(#nourr1))+ValD (GetGadgetText(#nourr2))+ValD (GetGadgetText(#nourr3))+ ValD ( GetGadgetText (#nourr4))+ ValD ( GetGadgetText (#nourr5))+ ValD ( GetGadgetText (#nourr6))+ ValD ( GetGadgetText (#nourr7))+ ValD ( GetGadgetText (#nourr8))+ ValD ( GetGadgetText (#nourr9))+ ValD ( GetGadgetText (#nourr10))+ ValD ( GetGadgetText (#nourr11))+ ValD ( GetGadgetText (#nourr12)),2))
voila j'espère que mes quelques conseils te seront utiles et n'hésite pas a demander si tu as d'autre questions

Publié : sam. 12/janv./2008 15:47
par fouilloud
le Problème ne viens pas de blocs codes trop gros mais de LONGUEUR de lignes.
j'ai des lignes qui font 490 caractères (sans espaces).VISUAL a un signes qui permets de continuer sur la ligne suivante tout en conservant le fonctionnement informatique comme une seule ligne. pas PureBasic.
SetGadgetText(nourr(13),StrD(ValD(GetGadgetText (nourr(1)))+ValD(GetGadgetText(nourr(2)))+...etc = 490 caract. comment contourner le prebl. ?
faut-il faire: balise, coller texte, balise ( ce que j'avais fait )
ou: balise, à la ligne, coller texte, à la ligne, balise ou est-ce indifférent
concernant l'enregistrement:
For mois=1 To 12
SetGadgetText(nourr(a),ReadString(1))
Next
mes StringGadget ont été construits comme ceci:
For a = 1 To CountString(mois$,",")+1
nourr(a)=StringGadget(#PB_Any, x,y, L,16,"...etc
je ne peux pas ? utiliser nourr(a) comme tu l'indique sous peine d'avoir une erreur, il faut que je reface la construction sous la forme #nourr(1) ...soit plus de 300 et je dois aussi les mettre en déclaration.
j'avais commencé comme cela et vais peut-être continuer dans cette voie plus volumineuse
merci pour tout
Publié : sam. 12/janv./2008 18:09
par case
fouilloud a écrit :le Problème ne viens pas de blocs codes trop gros mais de LONGUEUR de lignes.
j'ai des lignes qui font 490 caractères (sans espaces).VISUAL a un signes qui permets de continuer sur la ligne suivante tout en conservant le fonctionnement informatique comme une seule ligne. pas PureBasic.
SetGadgetText(nourr(13),StrD(ValD(GetGadgetText (nourr(1)))+ValD(GetGadgetText(nourr(2)))+...etc = 490 caract. comment contourner le prebl. ?
faut-il faire: balise, coller texte, balise ( ce que j'avais fait )
ou: balise, à la ligne, coller texte, à la ligne, balise ou est-ce indifférent
concernant l'enregistrement:
For mois=1 To 12
SetGadgetText(nourr(a),ReadString(1))
Next
mes StringGadget ont été construits comme ceci:
For a = 1 To CountString(mois$,",")+1
nourr(a)=StringGadget(#PB_Any, x,y, L,16,"...etc
je ne peux pas ? utiliser nourr(a) comme tu l'indique sous peine d'avoir une erreur, il faut que je reface la construction sous la forme #nourr(1) ...soit plus de 300 et je dois aussi les mettre en déclaration.
j'avais commencé comme cela et vais peut-être continuer dans cette voie plus volumineuse
merci pour tout
je ne comprend pas ton souci
tu cree tes gadgets avec ta boucle
For a = 1 To CountString(mois$,",")+1
nourr(a)=StringGadget(#PB_Any, x,y, L,16,"...etc
next
pour sauver le contenu des gadget dans un fichier
tu peux faire
Code : Tout sélectionner
sav=CreateFile(#PB_Any,"text.txt")
For a = 1 To CountString(mois$,",")+1
WriteStringN(sav,GetGadgetText(nourr(a)))
Next
CloseFile(sav)
pour charger le contenu du fichier dans tes gadgets tu peux faire la meme chose
Code : Tout sélectionner
load=ReadFile(#PB_Any,"text.txt")
For a = 1 To CountString(mois$,",")+1
SetGadgetText(nourr(a),ReadString(load))
Next
CloseFile(load)
je ne vois pas ou se situe le probleme
sauf si tu ne declare pas ton tableau comme etant global en debut de code
global dim nourr(xx)
Publié : sam. 12/janv./2008 20:18
par fouilloud
j'ai bien ajouté Global Dim nourr(13), mais seule la somme du 1er mois est enregistrée ? je vais encore regarder + tard, mais il y a autre chose qui pose probl. pour l'instant je ne vois pas comment sauver le millénaire, l'editorgadget et les sommes dans un seul fichier avec le requester qui demande un .s je continue...
rappel la construction des stringgadgets
Code : Tout sélectionner
For a = 1 To CountString(mois$,",")+1
nourr(a)=StringGadget(#PB_Any, x,y, L,16,"",#PB_String_BorderLess|#PB_Text_Right )
et la procedure sauve
Code : Tout sélectionner
Procedure sauver_tout()
; mil_annee.s = SaveFileRequester("Sauver le fichier", "c:\PureBasic\catalogue\", "Fichiers: .fou|*.fou", 0)
; CreateFile(0, mil_annee) ; sauve le millénaire de l'année
; annee.s = GetGadgetText(#numero_annee)
; WriteStringN(0,annee)
; nombre_ligne = CountGadgetItems(#editeur) ; sauve le contenu texte de l'EditorGadget
; For n = 0 To nombre_ligne-1
; texte.s=GetGadgetItemText(#editeur,n,0)
; WriteStringN(0,texte)
; Next
sav=CreateFile(#PB_Any,"Fichiers: .fou")
For a = 1 To CountString(mois$,",")+1
WriteStringN(sav,GetGadgetText(nourr(a)))
Next
; CloseFile(0)
CloseFile(sav)
EndProcedure
Publié : mer. 16/janv./2008 8:23
par fouilloud
bonjour,
terminé !!
j'ai contourné le probl. en faisant un peu différemment mais ça fonctionne parfaitement. je le reprendrai peut être + tard lorsque j'en aurai + appris.
merci à tous.