source: trunk/Packages/fcl-registry/xregreg.inc

Last change on this file was 13, checked in by chronos, 10 years ago
  • Added: Basic parsing of "Depends on" expressions.
File size: 5.7 KB
Line 
1
2{ ---------------------------------------------------------------------
3 System dependent Registry implementation - using XML file.
4 ---------------------------------------------------------------------}
5
6uses xmlreg;
7
8
9Const
10 XFileName = 'reg.xml';
11
12Procedure TRegistry.SysRegCreate;
13var s : string;
14begin
15 s:=includetrailingpathdelimiter(GetAppConfigDir(GlobalXMLFile));
16 ForceDirectories(s);
17 FSysData:=TXMLRegistry.Create(s+XFileName);
18 TXmlRegistry(FSysData).AutoFlush:=False;
19end;
20
21Procedure TRegistry.SysRegFree;
22
23begin
24 if Assigned(FSysData) then
25 TXMLRegistry(FSysData).Flush;
26 TXMLRegistry(FSysData).Free;
27end;
28
29function TRegistry.SysCreateKey(const Key: String): Boolean;
30
31begin
32 Result:=TXmlRegistry(FSysData).CreateKey(Key);
33end;
34
35function TRegistry.DeleteKey(const Key: String): Boolean;
36
37begin
38 Result:=TXMLRegistry(FSysData).DeleteKey(Key);
39end;
40
41function TRegistry.DeleteValue(const Name: String): Boolean;
42begin
43 Result:=TXmlRegistry(FSysData).DeleteValue(Name);
44end;
45
46function TRegistry.SysGetData(const Name: String; Buffer: Pointer;
47 BufSize: Integer; var RegData: TRegDataType): Integer;
48
49Var
50 DataType : TDataType;
51begin
52 Result:=BufSize;
53 If TXmlregistry(FSysData).GetValueData(Name,DataType,Buffer^,Result) then
54 begin
55 Case DataType of
56 dtUnknown : RegData:=rdUnknown;
57 dtString : RegData:=rdString;
58 dtDWord : RegData:=rdInteger;
59 dtBinary : RegData:=rdBinary;
60 end;
61 end
62 else
63 Result:=-1;
64end;
65
66
67function TRegistry.GetDataInfo(const ValueName: String; var Value: TRegDataInfo): Boolean;
68
69Var
70 Info : TDataInfo;
71
72begin
73 Result := TXmlRegistry(FSysData).GetValueInfo(ValueName,Info);
74 If Not Result then
75 With Value do
76 begin
77 RegData:=rdunknown;
78 DataSize:=0;
79 end
80 else
81 With Value do
82 begin
83 Case Info.DataType of
84 dtUnknown: RegData:=rdUnknown;
85 dtDword : Regdata:=rdInteger;
86 dtString : RegData:=rdString;
87 dtBinary : RegData:=rdBinary;
88 end;
89 DataSize:=Info.DataSize;
90 end;
91end;
92
93function TRegistry.GetKey(const Key: String): HKEY;
94begin
95 Result := 0;
96end;
97
98function TRegistry.GetKeyInfo(var Value: TRegKeyInfo): Boolean;
99
100Var
101 Info : TKeyInfo;
102
103begin
104 Result:=TXmlRegistry(FSysData).GetKeyInfo(info);
105 If Result then
106 With Value,Info do
107 begin
108 NumSubKeys:=SubKeys;
109 MaxSubKeyLen:=SubKeyLen;
110 NumValues:= Values;
111 MaxValueLen:=ValueLen;
112 MaxDataLen:=DataLen;
113 FileTime:=FTime;
114 end;
115end;
116
117function TRegistry.KeyExists(const Key: string): Boolean;
118begin
119 Result:=TXmlRegistry(FSysData).KeyExists(Key);
120end;
121
122function TRegistry.LoadKey(const Key, FileName: string): Boolean;
123begin
124 Result := False;
125end;
126
127function TRegistry.OpenKey(const Key: string; CanCreate: Boolean): Boolean;
128
129begin
130 Result:=TXmlRegistry(FSysData).SetKey(Key,CanCreate);
131 FCurrentKey:=1;
132end;
133
134function TRegistry.OpenKeyReadOnly(const Key: string): Boolean;
135
136begin
137 Result:=TXmlRegistry(FSysData).SetKey(Key,False);
138end;
139
140function TRegistry.RegistryConnect(const UNCName: string): Boolean;
141begin
142 Result := True;
143end;
144
145function TRegistry.ReplaceKey(const Key, FileName, BackUpFileName: string): Boolean;
146begin
147 Result := False;
148end;
149
150function TRegistry.RestoreKey(const Key, FileName: string): Boolean;
151begin
152 Result := False;
153end;
154
155function TRegistry.SaveKey(const Key, FileName: string): Boolean;
156begin
157 Result := False;
158end;
159
160function TRegistry.UnLoadKey(const Key: string): Boolean;
161begin
162 Result := False;
163end;
164
165function TRegistry.ValueExists(const Name: string): Boolean;
166begin
167 Result := TXmlRegistry(FSysData).ValueExists(Name);
168end;
169
170procedure TRegistry.ChangeKey(Value: HKey; const Path: String);
171begin
172
173end;
174
175procedure TRegistry.GetKeyNames(Strings: TStrings);
176begin
177 TXmlRegistry(FSysData).EnumSubKeys(Strings);
178end;
179
180procedure TRegistry.GetValueNames(Strings: TStrings);
181begin
182 TXmlRegistry(FSysData).EnumValues(Strings);
183end;
184
185
186Function TRegistry.SysPutData(const Name: string; Buffer: Pointer;
187 BufSize: Integer; RegData: TRegDataType) : Boolean;
188
189Var
190 DataType : TDataType;
191
192begin
193 Case RegData of
194 rdUnknown : DataType := dtUnknown;
195 rdString,rdExpandString : DataType := dtString;
196 rdInteger : DataType := dtDword;
197 rdBinary : DataType := dtBinary;
198 end;
199 Result:=TXMLRegistry(FSysData).SetValueData(Name,DataType,Buffer^,BufSize);
200end;
201
202procedure TRegistry.RenameValue(const OldName, NewName: string);
203begin
204 TXMLRegistry(FSysData).RenameValue(OldName,NewName);
205end;
206
207procedure TRegistry.SetCurrentKey(Value: HKEY);
208begin
209 fCurrentKey := Value;
210end;
211
212procedure TRegistry.SetRootKey(Value: HKEY);
213
214Var
215 S: String;
216
217begin
218 If (Value=HKEY_CLASSES_ROOT) then
219 S:='HKEY_CLASSES_ROOT'
220 else if (Value=HKEY_CURRENT_USER) then
221 S:='HKEY_CURRENT_USER'
222 else if (Value=HKEY_LOCAL_MACHINE) then
223 S:='HKEY_LOCAL_MACHINE'
224 else if (Value=HKEY_USERS) then
225 S:='HKEY_USERS'
226 else if Value=HKEY_PERFORMANCE_DATA then
227 S:='HKEY_PERFORMANCE_DATA'
228 else if (Value=HKEY_CURRENT_CONFIG) then
229 S:='HKEY_CURRENT_CONFIG'
230 else if (Value=HKEY_DYN_DATA) then
231 S:='HKEY_DYN_DATA'
232 else
233 S:=Format('Key%d',[Value]);
234 TXmlRegistry(FSysData).SetRootKey(S);
235 fRootKey := Value;
236end;
237
238procedure TRegistry.CloseKey;
239
240begin
241 // CloseKey is called from destructor, which includes cases of failed construction.
242 // FSysData may be unassigned at this point.
243 if Assigned(FSysData) then
244 begin
245 TXMLRegistry(FSysData).Flush;
246 TXMLRegistry(FSysData).SetRootKey(TXMLRegistry(FSysData).RootKey);
247 end;
248end;
249
250procedure TRegistry.CloseKey(key:HKEY);
251
252begin
253 if Assigned(FSysData) then
254 begin
255 TXMLRegistry(FSysData).Flush;
256 TXMLRegistry(FSysData).SetRootKey(TXMLRegistry(FSysData).RootKey);
257 end;
258end;
Note: See TracBrowser for help on using the repository browser.