Замена Form на FormIni

{codecitation class=»brush: pascal; gutter: false;» width=»600px»}

Автор: Nick Hodges (Monterey, CA)

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.

{/codecitation}

Добавить комментарий