1 | unit UAutoRegistry;
|
---|
2 |
|
---|
3 | interface
|
---|
4 |
|
---|
5 | uses
|
---|
6 | Windows, Registry;
|
---|
7 |
|
---|
8 | type
|
---|
9 | TAutoRegistry = class
|
---|
10 | private
|
---|
11 | FItems: array of record
|
---|
12 | Nazev: string;
|
---|
13 | Typ: Integer;
|
---|
14 | Data: Pointer;
|
---|
15 | end;
|
---|
16 | FPath: string;
|
---|
17 | public
|
---|
18 | Update: Boolean;
|
---|
19 | constructor Create(Path: string);
|
---|
20 | procedure SaveToRegistry; // Uloí vechny promìnné do registrù
|
---|
21 | procedure LoadFromRegistry; // Naète promìnné z registrù
|
---|
22 | // Metody vloí do vnitøní tabulky odkaz na zadanou promìnnou, která má být uchována v registrech
|
---|
23 | procedure Include(NovyNazev: string; var NovaData: string; DefaultValue: string); overload;
|
---|
24 | procedure Include(NovyNazev: string; var NovaData: Integer; DefaultValue: Integer); overload;
|
---|
25 | procedure Include(NovyNazev: string; var NovaData: Boolean; DefaultValue: Boolean); overload;
|
---|
26 | procedure Include(NovyNazev: string; var NovaData: Real; DefaultValue: Real); overload;
|
---|
27 | procedure Delete;
|
---|
28 | destructor Destroy; override; // Uloí promìnné a uvolní se
|
---|
29 | end;
|
---|
30 |
|
---|
31 | implementation
|
---|
32 |
|
---|
33 | constructor TAutoRegistry.Create(Path: string);
|
---|
34 | begin
|
---|
35 | FPath:= Path;
|
---|
36 | end;
|
---|
37 |
|
---|
38 | destructor TAutoRegistry.Destroy;
|
---|
39 | //var
|
---|
40 | // I: Integer;
|
---|
41 | begin
|
---|
42 | // for I:= 0 to High(FItems) do FItems[I].Free;
|
---|
43 | end;
|
---|
44 |
|
---|
45 | procedure TAutoRegistry.LoadFromRegistry;
|
---|
46 | var
|
---|
47 | I: Integer;
|
---|
48 | begin
|
---|
49 | with TRegistry.Create do begin
|
---|
50 | try
|
---|
51 | RootKey := HKEY_CURRENT_USER;
|
---|
52 | if not KeyExists(FPath) then SaveToRegistry;
|
---|
53 | OpenKey(FPath, True);
|
---|
54 | for I:= 0 to High(FItems) do with FItems[I] do begin
|
---|
55 | if Typ=1 then begin
|
---|
56 | if ValueExists(Nazev) and not Update then Integer(Data^):= ReadInteger(Nazev)
|
---|
57 | else WriteInteger(Nazev, Integer(Data^));
|
---|
58 | end else if Typ=3 then begin
|
---|
59 | if ValueExists(Nazev) and not Update then Boolean(Data^):= ReadBool(Nazev)
|
---|
60 | else WriteBool(Nazev,Boolean(Data^));
|
---|
61 | end else if Typ=4 then begin
|
---|
62 | if ValueExists(Nazev) and not Update then Real(Data^):= ReadFloat(Nazev)
|
---|
63 | else WriteFloat(Nazev,Real(Data^));
|
---|
64 | end else if Typ=2 then begin
|
---|
65 | if ValueExists(Nazev) and not Update then string(Data^):= ReadString(Nazev)
|
---|
66 | else WriteString(Nazev,string(Data^));
|
---|
67 | end;
|
---|
68 | end;
|
---|
69 | finally
|
---|
70 | Free;
|
---|
71 | end;
|
---|
72 | end;
|
---|
73 | end;
|
---|
74 |
|
---|
75 | procedure TAutoRegistry.SaveToRegistry;
|
---|
76 | var
|
---|
77 | I: Integer;
|
---|
78 | begin
|
---|
79 | with TRegistry.Create do begin
|
---|
80 | try
|
---|
81 | RootKey := HKEY_CURRENT_USER;
|
---|
82 | OpenKey(FPath, True);
|
---|
83 | for I:= 0 to High(FItems) do with FItems[I] do begin
|
---|
84 | if Typ=1 then WriteInteger(Nazev,Integer(Data^)) else
|
---|
85 | if Typ=3 then WriteBool(Nazev,Boolean(Data^)) else
|
---|
86 | if Typ=4 then WriteFloat(Nazev,real(Data^)) else
|
---|
87 | if Typ=2 then WriteString(Nazev,string(Data^));
|
---|
88 | end;
|
---|
89 | finally
|
---|
90 | Free;
|
---|
91 | end;
|
---|
92 | end;
|
---|
93 | end;
|
---|
94 |
|
---|
95 | procedure TAutoRegistry.Include(NovyNazev: string; var NovaData: string; DefaultValue: string);
|
---|
96 | begin
|
---|
97 | if not Update then NovaData:= DefaultValue;
|
---|
98 | SetLength(FItems,Length(FItems)+1);
|
---|
99 | with FItems[High(FItems)] do begin
|
---|
100 | Nazev:= NovyNazev;
|
---|
101 | Data:= Pointer(@NovaData);
|
---|
102 | Typ:= 2;
|
---|
103 | end;
|
---|
104 | end;
|
---|
105 |
|
---|
106 | procedure TAutoRegistry.Include(NovyNazev: string; var NovaData: Integer; DefaultValue: Integer);
|
---|
107 | begin
|
---|
108 | if not Update then NovaData:= DefaultValue;
|
---|
109 | SetLength(FItems,Length(FItems)+1);
|
---|
110 | with FItems[High(FItems)] do begin
|
---|
111 | Nazev:= NovyNazev;
|
---|
112 | Data:= Pointer(@NovaData);
|
---|
113 | Typ:= 1;
|
---|
114 | end;
|
---|
115 | end;
|
---|
116 |
|
---|
117 | procedure TAutoRegistry.Include(NovyNazev: string; var NovaData: Boolean; DefaultValue: Boolean);
|
---|
118 | begin
|
---|
119 | if not Update then NovaData:= DefaultValue;
|
---|
120 | SetLength(FItems,Length(FItems)+1);
|
---|
121 | with FItems[High(FItems)] do begin
|
---|
122 | Nazev:= NovyNazev;
|
---|
123 | Data:= Pointer(@NovaData);
|
---|
124 | Typ:= 3;
|
---|
125 | end;
|
---|
126 | end;
|
---|
127 |
|
---|
128 | procedure TAutoRegistry.Include(NovyNazev: string; var NovaData: Real; DefaultValue: Real);
|
---|
129 | begin
|
---|
130 | if not Update then NovaData:= DefaultValue;
|
---|
131 | SetLength(FItems,Length(FItems)+1);
|
---|
132 | with FItems[High(FItems)] do begin
|
---|
133 | Nazev:= NovyNazev;
|
---|
134 | Data:= Pointer(@NovaData);
|
---|
135 | Typ:= 4;
|
---|
136 | end;
|
---|
137 | end;
|
---|
138 |
|
---|
139 | procedure TAutoRegistry.Delete;
|
---|
140 | begin
|
---|
141 | with TRegistry.Create do begin
|
---|
142 | try
|
---|
143 | RootKey := HKEY_CURRENT_USER;
|
---|
144 | DeleteKey(FPath);
|
---|
145 | finally
|
---|
146 | Free;
|
---|
147 | end;
|
---|
148 | end;
|
---|
149 | SetLength(FItems,0);
|
---|
150 | //LoadFromRegistry;
|
---|
151 | end;
|
---|
152 |
|
---|
153 | end.
|
---|