unit Formini;
{$IFDEF Production}
{$S-,R-,D-,L-,W-}
{$ENDIF}
{
TFormINI новая замена TForm, умеющая автоматически сохранять и восстанавливать
значения свойств Top, Left, Height, Width и WindowState
из программного INI-файла без какого-то либо программирования.
Код берет имя выполняемого файла из Application.EXEName и меняет
расширение на .INI.
В качестве имени секции при хранении величин в INI-файле,
TFormINI использует заголовок формы.
Просто замените все существующие объявления класса TForm на TFormINI,
и TFormINI позаботится обо всем остальном (в пределах функциональности).
Теперь ваши формы будут такие же, как и при их закрытии.
TMyForm = class(TForm) -> TMyForm = class(TFormINI)
}
interface
uses InIFiles, Forms, Controls, SysUtils, WinTypes, Classes;
type
TFormINI = class(TForm)
private
PrgINI: TIniFile;
FSection: String;
protected
procedure WriteInteger(Section, Ident: String; value: longint);
function ReadInteger(Section, Ident: String; Default: longint): longint;
public
constructor Create(AOwner: TComponent); override;
procedure CreateParams(var Params: TCreateParams); override;
procedure DoShow; override;
destructor Destroy; override;
end;
implementation
constructor TFormINI.Create(AOwner: TComponent);
var
INIFile: string;
begin
INIFile := ExtractFileName(Application.EXEName);
INIFile := ChangeFileExt(INIFile, '.INI');
PrgINI := TIniFile.Create(INIFile);
inherited Create(AOwner);
end;
procedure TFormINI.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
with Params do
begin
FSection := StrPas(Caption);
Y := ReadInteger('', 'Top', 0);
X := ReadInteger('', 'Left', 0);
Width := ReadInteger('', 'Width', Width);
Height := ReadInteger('', 'Height', Height);
end;
end;
procedure TFormINI.DoShow;
var
aWindowState: integer;
begin
aWindowState := ReadInteger('', 'WindowState', 0);
Case aWindowState of
0: WindowState := wsNormal;
1: WindowState := wsMinimized;
2: WindowState := wsMaximized;
end;
inherited DoShow;
end;
procedure TFormINI.WriteInteger(Section, Ident: String; value: longint);
begin
if Section = '' then
PrgINI.WriteInteger(FSection, Ident, value)
else
begin
PrgINI.WriteInteger(Section, Ident, value);
FSection := Section;
end;
end;
destructor TFormINI.Destroy;
begin
if WindowState = wsNormal then
begin
WriteInteger('', 'Top', Top);
WriteInteger('', 'Left', Left);
end;
WriteInteger('', 'Width', Width);
WriteInteger('', 'Height', Height);
Case WindowState of
wsNormal: WriteInteger('', 'WindowState', 0);
wsMinimized: WriteInteger('', 'WindowState', 1);
wsMaximized: WriteInteger('', 'WindowState', 2);
end;
PrgINI.Free;
inherited Destroy;
end;
function TFormINI.ReadInteger(Section, Ident: String; Default: longint): longint;
begin
if Section = '' then
Result := PrgINI.ReadInteger(FSection, Ident, Default)
else
begin
Result := PrgINI.ReadInteger(Section, Ident, Default);
FSection := Section;
end;
end;
end.