Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.01.18;
Скачать: CL | DM;

Вниз

Сохранение геометрических параметров формы   Найти похожие ветки 

 
NieL ©   (2008-12-03 11:51) [0]

Хочу написать класс-наследник от TForm с возможностью восстановления/сохранения геометрических параметров. Как вариант рассматриваю сохранение либо в Ini-файл, либо в опциональый поток, самого Exe, либо в реестр. Какой из вариантов вы посоветуете, и есть ли минусы при сохранении в опциональный поток Exe, помимо того что файловая система должна быть NTFS.


 
Сергей М. ©   (2008-12-03 11:56) [1]


> Какой из вариантов вы посоветуете


Любой кроме "самосохранения", ибо блажь.


 
clickmaker ©   (2008-12-03 12:01) [2]

> и есть ли минусы при сохранении в опциональный поток Exe

а есть ли плюсы?


 
sniknik ©   (2008-12-03 12:54) [3]

а что такое "геометрические параметры"? их много? и зачем их сохранять если достаточно всего 4х параметров - лево, сверху, ширина, высота. все что внутри и так по ним подстраивается (если с якорями сделано), то что не подстраивается (сплитеры, поля в гридах), ну их приходится дополнительно, и уже лучше в них (особенно для грида), а не в форме, обрабатывать.

как то делал подобное, сохранял в реестр, в текущего юзера, чем кстати автоматически делится на разные настройки для разных юзеров.

> в опциональный поток Exe
не усложняй... наоборот пытайся упростить.


 
Jeer ©   (2008-12-03 14:32) [4]


> Как вариант рассматриваю сохранение либо в Ini-файл,


Многие, многие лета именно так и создаются у меня проекты.
Удобно, практично, ненавязчиво :)
Туда же пишутся многие другие настройки от контролов ( RX не пользуюсь )
Варианты местоположения ini зависят от особенностей проекта - каталог программы, каталог пользователя..


 
Поросенок Винни-Пух ©   (2008-12-03 14:38) [5]

Хочу написать класс-наследник от TForm с возможностью восстановления/сохранения геометрических параметров.

Теперь представь:
создал потомка TForm, который умеет что-то там записывать о себе на носитель.
Идем дальше и наследуемся от этой формы.
И что получается? Догадался?


 
Jeer ©   (2008-12-03 15:18) [6]

Интересно, что такого военного случится ? :)


 
NieL ©   (2008-12-03 15:36) [7]

Вот накатал класс-наследник TForm с сохраннием Left, Top, Width, Height  в опциональный поток Exe. Тестил несколько часов и ничего ошибочного пока не нашел. И чем не вариант?


unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

const
 const_Path_OptionalStream = "%s : %s _ %s";
 const_name_LeftParam = "Left";
 const_name_TopParam = "Top";
 const_name_WidthParam = "Width";
 const_name_HeightParam = "Height";

type
 TPosRestoreForm = class(TForm)
 public
   constructor Create(
     AOwner: Tcomponent); override;
   destructor Destroy; override;
 end;

 { TEST FORM }
 // -------------------------------------------------

 Tform_Main = class(TPosRestoreForm)
 private
   { Private declarations }
 public
   { Public declarations }
 end;

 // -------------------------------------------------

var
 form_Main: Tform_Main;

implementation

{$R *.dfm}

{ TPosRestorerForm }

constructor TPosRestoreForm.Create(AOwner: TComponent);

 procedure GetInteger(var Val: Integer; _Name: string; Default: Integer);
 var
   F: TFileStream;
   P: PByte;
 begin
   try
     P := @Val;
     F := TFileStream.Create(_Name, fmOpenRead or fmShareDenyNone);
     try
       F.ReadBuffer(P^, SizeOf(Integer));
     finally
       F.Free;
     end;
   except
     Val := Default;
   end;
 end;

var
 L, T, W, H, Def: Integer;
begin
 inherited;
 Def := Low(Integer);

 GetInteger(L, Format(const_Path_OptionalStream, [ParamStr(0),
   Name, const_name_LeftParam]), Low(Integer  ));
 if L <> Def then
   Left := L;

 GetInteger(T, Format(const_Path_OptionalStream, [ParamStr(0),
   Name, const_name_TopParam]), Low(Integer   ));
 if T <> Def then
   Top := T;

 GetInteger(W , Format(const_Path_OptionalStream, [ParamStr(0),
   Name, const_name_WidthParam]), Low(Integer ));
 if W <> Def then
   Width := W;

 GetInteger(H, Format(const_Path_OptionalStream, [ParamStr(0),
   Name, const_name_HeightParam]), Low(Integer));
 if H <> Def then
   Height := H;
end;

destructor TPosRestoreForm.Destroy;

 procedure SetInteger(Val: Integer; _Name: string);
 var
   F: TFileStream;
   P: PByte;
 begin
   DeleteFile(_Name);
   F := TFileStream.Create(_Name, fmCreate);
   try
     P := @Val;
     F.WriteBuffer(P^, SizeOf(Integer));
   finally
     F.Free;
   end;
 end;

begin
 SetInteger(Self.Left  , Format(const_Path_OptionalStream,
   [ParamStr(0), Self.Name, const_name_LeftParam   ]));

 SetInteger(Self.Top, Format(const_Path_OptionalStream,
   [ParamStr(0), Self.Name, const_name_TopParam    ]));

 SetInteger(Self.Width , Format(const_Path_OptionalStream,
   [ParamStr(0), Self.Name, const_name_WidthParam  ]));

 SetInteger(Self.Height, Format(const_Path_OptionalStream,
   [ParamStr(0), Self.Name, const_name_HeightParam ]));
 inherited;
end;

end.



Страницы: 1 вся ветка

Текущий архив: 2009.01.18;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.014 c
15-1227298788
DillerXX
2008-11-21 23:19
2009.01.18
Активное шумоподавление


2-1228510663
Lamer6666
2008-12-05 23:57
2009.01.18
M2M приложение


2-1228284286
Степа
2008-12-03 09:04
2009.01.18
Процессы Windows


15-1225760423
borisich
2008-11-04 04:00
2009.01.18
А меня дочка родилась !!!!!!!!!!!


15-1227442297
Slider007
2008-11-23 15:11
2009.01.18
С днем рождения ! 23 ноября 2008 воскресенье