Текущий архив: 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.48 MB
Время: 0.005 c