Советы по 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;
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]



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