Mémorise simplement la position et la taille de vos fenêtres

Soyez le premier à donner votre avis sur cette source.

Vue 6 377 fois - Téléchargée 653 fois

Description

Utilisation simple :
- mettre ParametreFenetre.pas dans votre projet

Dans le Show de la form
procedure TForm3.formCreate(Sender: TObject);
begin
LirePositionFenetre(Self, 'Setting');
end;

Dans le Close de la form
procedure TForm3.FormClose(Sender: TObject; var Action: TCloseAction);
begin
EcrirePositionFenetre(Self, 'Setting');
end;

Source / Exemple :


unit ParametreFenetre;
(*************************************************
Author: BuzzLeclaire, France.

E-mail:
rainconnu@free.fr

Testé avec 7.

Cet unit peut librement être utilisé ou distribué.

25.08.2008

                                                                                                      • )
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, IniFiles; Procedure LirePositionFenetre(Fenetre: TForm; NomFichier: String); Procedure EcrirePositionFenetre(Fenetre: TForm; NomFichier: String); implementation {$R *.DFM} Uses UPath; // sur une idée de Cirec Patch par CSIDL Const CSIDL_TEMPLATES = $15; // pour ne pas déclarer uses ShlObj Procedure LirePositionFenetre(Fenetre: TForm; NomFichier: String); Var Fichier_Ini: TIniFile; Begin // Path[CISDL_TEMPLATES donne le chemin MesDoc de l'utilisateur courant // On créer ou on lit le fichier Fichier_Ini := TIniFile.Create(Path[CSIDL_TEMPLATES] + NomFichier + '.ini'); Try if Fichier_Ini.SectionExists(Fenetre.Name) then begin // On récupère les données si il y en à Fenetre.Left := Fichier_Ini.ReadInteger(Fenetre.Name, 'Left', 0); Fenetre.Top := Fichier_Ini.ReadInteger(Fenetre.Name, 'Top', 0); // si la fenêtre n'ai pas taillable Height, Width reste inchangé (sauf si on touche directement le ini Fenetre.Height := Fichier_Ini.ReadInteger(Fenetre.Name, 'Height', 0); Fenetre.Width := Fichier_Ini.ReadInteger(Fenetre.Name, 'Width', 0); end; Finally Fichier_Ini.Free; end; end; Procedure EcrirePositionFenetre(Fenetre: TForm; NomFichier: String); Var Fichier_Ini: TIniFile; WindowPlacement : TWindowPlacement; Begin WindowPlacement.length:=SizeOf(WindowPlacement); WindowPlacement.flags := 0; WindowPlacement.showCmd := 1; // récupération de l'emplacement ou se situe la fiche lorsque WindowState est en wsNormal GetWindowPlacement(Fenetre.Handle,@WindowPlacement); With Fichier_ini do Begin // Path[CISDL_TEMPLATES donne le chemin MesDoc de l'utilisateur courant // On créer ou on lit le fichier Fichier_Ini := TIniFile.Create(Path[CSIDL_TEMPLATES] + NomFichier + '.ini'); Try // On alimente la section WriteInteger(Fenetre.Name, 'Left', WindowPlacement.rcNormalPosition.Left); WriteInteger(Fenetre.Name, 'Top', WindowPlacement.rcNormalPosition.Top); WriteInteger(Fenetre.Name, 'Height', WindowPlacement.rcNormalPosition.Bottom - WindowPlacement.rcNormalPosition.Top); WriteInteger(Fenetre.Name, 'Width', WindowPlacement.rcNormalPosition.Right - WindowPlacement.rcNormalPosition.Left); Finally Fichier_Ini.Free; end; end; end; end.

Conclusion :


GetWindowPlacement

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

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
-
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
-
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
cirec
Messages postés
3809
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
1 septembre 2019
32 -
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
-
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)

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.