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. |
Nick Hodges
Monterey, CA
[000449]