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; typeTFormINI = class(TForm)privatePrgINI: TIniFile;FSection: String;protectedprocedure WriteInteger(Section, Ident: String; value: longint);function ReadInteger(Section, Ident: String; Default: longint): longint;publicconstructor Create(AOwner: TComponent); override;procedure CreateParams(var Params: TCreateParams); override; procedure DoShow; override;destructor Destroy; override;end; implementation constructor TFormINI.Create(AOwner: TComponent);varINIFile: string;beginINIFile := ExtractFileName(Application.EXEName);INIFile := ChangeFileExt(INIFile, '.INI');PrgINI := TIniFile.Create(INIFile);inherited Create(AOwner);end; procedure TFormINI.CreateParams(var Params: TCreateParams);begininherited CreateParams(Params);with Params dobeginFSection := StrPas(Caption);Y := ReadInteger('', 'Top', 0);X := ReadInteger('', 'Left', 0);Width := ReadInteger('', 'Width', Width);Height := ReadInteger('', 'Height', Height);end;end; procedure TFormINI.DoShow;varaWindowState: integer;beginaWindowState := ReadInteger('', 'WindowState', 0);Case aWindowState of0: WindowState := wsNormal;1: WindowState := wsMinimized;2: WindowState := wsMaximized;end;inherited DoShow;end; procedure TFormINI.WriteInteger(Section, Ident: String; value: longint);beginif Section = '' thenPrgINI.WriteInteger(FSection, Ident, value)elsebeginPrgINI.WriteInteger(Section, Ident, value);FSection := Section;end;end; destructor TFormINI.Destroy;beginif WindowState = wsNormal thenbeginWriteInteger('', 'Top', Top);WriteInteger('', 'Left', Left);end;WriteInteger('', 'Width', Width);WriteInteger('', 'Height', Height);Case WindowState ofwsNormal: 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;beginif Section = '' thenResult := PrgINI.ReadInteger(FSection, Ident, Default)elsebeginResult := PrgINI.ReadInteger(Section, Ident, Default);FSection := Section;end;end; end. |
Nick Hodges
Monterey, CA [000449]