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)
}interfaceuses InIFiles, Forms, Controls, SysUtils, WinTypes, Classes;
type
TFormINI = class(TForm)
private
PrgINI: 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;
implementationconstructor 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);
begininherited CreateParams(Params);
with Params dobegin
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);
beginif Section = '' then
PrgINI.WriteInteger(FSection, Ident, value)
elsebegin
PrgINI.WriteInteger(Section, Ident, value);
FSection := Section;
end;
end;
destructor TFormINI.Destroy;
beginif WindowState = wsNormal thenbegin
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;
beginif Section = '' then
Result := PrgINI.ReadInteger(FSection, Ident, Default)
elsebegin
Result := PrgINI.ReadInteger(Section, Ident, Default);
FSection := Section;
end;
end;
end.
Here is the translation of the content into Russian:
Модифицирован код с заменой Form на FormIni:
unitFormini;{$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)}
Замена класса TForm на TFormINI позволяет автоматически сохранять и восстанавливать значения свойств Top, Left, Height, Width и WindowState из программного INI-файла без программирования.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.