168 lines
4.0 KiB
ObjectPascal
168 lines
4.0 KiB
ObjectPascal
program X2UtilsSettingsTest;
|
|
|
|
{$APPTYPE CONSOLE}
|
|
|
|
uses
|
|
madExcept,
|
|
madLinkDisAsm,
|
|
Classes,
|
|
SysUtils,
|
|
Variants,
|
|
Windows,
|
|
X2UtApp in '..\X2UtApp.pas',
|
|
X2UtSettings in '..\X2UtSettings.pas',
|
|
X2UtSettingsINI in '..\X2UtSettingsINI.pas',
|
|
X2UtSettingsRegistry in '..\X2UtSettingsRegistry.pas';
|
|
|
|
type
|
|
TCheck = class(TObject)
|
|
public
|
|
class procedure CheckValue(const AAction: TX2SettingsAction;
|
|
const ASection, AName: String;
|
|
var AValue: Variant);
|
|
end;
|
|
|
|
procedure TraverseSection(const ASettings: TX2SettingsFactory;
|
|
const ASection: String = '';
|
|
const AIndent: Integer = 0);
|
|
var
|
|
sIndent: String;
|
|
slSections: TStringList;
|
|
iSection: Integer;
|
|
slValues: TStringList;
|
|
iValue: Integer;
|
|
sSection: String;
|
|
|
|
begin
|
|
sIndent := StringOfChar(' ', AIndent * 2);
|
|
slSections := TStringList.Create();
|
|
try
|
|
with ASettings[ASection] do
|
|
try
|
|
GetSectionNames(slSections);
|
|
|
|
for iSection := 0 to slSections.Count - 1 do begin
|
|
WriteLn(sIndent, '[', slSections[iSection], ']');
|
|
|
|
sSection := ASection;
|
|
if Length(sSection) > 0 then
|
|
sSection := sSection + '.';
|
|
|
|
sSection := sSection + slSections[iSection];
|
|
|
|
slValues := TStringList.Create();
|
|
try
|
|
with ASettings[sSection] do
|
|
try
|
|
GetValueNames(slValues);
|
|
|
|
for iValue := 0 to slValues.Count - 1 do
|
|
WriteLn(sIndent, slValues[iValue], '=', ReadString(slValues[iValue]));
|
|
finally
|
|
Free();
|
|
end;
|
|
finally
|
|
FreeAndNil(slValues);
|
|
end;
|
|
|
|
TraverseSection(ASettings, sSection, AIndent + 1);
|
|
end;
|
|
finally
|
|
Free();
|
|
end;
|
|
finally
|
|
FreeAndNil(slSections);
|
|
end;
|
|
end;
|
|
|
|
{ TCheck }
|
|
class procedure TCheck.CheckValue;
|
|
begin
|
|
if AAction = saWrite then
|
|
begin
|
|
if AValue < 0 then
|
|
AValue := 0
|
|
else if AValue > 15 then
|
|
AValue := 15
|
|
else
|
|
if (AValue > 5) and (AValue < 10) then
|
|
AValue := 5;
|
|
end;
|
|
end;
|
|
|
|
|
|
var
|
|
Settings: TX2SettingsFactory;
|
|
|
|
begin
|
|
// INI settings
|
|
//WriteLn('INI data:');
|
|
Settings := TX2INISettingsFactory.Create();
|
|
try
|
|
with TX2INISettingsFactory(Settings) do
|
|
Filename := App.Path + 'settings.ini';
|
|
|
|
{
|
|
// Deletes one section
|
|
with Settings['Test.Section'] do
|
|
try
|
|
DeleteSection();
|
|
finally
|
|
Free();
|
|
end;
|
|
}
|
|
|
|
{
|
|
// Deletes everything
|
|
with Settings[''] do
|
|
try
|
|
DeleteSection();
|
|
finally
|
|
Free();
|
|
end;
|
|
}
|
|
|
|
// Test for the definitions
|
|
Settings.Define('Test', 'Value', 5, TCheck.CheckValue);
|
|
|
|
with Settings['Test'] do
|
|
try
|
|
WriteInteger('Value', 6);
|
|
WriteLn(ReadInteger('Value'));
|
|
finally
|
|
Free();
|
|
end;
|
|
|
|
{
|
|
TraverseSection(Settings, '', 1);
|
|
WriteLn;
|
|
}
|
|
finally
|
|
FreeAndNil(Settings);
|
|
end;
|
|
ReadLn;
|
|
|
|
{
|
|
// Registry settings
|
|
WriteLn('Registry data:');
|
|
Settings := TX2RegistrySettingsFactory.Create();
|
|
try
|
|
with TX2RegistrySettingsFactory(Settings) do begin
|
|
Root := HKEY_CURRENT_USER;
|
|
Key := '\Software\X2Software\X2FileShare\';
|
|
end;
|
|
|
|
// Note: you WILL get exceptions here due to the fact that not all
|
|
// values are strings yet they are treated as such here. Perhaps in the
|
|
// future type conversion will be done on-the-fly, but for now just press
|
|
// F5 when debugging (you won't get exceptions when running the EXE as
|
|
// standalone) and the default value will be returned. Perhaps the best
|
|
// solution...
|
|
TraverseSection(Settings, '', 1);
|
|
ReadLn;
|
|
finally
|
|
FreeAndNil(Settings);
|
|
end;
|
|
}
|
|
end.
|