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
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.