Советы по Delphi

         

Замена Form на FormIni


    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]



Содержание раздела