Gambas France BETA


Pas de compte ? Incription

Settings.read

Ce sujet est résolu.

1
AuteurMessages
valaquarus#1 Posté le 30/5/2022 à 20:01:30
-- Unus Ex Altera --Bonsoir,
je butte sur les explications concernant settings.read, je ne vois pas très bien comment paramétrer cette commande.
J'ai fais un simple Settings.Write(Me) qui a bien fait son job. Voici le fichier de configuration obtenu au moment de l'ouverture de la Form :
1
2
3
4
5
6
7
8
[FMain]
Geometry=[0,0,805,455,0]

[orig]
Top=0
Left=0
Height=455
Width=805

1
2
3
4
5
6
7
PUBLIC SUB Form_Open()
Settings["orig/Top"] = ME.Top
Settings["orig/Left"] = ME.Left
Settings["orig/Height"] = ME.Height
Settings["orig/Width"] = ME.Width
Settings.Write(ME)
END


mais si je fais un simple Settings.Read(Me) ça ne récupère pas la géométrie enregistrée avec Write.
Est ce que j'utilise mal la commande?
Pourquoi y a t il un facteur supplémentaire dans read par rapport à write : Settings.Read?
Philippe
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.5
spheris#2 Posté le 31/5/2022 à 20:04:02
Je ne connaissais pas cette commande read, il semble qu'elle gère plusieurs données en même temps.

La méthode classique que j'utilise est :

Pour écrire dans le fichier settings:

1
2
3
4
5
6
PUBLIC SUB Form_Open()
Settings["orig/Top"] = ME.Top
Settings["orig/Left"] = ME.Left
Settings["orig/Height"] = ME.Height
Settings["orig/Width"] = ME.Width
END


et pour lire le fichier settings:

1
2
3
4
5
6
PRIVATE SUB LireData()
ME.Top = Settings["orig/Top"]
ME.Left = Settings["orig/Left"]
ME.Height = Settings["orig/Height"]
ME.Width = Settings["orig/Width"]
END




valaquarus#3 Posté le 31/5/2022 à 21:46:37
-- Unus Ex Altera --Je ne connaissais pas non plus mais en lisant la doc je suis tombé dessus.
Write récupère la géométrie de la Form et la sauve dans le fichier de configuration et la contrepartie serait de lire avec le read mais là où ça se complique c'est qu'il n'y a pas le même nombre de paramètres dans les deux commandes et aucune explication sur ceux du read.
Pour le reste je fais comme toi , de la même façon.
Philippe
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.5
linuxos#4 Posté le 1/6/2022 à 00:57:56
Un peu de sel, de poivre et la crevette sera... Bonsoir,

Voici ce que j'utilise et qui fonctionne correctement pour ma part:
1
2
3
4
5
6
7
8
9
10
11
12
PUBLIC SUB Form_Open()

ME.Center()

Settings.Read(ME)
END

PUBLIC SUB Form_Close()

Settings.Write(ME)

END


Olivier
Lorsqu'on s'occupe d'informatique, il faut faire comme les canards... Paraître calme en surface et pédaler comme un forcené par en dessous.
valaquarus#5 Posté le 1/6/2022 à 11:34:46
-- Unus Ex Altera --Bonjour Linuxos,
je ne comprend pas tu ouvres en lisant et tu fermes en écrivant.
J'ai essayé mais chez moi ça ne fonctionne pas!
Philippe
P.S. : ce n'est pas logique ces deux commandes sont faites pour récupérer les info de taille et position de la form, une pour les écrire l'autre pour les lire.
L'écriture fonctionne la lecture non.
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.5
spheris#6 Posté le 1/6/2022 à 17:03:57
Ce n'est pas très compliqué.
En fait cela ne fonctionne pas car je pense que tu fais un read avant un write.

Ne mets rien dans form_open.
Ensuite dans un clic de bouton mets setting.write.
Va ensuite scrutter le fichier settings.
Tu auras ce qui a été sauvegardé.
Ainsi tu pourras l'ouvrir avec un read la prochaine fois.
valaquarus#7 Posté le 1/6/2022 à 18:27:57
-- Unus Ex Altera --Merci spheris,
je pensais avoir fais dans le bon sens mais je vais tester ton "truc" et voir ce qui en ressort.
Mais je fais bien un write avant un read.
Philippe

P.S.: j'ai fais une modification d'un fichier test dans la forge, téléchargeable ici : http://89.234.156.109/code-189-tabstrip.html
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.5
linuxos#8 Posté le 1/6/2022 à 20:01:57
Un peu de sel, de poivre et la crevette sera... Bonjour,

En effet quelque chose a changé, du moins dans les dernieres version de Gambas 3 Dev.

Voici ce qui fonctionne maintenant (enfin pour moi)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
PUBLIC SUB Form_Open()

ME.Center() ' <= Centre la fenetre si aucune config se trouve dans le fichier .conf

Settings.Read(ME) ' <= si des valeurs existent dans le fichier de config, elles sont appliquées pour afficher la fenetre

END

PUBLIC SUB Form_Close()

Settings.Write(ME) ' <= Ecrit les nouvelles coordonnées de la fenetre courante
Settings.Save() ' <= Ici il semble qu'il faille ajouter cette instruction pour forcer a ecrire réellement sur le disque dur.

END


Olivier
Lorsqu'on s'occupe d'informatique, il faut faire comme les canards... Paraître calme en surface et pédaler comme un forcené par en dessous.
valaquarus#9 Posté le 1/6/2022 à 21:00:06
-- Unus Ex Altera --Bonsoir Linuxos,
je n'ai pas de version de dev mais la 3.17.2 toute "bête".
le Settings.Save force l'enregistrement immédiat sur le disque (visible si on ouvre le fichier de configuration), sans lui l'enregistrement est différé à la fermeture du programme.
Mon propos était d'enregistrer (physiquement ou non, par un write) les dimensions du formulaire, à l'ouverture de celui-ci, pour les récupérer plus tard (par un read). Le write fonctionne bien puisque je récupère bien la géométrie du formulaire, c'est visible dans le fichier conf par la ligne :
1
2
3
4
5
6
7
8
[FMain]
Geometry=[506,222,427,455,0]

[orig]
Left=506
Top=222
Width=427
Height=455
mais, chez moi, le read lit la géométrie du formulaire agrandi mais pas celle enregistrée avec write. La clé [orig] est enregistrée pour contrôle.
Je ne peux pas utiliser ce que tu proposes puisque tu lis le fichier de configuration à l'ouverture alors que je n'ai rien dessus (la première fois) et tu l'enregistres à la clôture, je ne peux donc pas récupérer la géométrie du formulaire pour la rappeler quand je veux (par cette méthode). Ici, j'ai trois onglets d'un tabstrip dont un (le premier) doit absolument revenir à ces dimensions de départ.
Philippe
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.5
spheris#10 Posté le 2/6/2022 à 06:35:28
valaquarus,

Je ne peux pas utiliser ce que tu proposes puisque tu lis le fichier de configuration à l'ouverture alors que je n'ai rien dessus (la première fois)


Et si tu testais l'existence du fichier settings.
S"il n'existe pas tu en crées un par défaut...


, le read lit la géométrie du formulaire agrandi


peux etre que ton souci se situe dansle dernier 0 de la geometrie. As tu essayé de mettre 1 ou 2 et de faire un read pour voir ce que cela donne ?

pour les récupérer plus tard (par un read)


un reload les relis tout de suite
valaquarus#11 Posté le 2/6/2022 à 10:04:45
-- Unus Ex Altera --Bonjour à tous,
spheris, j'ai repris ta proposition de créer un bouton, dans un des onglets de mon tabstrip.
1
2
3
PUBLIC SUB Button1_Click()
Settings.Read(ME)
END

A l'ouverture du formulaire :
1
2
3
4
5
PUBLIC SUB Form_Open()
ME.Center
'Settings.Write(Me) ' <----------------------------------------------------- écrit bien dans le fichier de configuration, ici la ligne est commentée
Settings.Save '<--------------------------------------------------------- enregistre de suite sur le disque avant fermeture
END

Quand on clique sur le bouton on lit bien ce qui a été enregistré dans le fichier de configuration par un Settings.Read (oui, c'est bien Read et non Write, ce qui explique la proposition de Linuxos) au moment de l'ouverture du formulaire même si le fichier n'est pas matérialisé sur le disque.
Après une modification quelconque de la géométrie si on clique à nouveau sur le dit bouton on récupère la dernière géométrie (après un resize quelconque par exemple).
On ne peut, par contre, pas utiliser Settings.Read dans l'évènement TabStrip_Click cela ne récupère même pas la dernière géométrie du formulaire :
1
2
3
4
5
6
PUBLIC SUB TabStrip1_Click()
SELECT CASE TabStrip1.Index
CASE 0
Settings.Read(ME) '<---------------------------------------------- ne fonctionne pas chez moi
END SELECT
END

En résumé :
Le write sert à quoi, si on ne peut pas récupérer ces info, à volonté?
le read doit être lié à l'évènement Form_State() qui est récent. Ce qui expliquerait le fonctionnement constaté dans mon exemple.
Pour ce que je voulais faire, au départ, la technique basique :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
PUBLIC SUB mesuresOrigine()
ME.Left = Settings["orig/Left"]
ME.Top = Settings["orig/Top"]
ME.Width = Settings["orig/Width"]
ME.Height = Settings["orig/Height"]
END

PUBLIC SUB Form_Open()
ME.Center
Settings["orig/Left"] = ME.Left '<---------------------------------------- On déclare les valeurs de taille et position dans le fichier de configuration
Settings["orig/Top"] = ME.Top
Settings["orig/Width"] = ME.Width
Settings["orig/Height"] = ME.Height
Settings.Save '<--------------------------------------------------------- enregistre de suite sur le disque avant fermeture
END
reste ce qu'il y a de plus simple et de plus efficace.
Philippe
P.S. : À moins que quelqu'un ne se décide à modifier la documentation, les explications de Settings.Read resterons hermétiques.

Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.5
jeanyvon#12 Posté le 2/6/2022 à 12:15:17
Gambas? Ma! Et gusto
Philippe
P.S. : À moins que quelqu'un ne se décide à modifier la documentation, les explications de Settings.Read resterons hermétiques.


Salut,
Je n'arrive pas à m'y mettre :geek: :lol!:
Vieillir? On peut retarder mais pas y échapper!
valaquarus#13 Posté le 2/6/2022 à 12:45:57
-- Unus Ex Altera --Salut JeanYvon,
lances toi à l'eau, tu ne crains rien du tout, elle est bonne!
Philippe
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.5
valaquarus#14 Posté le 2/6/2022 à 22:38:11
-- Unus Ex Altera --Bonsoir à tous,
juste un commentaire supplémentaire qui va dans le sens du lien avec l'évènement Form_State().
J'ai ajouté ceci :
1
2
3
4
5
PUBLIC SUB Form_State()
IF TabStrip1.Index = 0 THEN
Settings.Read(ME)
ENDIF
END

Et bien même si ce n'est pas trop propre cela fonctionne sauf lors d'un resize sur un des deux autres onglets, ce qui est logique puisque Form_State ne gère pas resize, pour contrer ça il faut cliquer sur le bouton que j'ai placé sur le 2eme onglet et qui ne contient comme commande que le Settings.read(Me).
Je rappelle qu'en entrée, j'ai seulement ceci :
1
2
3
4
5
PUBLIC SUB Form_Open()
ME.Center
Settings.Write(ME) ' <----------------------------------------------------- écrit bien dans le fichier de configuration
Settings.Save '<--------------------------------------------------------- enregistre de suite sur le disque
END

Philippe
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.5
1