Sauvegarde d'options interne au programme (2)

Brodeur - 25 oct. 2000 à 23:52
 Marc - 20 avril 2001 à 05:51
Merci de vos reponse ( voir un peu avant sur ce forum ) mais pourriez vous m'expliquer clairement comment faire pour enregistrer des options dans un fichiers, les options etant des optionbuttons (les trucs ronds, qu'on peut cocher) car je n'ai jamais fait ca et je n'ai pas la moindre idees de comment faire et je trouve rien dans l'aide de VB6
Merci beaucoup.
Brodeur

3 réponses

Salut,

Ben mon petit Louis (tu permets que je t'appelle Louis ?), on n'a pas fini... mais on va essayer quand même ! Je vais citer un certains nombre de termes (simples) qu'il te faut connaître. Ils seront entre doubles guillemets (ou doubles quotes, en rosbeef...). Si tu maîtrises pas, il faut te renseigner...

Premier chapitre : Les radiosButtons

- Les radiosButtons (ou Boutons d'option) ont un fonctionnement particulier. Ils réagissent par groupe à l'intérieur d'un "conteneur", à l'inverse des "checkboxes", qui ont un fonctionnement indépendant les unes des autres. Ces conteneurs peuvent être des "Frames", des "Forms" (guillemets un peu osés, là), "PictureBoxes", etc...
- Cela veut dire que si l'un d'eux est "coché" ("VBChecked") par l'utilisateur, c'est à dire qu'il prend la valeur "True", les autres RadiosButtons seront tous "non cochés" ("VBUnchecked"), et si l'un deux l'était avant l'action utilisateur, il passera de "VBChecked" à "VBUnchecked" avec déclenchement de son propre "événement Click" correspondant.
Ce fonctionnement est vrai dans le "conteneur" quelque soit le nom ("Name") des RadiosButtons, qu'ils fassent ou non partie d'un "groupe de contrôles". De même, ou plutôt à contrario, des radiosButtons de même nom (du même "groupe"), répartis dans des "conteneurs" différents, auront des comportements liés dans chaque conteneur, mais indépendants d'un conteneur à l'autre.

Enfin, pour des raisons de clareté et de traitement informatique (simplifié ?), il est indispensable de rassembler logiquement les radiosButtons liés à des valeurs différentes d'un même concept non seulement dans une "Frame" particulière, mais aussi sous un même nom, et à les différencier avec un "index différent.
Exemple : Dans la "Form" Individu, on trouve deux "Frames", la Frame 'Etat Civil', qui contient 4 radioButtons, de libellés 'Célibataire', 'Marié(e)', 'Veuf(ve)' et 'Divorcé(e)', dont les noms sont OptEtatCivil(0) à OptEtatCivil(3), et la Frame 'Genre', contenant deux RadiosButtons 'Masculin' et 'Féminin', appelés OptSexe(0) et OptSexe(1).

C'est clair ?

Deuxième chapitre : Ton problème de sauvegarde

Avant d'attaquer, on supposera que :

1 - tu as choisi le type de fichier de stockage et le mode d'accès (voir discussions précédentes entre Base de registre, fichier .ini, ...). De ce que je comprend, on travaille ici avec de simples fichiers .txt, séquentiels Ascii.

2 - tu sais comment choisir un fichier par le composant CommonDialog ou autre, que tu sais où stocker ce fichier, vérifier que tu n'écrases pas un autre fichier déjà présent, etc... Bref, tout ça pour dire que, pour la suite de ma (longue) réponse, le fichier s'appelera MesOpt.dat et sera stocké dans le répertoire courant de l'application ("app.path"). Tu feras attention aux différences entre le mode "Run-Time" et le mode "Design".

3 - Les options sont lues dans le "Load" de la première Form, (Form1) et sauvegardées dans l' "unload" de la même. Il y a deux groupes d'options, correspondants, à l'exemple cité en 1 (Etat civil et Genre).

4 - Saches que, dans ce contexte, en environnement multi-utilisateur, si l'application est sur un serveur ou si le poste de travail sert à plusieurs personnes de logins différents, il y aura UN SEUL FICHIER commun a TOUS LES UTILISATEURS. On préfèrera dans ce cas un stockage dans la base de registre, clé HKEY_CURRENT_USER, voir pour cela SaveSettings et GetSettings (c'est une autre histoire).

5 - Un petit exemple, (enfin ! diras-tu...)

Attention, les contrôles effectués et la gestion d'erreurs sont minimalistes.

Tu peux, après avoir fais tourner le programme, retrouver et éditer le fichier des options via Vindoz, avec son éditeur (Notepad, Write, etc...)

Option Explicit
Private Sub cmdQuitter_Click()
' pour quitter l'application
Unload Me
End Sub

Private Sub Form_Load()
Dim strFichierOption As String, intNoFichier As Integer, strNomFichier As String
Dim strOpt As String, intNoOpt As Integer
On Error GoTo Erreur_Load
strNomFichier = "MesOpt.dat"
strFichierOption = App.Path & "" & strNomFichier
' on regarde si le fichier de sauvegarde n'existe pas
If Dir(strFichierOption) = "" Then
' il existe pas, alors on prévient
MsgBox "Fichier d'option " & strNomFichier & " introuvable dans " & App.Path & " Il sera créé par ce programme"
intNoFichier = FreeFile
' on cree le fichier avec les options par défaut, à savoir Célibataire, masculin
Open strFichierOption For Output As #intNoFichier
Write #intNoFichier, "EtatCivil", 0 'on aurait pu utiliser Input #intNoFichier
Write #intNoFichier, "Genre", 0
Close #intNoFichier
End If
' on est sûr qu'il existe, donc on le lit...
intNoFichier = FreeFile
Open strFichierOption For Input As #intNoFichier
Input #intNoFichier, strOpt, intNoOpt
' Traitement du résultat la lecture
Call pcdTraiterLectureOption(strOpt, intNoOpt)
Input #intNoFichier, strOpt, intNoOpt
' Traitement du résultat la lecture
Call pcdTraiterLectureOption(strOpt, intNoOpt)
Resume_Load:
Close #intNoFichier
Exit Sub
Erreur_Load:
MsgBox "Erreur au chargement de l'application : " & Err & "- " & Error
GoTo Resume_Load
End Sub

Private Sub pcdTraiterLectureOption(ByVal pstrOpt As String, ByVal pintNoOpt As Integer)
Select Case pstrOpt
Case "EtatCivil"
If pintNoOpt < 0 Or pintNoOpt > 3 Then
' valeur incorrecte !!!
MsgBox "Paramètre Etat Civil " & pintNoOpt & " en dehors des bornes autorisées"
Exit Sub
Else
' on positionne le bon radioButton
' dans notre cas, l'index du radioButton est egal à la valeur de l'option correspondante
' ca aide bien mais c'est pas obligatoire !
OptEtatCivil(pintNoOpt).Value = True
End If
Case "Genre"
If pintNoOpt < 0 Or pintNoOpt > 1 Then
' valeur incorrecte !!!
MsgBox "Paramètre Genre " & pintNoOpt & " en dehors des bornes autorisées"
Exit Sub
Else
' on positionne le bon radioButton
OptSexe(pintNoOpt).Value = True
End If
Case Else 'on trouve un autre parametre que le genre ou l'état civil...
MsgBox "Paramètre " & pstrOpt & " non traité"
End Select
End Sub

Private Sub Form_Unload(Cancel As Integer)
' sauvegarde des options
Dim strFichierOption As String, intNoFichier As Integer, strNomFichier As String
On Error GoTo Erreur_UnLoad
strNomFichier = "MesOpt.dat"
strFichierOption = App.Path & "" & strNomFichier
intNoFichier = FreeFile
' on se fout de savoir si le fichier existe encore ou pas (on peut l'avoir supprimé entre temps)
' car on recree tout systématiquement
Open strFichierOption For Output As #intNoFichier
Write #intNoFichier, "EtatCivil", fctEtatCivil
Write #intNoFichier, "Genre", fctSexe
Resume_UnLoad:
Close #intNoFichier
Exit Sub
Erreur_UnLoad:
MsgBox "Erreur à la fin de l'application : " & Err & "- " & Error
GoTo Resume_UnLoad
End Sub

Private Function fctEtatCivil() As Integer
Dim intBoucle As Integer
For intBoucle = 0 To 3 fctEtatCivil fctEtatCivil - intBoucle * (OptEtatCivil(intBoucle).Value True)
Next intBoucle
End Function

Private Function fctSexe() As Integer
Dim intBoucle As Integer
For intBoucle = 0 To 1 fctSexe fctSexe - intBoucle * (OptSexe(intBoucle).Value True)
Next intBoucle
End Function

Voilà, c'était un peu long. J'espère que ca te va !!!

Amitiés - Renaud -
0
Merci beaucoup de cette reponse absolument formidable et incroyablement longue. C'est vraiment super sympa d'avoir pris le temps et en plus , c'est super bien explique. Je crois que maintenant, j'aurai plus de probleme. Si toutefois, j'avais encore un probleme ( ce dont je dois a moins que je sois vraiment mauvais, je te le ferai savoir.
Encore mille merci.
Brodeur
0
Bonjour,
C´est, c´est rare de trouver une réponse détaillée et EN FRANÇAIS CORRECT ,(ce qui est très rare aussi sur ce site francophone).
Je continue à croire que ce genre de réponses mériterait d´être rassemblé sous forme d´un "tutorial" -dynamique.
Tout le monde y gagnerait.
Merci pour l´exemple
Bien à toi,
Marc
0
Rejoignez-nous