Sauvegarde Form et composants automatiquement

Cirec 4197 Messages postés vendredi 23 juillet 2004Date d'inscriptionModérateurStatut 12 janvier 2018 Dernière intervention - 5 nov. 2017 à 22:29 - Dernière réponse : Cirec 4197 Messages postés vendredi 23 juillet 2004Date d'inscriptionModérateurStatut 12 janvier 2018 Dernière intervention
- 26 nov. 2017 à 19:02
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

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

Afficher la suite 
Cirec 4197 Messages postés vendredi 23 juillet 2004Date d'inscriptionModérateurStatut 12 janvier 2018 Dernière intervention - 13 nov. 2017 à 10:27
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,
@+
Caribensila 2671 Messages postés jeudi 15 janvier 2004Date d'inscription 18 janvier 2018 Dernière intervention > Cirec 4197 Messages postés vendredi 23 juillet 2004Date d'inscriptionModérateurStatut 12 janvier 2018 Dernière intervention - 13 nov. 2017 à 16:52
Merci pour ton explication.
J'ai capté !

J'ai été troublé parce que je me demandais pourquoi tu détruisais les composants de la fiche, PUIS tu chargeais le dfm. Ca me semblait contradictoire. ^ ^
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.

Amitiés à tous.
Cirec 4197 Messages postés vendredi 23 juillet 2004Date d'inscriptionModérateurStatut 12 janvier 2018 Dernière intervention - 13 nov. 2017 à 20:05
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 2671 Messages postés jeudi 15 janvier 2004Date d'inscription 18 janvier 2018 Dernière intervention > Cirec 4197 Messages postés vendredi 23 juillet 2004Date d'inscriptionModérateurStatut 12 janvier 2018 Dernière intervention - 14 nov. 2017 à 09:52
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 4197 Messages postés vendredi 23 juillet 2004Date d'inscriptionModérateurStatut 12 janvier 2018 Dernière intervention - 26 nov. 2017 à 19:02
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
Commenter la réponse de Cirec

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.