Sauvegarde Form et composants automatiquement

Soyez le premier à donner votre avis sur cette source.

Vue 3 084 fois - Téléchargée 591 fois

Description

démo de sauvegarde d'une fiche (position et taille) et son contenu (composants
et toutes leurs propriétés) tout comme Delphi avec le *.dfm
afin de les restituer au prochain lancement de l'application. Cool! non?
Le tout automatiquement et en toute transparence.


*


*
                  • ATTENTION ***********

à n'utiliser qu'en fin de dev sans quoi vous risquez de ne pas voir
vos changement (Design)

ce code est libre d'utilisation tant que son auteur est cité
il est toute fois livré sans aucune garantie que ce soit


Démarrer l'application charger une image
charger un fichier texte changer la fonte et la taille
faire une recherche
puis redimensionner la fiche.

Fermer l'application puis redémarrer la ... enjoy ;-)

ps: Testé ok D7 à Tokyo 10.2

Mise à jour:
- Ajout d'une version "speciale" Delphi 7

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
3809
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
18 mai 2020
29
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
Messages postés
3809
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
18 mai 2020
29
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à !" ^^. ;)
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
13 >
Messages postés
3809
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
18 mai 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.
Messages postés
3809
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
18 mai 2020
29
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,
@+
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
13 >
Messages postés
3809
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
18 mai 2020

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.
Afficher les 12 commentaires

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.