Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

Видеокурс программиста и крэкера 5D 2O17
(актуальность: октябрь 2O17)
Свежие инструменты, новые видеоуроки!

  • 400+ видеоуроков
  • 800 инструментов
  • 100+ свежих книг и статей

УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

БОЛЬШОЙ FAQ ПО DELPHI



Замена Form на FormIni

Автор: Nick Hodges (Monterey, CA)


 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.
 




<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ



Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS