1 | unit UPersistentForm;
|
---|
2 |
|
---|
3 | {$mode delphi}
|
---|
4 |
|
---|
5 | // Date: 2010-06-01
|
---|
6 |
|
---|
7 | interface
|
---|
8 |
|
---|
9 | uses
|
---|
10 | Classes, SysUtils, Forms, URegistry, LCLIntf, Registry;
|
---|
11 |
|
---|
12 | type
|
---|
13 |
|
---|
14 | { TPersistentForm }
|
---|
15 |
|
---|
16 | TPersistentForm = class
|
---|
17 | public
|
---|
18 | RegistryContext: TRegistryContext;
|
---|
19 | procedure Load(Form: TForm);
|
---|
20 | procedure Save(Form: TForm);
|
---|
21 | constructor Create;
|
---|
22 | end;
|
---|
23 |
|
---|
24 | implementation
|
---|
25 |
|
---|
26 | { TPersistentForm }
|
---|
27 |
|
---|
28 | procedure TPersistentForm.Load(Form: TForm);
|
---|
29 | var
|
---|
30 | RestoredLeft, RestoredTop, RestoredWidth, RestoredHeight: Integer;
|
---|
31 | NormalLeft, NormalTop, NormalWidth, NormalHeight: Integer;
|
---|
32 | RestoredWindowState: TWindowState;
|
---|
33 | begin
|
---|
34 | with TRegistryEx.Create do
|
---|
35 | try
|
---|
36 | RootKey := RegistryContext.RootKey;
|
---|
37 | OpenKey(RegistryContext.Key + '\' + Form.Name, True);
|
---|
38 |
|
---|
39 | RestoredWindowState := TWindowState(ReadIntegerWithDefault('WindowState', Integer(Form.WindowState)));
|
---|
40 | if RestoredWindowState = wsMinimized then
|
---|
41 | RestoredWindowState := wsNormal;
|
---|
42 | Form.WindowState := RestoredWindowState;
|
---|
43 |
|
---|
44 | if RestoredWindowState = wsNormal then begin
|
---|
45 | NormalLeft := ReadIntegerWithDefault('Left', (Screen.Width - Form.Width) div 2);
|
---|
46 | NormalTop := ReadIntegerWithDefault('Top', (Screen.Height - Form.Height) div 2);
|
---|
47 | NormalWidth := ReadIntegerWithDefault('Width', Form.Width);
|
---|
48 | NormalHeight := ReadIntegerWithDefault('Height', Form.Height);
|
---|
49 |
|
---|
50 | if NormalLeft < Screen.DesktopLeft then
|
---|
51 | NormalLeft := Screen.DesktopLeft;
|
---|
52 | if NormalLeft > (Screen.DesktopWidth - 50) then
|
---|
53 | NormalLeft := Screen.DesktopWidth - 50;
|
---|
54 | if NormalTop < Screen.DesktopTop then
|
---|
55 | NormalTop := Screen.DesktopTop;
|
---|
56 | if NormalTop > (Screen.DesktopHeight - 50) then
|
---|
57 | NormalTop := Screen.DesktopHeight - 50;
|
---|
58 | if (NormalLeft <> Form.Left) or (NormalTop <> Form.Top) or
|
---|
59 | (NormalHeight <> Form.Height) or (NormalWidth <> Form.Width) then
|
---|
60 | Form.SetBounds(NormalLeft, NormalTop, NormalWidth, NormalHeight);
|
---|
61 | end;
|
---|
62 |
|
---|
63 | if RestoredWindowState = wsMaximized then begin
|
---|
64 | RestoredWidth := ReadIntegerWithDefault('RestoredWidth', Form.Width);
|
---|
65 | RestoredHeight := ReadIntegerWithDefault('RestoredHeight', Form.Height);
|
---|
66 | RestoredTop := ReadIntegerWithDefault('RestoredTop', (Screen.Height - Form.Height) div 2);
|
---|
67 | RestoredLeft := ReadIntegerWithDefault('RestoredLeft', (Screen.Width - Form.Width) div 2);
|
---|
68 | if (RestoredLeft <> Form.RestoredLeft) or (RestoredTop <> Form.RestoredTop) or
|
---|
69 | (RestoredHeight <> Form.RestoredHeight) or (RestoredWidth <> Form.RestoredWidth) then
|
---|
70 | Form.SetRestoredBounds(RestoredLeft, RestoredTop, RestoredWidth, RestoredHeight);
|
---|
71 | end;
|
---|
72 |
|
---|
73 | //if ReadBoolWithDefault('Visible', False) then Form.Show;
|
---|
74 | finally
|
---|
75 | Free;
|
---|
76 | end;
|
---|
77 | end;
|
---|
78 |
|
---|
79 | procedure TPersistentForm.Save(Form: TForm);
|
---|
80 | begin
|
---|
81 | with Form, TRegistryEx.Create do
|
---|
82 | try
|
---|
83 | RootKey := RegistryContext.RootKey;
|
---|
84 | OpenKey(RegistryContext.Key + '\' + Form.Name, True);
|
---|
85 | WriteInteger('Width', Form.Width);
|
---|
86 | WriteInteger('Height', Form.Height);
|
---|
87 | WriteInteger('Top', Form.Top);
|
---|
88 | WriteInteger('Left', Form.Left);
|
---|
89 | WriteInteger('WindowState', Integer(Form.WindowState));
|
---|
90 | WriteInteger('RestoredWidth', Form.RestoredWidth);
|
---|
91 | WriteInteger('RestoredHeight', Form.RestoredHeight);
|
---|
92 | WriteInteger('RestoredTop', Form.RestoredTop);
|
---|
93 | WriteInteger('RestoredLeft', Form.RestoredLeft);
|
---|
94 | WriteBool('Visible', Form.Visible);
|
---|
95 | finally
|
---|
96 | Free;
|
---|
97 | end;
|
---|
98 | end;
|
---|
99 |
|
---|
100 | constructor TPersistentForm.Create;
|
---|
101 | begin
|
---|
102 | RegistryContext.RootKey := HKEY_CURRENT_USER;
|
---|
103 | end;
|
---|
104 |
|
---|
105 | end.
|
---|
106 |
|
---|