MÉMORISE SIMPLEMENT LA POSITION ET LA TAILLE DE VOS FENÊTRES

JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 - 25 août 2008 à 15:15
 ratatouille53 - 3 juin 2019 à 21:45
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/47735-memorise-simplement-la-position-et-la-taille-de-vos-fenetres

ratatouille53
3 juin 2019 à 21:45
bonjour il manque le fichier ParametreFenetre.dmf
impossibe de tester !!
RURUInc Messages postés 42 Date d'inscription jeudi 21 février 2008 Statut Membre Dernière intervention 21 octobre 2008
29 août 2008 à 09:52
Bonjour,

LODA je n'arrive pas à matérialiser ce que tu demandes.

Peux-tu où pouvez vous m'aider ?

Rappel de la demande de LODA :
- ....., je mettrais le nom du fichier ini en "dur" (ie: une var global) et je passerais en paramètre le nom de la section. Ce qui te permettrais de sauver plusieurs fenêtres sans te baser sur le nom. (Je crée mes fenêtre dynamiquement, ........ Après, tu peux toujours passer le nom en paramétrés... ou faire deux signatures de méthodes.

C'est faire les 2 signatures en même temps qui me pose problème.
RURUInc Messages postés 42 Date d'inscription jeudi 21 février 2008 Statut Membre Dernière intervention 21 octobre 2008
26 août 2008 à 18:23
Tout a fait cirec, je ne remettais pas du tout en doute ton travail.
Effectivement comme un gros nigo j'avais copier coller direct et j'ai laissé se {$R *.dfm} mdr.

Merci.

Je continue pour la partie choix du nom des forms
Utilisateur anonyme
26 août 2008 à 18:06
oui il y a effectivement un problème ...
mais ce n'est en aucun cas dû à l'utilisation de mon code :p
ça ressemble plus à une erreur de ta part qu'autre chose ...

ParametreFenetre.DFM est un fichier inexistant et pour cause ParametreFenetre.PAS n'est pas une TForm !!!

Retire l'instruction {$R *.dfm} de l'unité "ParametreFenetre.PAS" et tout fonctionnera normalement
RURUInc Messages postés 42 Date d'inscription jeudi 21 février 2008 Statut Membre Dernière intervention 21 octobre 2008
26 août 2008 à 16:56
J'ai fais quelque modif
1) Var Fichier_ini non public
2) Path du fichier avec le system de CIREC

Mais j'ai un probleme à la compilation il me fais bien mon exe qui marche bien. Mais j'ai quand même se message
ParametreFenetre.dfm : file no found
Bon je comprends le message, mais depuis que j'ai ajouté les UPath.pas et le .inc de cirec j'ai plus de fichier dfm. (je suis sur que vous connaissez ce genre de chose)
RURUInc Messages postés 42 Date d'inscription jeudi 21 février 2008 Statut Membre Dernière intervention 21 octobre 2008
26 août 2008 à 12:14
Salut LODA :
- Je vais regarder l'utilitaire et je vais tentez de mis inspirez, c'est qu'on oubli trop peux NOTRE EXCELLENT WINDOWS VISTA.
- Je vais ajouter cette fonctionnalité Nom en dur ou choix du nom de la fenêtre.
- Si ta fenêtre est détruite mets la procédure d'écriture dans le ondestroy ?
- ok pour les dcu

- pour l'histoire de mes composants l'utilisateur n'a nul besoin d'entrée un l'intérieur, tout ce gere à la souris. Je suis entrain de faire un logiciel Planning (je sais qu'il y en à des tas, mais comme le mien AUCUN lolol) je fignole et j'arrive à l'impression maintenant.

Merci de tes commentaires.
RURUInc Messages postés 42 Date d'inscription jeudi 21 février 2008 Statut Membre Dernière intervention 21 octobre 2008
25 août 2008 à 23:54
C'est claire sans la remarque de Cirec je n'aurai pas remarqué se bug. Le passage des paramètres par GetWindowPlacement fonction trés bien.

Merci.
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
25 août 2008 à 21:54
@RURUInc :
la proposition d'API par cirec me semble plus adaptée.
RURUInc Messages postés 42 Date d'inscription jeudi 21 février 2008 Statut Membre Dernière intervention 21 octobre 2008
25 août 2008 à 20:44
Mise à part notre différence :
Toi d'enregistre TOUT les composants d'une forme.
Si dans ma forme je créer dynamiquement des composants, cela peut devenir rapidement ingérable !! en plus si ses composants dynamiques doivent être détruit, là cela devient le gros bordel.

Pour le fichier ini il y aura largement de quoi enregistrer 1000 fenêtres étant donné que j'ai que 4 variable par clé. Et j'ai rarement vu des softs qui ont ce nombre de fenetre!!!

Pour le coter bug, il est facile d'utiliser la base de registre si tu préfère ou même un fichier xxxxxx.ini.txt
Mais au moins le Ini ou ini.txt tu peux l'ouvrir et taper en dur, si besoin.

Par rapport au titre de ma proposition :
[MÉMORISE SIMPLEMENT LA POSITION ET LA TAILLE DE VOS FENÊTRES]
Je crois que cela fonction non ?
je pense pas avoir écris
[enregistrement de tous les composants d'une fiche]

Pour Terminé :
J'aime proposé des astuces qui sont compréhensible pour tous et pas des propositions TOUT english où il te faut 3 jours pour un débutant pour comprendre tel ou tel fonction. C'est mon cas... lol

Finalement, j'ai avancé au fur et à mesure de vos remarques qui restaient dans l'esprit du titre.

Je te remercie beaucoup de tes commentaires.
Francky23012301 Messages postés 400 Date d'inscription samedi 6 août 2005 Statut Membre Dernière intervention 11 février 2016 1
25 août 2008 à 20:20
Désolé mais je ne suis pas d'accord avec toi pour différentes raisons

1)Un fichier Ini est limité à 64 Ko ce qui va te poser probleme.

2)Ton code est long alors que le mien est court : Donc tu te risques à plus de problemes, plus de beug.

3)Mon code est plus optimisé et je suis sur qu'en définitif l'utilisation des flux est plus rapide que l'écriture/lecture dans un fichier Ini.

4)La méthode que j'ai cité ne te limite pas uniquement à quelques propriétés : les couleurs, la visibilité, le alphablend ect ect sont pris en compte.

Enfin à toi de voir mais pour moi utiliser un fichier Ini pour enregistrer les parametres d'un composant, n'est pas la méthode la plus efficace
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
25 août 2008 à 18:58
L'utilisation de GetWindowPlacement était obligatoire car sinon lorsqu'on agrandit la fenêtre avec le 'Agrandir' cela ne fonctionais plus lol.

Voilà enfin la bonne explication de ce source..
RURUInc Messages postés 42 Date d'inscription jeudi 21 février 2008 Statut Membre Dernière intervention 21 octobre 2008
25 août 2008 à 18:27
... (suite)
L'idée principal, c'était de garder uniquement la position de mes fenêtre car dans mon source que je suis entrain de faire, j'en avais pas mal.
Et puis encore une fois j'ai une formprincipal avec au minimum 200 PAnel au maximum 1500.
Je vais également ajouter l'enregistrement des colonnes (taille etc..) d'un DBGrid, car j'en est également besoin.

L'utilisation de GetWindowPlacement était obligatoire car sinon lorsqu'on agrandit la fenêtre avec le 'Agrandir' cela ne fonctionais plus lol.

Et puis grace à vos commentaires j'avance.
RURUInc Messages postés 42 Date d'inscription jeudi 21 février 2008 Statut Membre Dernière intervention 21 octobre 2008
25 août 2008 à 18:16
Bonjour tout le monde.
Franky si ta form comporte 1500 composant je te raconte pas la lenteur à un moment ? non ?
Moi personnelement j'ai ma formprincipal qui peut comporter 1300 Panel.
Bref.

J'ai Amélioré mon progr pour faire appel au WindowsPlacement beaucoup plus précis si les fiche ne sont pas wsnormal.

Qu'en pensee vous ?
Francky23012301 Messages postés 400 Date d'inscription samedi 6 août 2005 Statut Membre Dernière intervention 11 février 2016 1
25 août 2008 à 18:01
Pas de blem Julio : il pensait bien faire, c'est plus maladroit qu'autre chose .... ca arrive à tout le monde.

Si on veut enregistrer les caractéristiques d'une form, voila une procédure plus simple et plus générale :

Procedure Save_FormParam(AFile:String;AForm:TForm);
Var
FS:TFileStream;
Begin
FS:=TFileStream.Create(AFile,fmCreate);
Try
FS.WriteComponent(AForm);
Finally
FS.Free;
End;
End;

{>>Procédure pour ouvrir un Mix dans un fichier Mix}
Procedure Open_FormParam(AFile:String;AForm:TForm);
Var
FS:TFileStream;
Begin
//On crée FS
FS:=TFileStream.Create(AFile,fmOpenRead);
Try
FS.ReadComponent(AForm);
AForm.Refresh;
Finally
FS.Free;
End;
End;
nethacker Messages postés 288 Date d'inscription mardi 2 mai 2006 Statut Membre Dernière intervention 12 octobre 2011
25 août 2008 à 17:37
Très utile ! pour des gestionnaires de fenêtres !
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
25 août 2008 à 17:33
Oui, bon ça vole pas très haut, je ne dis pas que la durée de vie de la source sera longue non plus, mais là, si nos commentaires peuvent l'aider un minimum, ça sera ça de pris pour lui :]
Francky23012301 Messages postés 400 Date d'inscription samedi 6 août 2005 Statut Membre Dernière intervention 11 février 2016 1
25 août 2008 à 17:27
Sans vouloir faire mon enquiquineur, quel est l'intéret de ce source ? Tu ne fais qu'enregistrer dans un fichier ini la valeur d'un integer (Form.Width par exemple).

Ce que tu fais avec une form on pourrait le faire avec un Label, un Edit, un Treeview enfin avec tout les composants qui puissent exister.

Meme si ca part d'un bon sentiment de ta part, a mon gout ca pollue plus qu'autre chose (désolé je veux pas etre dur mais bon). Meme en snippet ton source est trop limite pour etre publiable.
RURUInc Messages postés 42 Date d'inscription jeudi 21 février 2008 Statut Membre Dernière intervention 21 octobre 2008
25 août 2008 à 17:12
Merci j'ai corrigé.
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
25 août 2008 à 16:54
Les TRY sont trop haut :/

.create
try
...
except
.free
RURUInc Messages postés 42 Date d'inscription jeudi 21 février 2008 Statut Membre Dernière intervention 21 octobre 2008
25 août 2008 à 16:54
Julio Delphi :
J'ai ajouté ta remarque

Windob :
Je m'étais planté de version. Merci

Cirec :
Je vais regardé les Get et Set de windows, que je connais pas.
J'ai vidé les fichiers.
J'ai renommé le projet.
Merci
Utilisateur anonyme
25 août 2008 à 16:19
Salut,

effectivement beaucoup trop "simpliste" ...

regarde du coté de Get/SetWindowPlacement ... avec cette API tu tu récupèreras la taille et la positions mais aussi d'autres éléments comme l'état (Maximized, Minimized, Normal) ...

Et fais un peut de ménage dans ton Zip les fichiers *.ddp, *. dcu et le Desktop.ini peuvent êtres supprimés sans soucis ... et dans ton cas tu peux aussi supprimer le *.cfg et le *.dof qui ne sont pas utile à ce projet ;)

et profites en pour renommer tes composants et tes fiches "Form" et donne un nom à ton projet ...
cs_windob Messages postés 225 Date d'inscription dimanche 19 octobre 2003 Statut Membre Dernière intervention 25 août 2008
25 août 2008 à 16:15
En plus, le code affiché doit-etre une version obsolete ou alors non terminée puisque tes méthodes sont censées prendre comme 2e argument, une String de nom du fichier ini.

Ici, tu définis encore le nom de fichier en dur dans lec ode.
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
25 août 2008 à 15:15
Salut,
Un peu trop "simplement" !
Essaie avec des TRY/EXCEPT/FINALLY et utilise le mot clé WITH pour Fenetre et Fichier_ini.