Sauvegarde Form et composants automatiquement

Signaler
Messages postés
3809
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
25 janvier 2020
-
Cirec
Messages postés
3809
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
25 janvier 2020
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/102254-sauvegarde-form-et-composants-automatiquement

Cirec
Messages postés
3809
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
25 janvier 2020
35
re à tous,

j'ai fait une modification du code non négligeable mais vu l’enthousiasme ambiant je me demande si ça vous intéresse ?

la modification porte sur la possibilité de recharger la sauvegarde à tous moments ainsi que la possibilité de faire des sauvegardes ponctuelles et de les recharger au moment voulu (ex. sauvegarde du travail, texte en cours)

Cette modification semble évidente et simple dans sa mise en oeuvre mais ce n'est pas le cas ... si vous la tester vous risquez à 99% une violation d'accès et un plantage de l'application.

Donc si la solution vous intéresse faites le moi savoir et je posterai la mise à jour avec plaisir.

PS: juste pour information, j'ai développé deux autres méthodes dans la même lignée ...
1 qui permet de sauvegarder un composant ou plus au choix dans un fichier ini
2 qui fait la même chose que l'original mais la sauvegarde est intégrée à l'exécutable (remplacement du dfm d'origine)

Faites-moi savoir si quelque chose vous intéresse ... ou pas ^^

Bon coding à tous,
Cordialement,
@+
     
@+ Cirec la belle voix de mon filleul
Cirec
Messages postés
3809
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
25 janvier 2020
35
En fait, dans ta procedure TForm.AfterConstruction, tu détruis 2 fois les composants de la fiche en cas d'exception.

Pour résumer, seul le LoadFormFromRessources(Self) est utile dans le except de la procedure TForm.AfterConstruction.


non il faut absolument détruire tous les composants parce que si le fichier de sauvegarde est corrompu il a peut être quand même eut le temps de charger les premiers composants avant de planter et dans ce cas il faut les détruire ...

il est très important de détruire tous les composants ainsi que d'effacer le nom de la fiche avant de recharger le dfm quel qu'il soit.

donc si il y a une exception on supprime à nouveau tous les composants comme ça pas mauvaises surprises du style "un composant nommé XXX existe déjà !" ^^. ;)
Caribensila
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
13 > Cirec
Messages postés
3809
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
25 janvier 2020

Ah ok .

Ce que j'aime bien avec toi, c'est que j'apprends toujours des trucs; même pour la plus banale des opérations. ^ ^

Merci. Je vais essayer d'être aussi précautionneux que toi dorénavant.
Cirec
Messages postés
3809
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
25 janvier 2020
35
Salut Caribensila,

ça fait plaisir ;)
Dis-donc Eric, joli code; mais un peu compliqué. Pourquoi charger le .dfm d'origine à partir d'un .res ? L'utilisation de ressources me semble être superflu, non ?

Dans ta procedure TForm.AfterConstruction tu peux supprimer les 3 lignes :
for I := ComponentCount - 1 downto 0 do
        Components[I].Free;
      LoadFormFromRessources(Self);
Et donc aussi le fichier ressources et tout ce que cela implique.


1°) c'est Delphi (le compilateur) qui stock le dfm dans les ressources de l'application (ce n'est pas de mon fait) je ne fais qu'utiliser ce qui existe déjà. ;)
2°) ces 3 lignes ne s'exécutent que si un problème survient lors du chargement du dfm de sauvegarde. Si la sauvegarde est corrompue sans ces 3 lignes le programme risque de planter.
Alors je sais que je ne mets pas beaucoup de commentaires mais juste avant ces 3 lignes il y avait ceci :
      // si on a un souci
      // on charge le dfm d'origine
^^
3°) le code est en fait très simple, il ne fait qu'utiliser des méthodes mises à disposition par Delphi depuis le début. D'ailleurs d'après les conditions de dépôt de code du site je devrais le supprimer pour la raison cité juste avant. Mais vu ce qu'il apporte et que je n'ai rien trouvé d'équivalent je le laisse ;)
Quand on ne comprend pas au premier abord on a tendance à chercher la complication c'est naturel c'est votre cerveau qui vous trompe ^^ il vous dit :"non non ça ne peut pas être aussi simple" ^^ mais si :p

Voilà j'espère que c'est un peu plus claire maintenant sinon je suis là ;)

Amicalement,
@+