unit Registry2;
// Registry2.pas von Daniel Marschall
// Der Typ HKEY ist ein vorzeichenloser 32-Bit und kann daher nicht mit einem
// TIdentMapEntry erfasst werden, da er nur vorzeichenbehaftete Integer
// akzeptiert. Daher können in VCLs die HKEYs nicht im Objektinspektor
// aufgelistet werden. Diese Ableitung behebt das Problem.
interface
uses
Classes, Registry, Windows;
type
TRootKey =
type LongInt;
TRegistry2 =
class(TRegistry)
private
function GetRootKey: TRootKey;
procedure SetRootKey(Value: TRootKey);
published
property RootKey: TRootKey
read GetRootKey
write SetRootKey
default TRootKey(HKEY_CURRENT_USER);
end;
const
RootKeys:
array[0..6]
of TIdentMapEntry = (
(Value: Integer(HKEY_CLASSES_ROOT);
Name: '
HLEY_CLASSES_ROOT'),
(Value: Integer(HKEY_CURRENT_USER);
Name: '
HKEY_CURRENT_USER'),
(Value: Integer(HKEY_LOCAL_MACHINE);
Name: '
HKEY_LOCAL_MACHINE'),
(Value: Integer(HKEY_USERS);
Name: '
HKEY_USERS'),
(Value: Integer(HKEY_PERFORMANCE_DATA);
Name: '
HKEY_PERFORMANCE_DATA'),
(Value: Integer(HKEY_CURRENT_CONFIG);
Name: '
HKEY_CURRENT_CONFIG'),
(Value: Integer(HKEY_DYN_DATA);
Name: '
HKEY_DYN_DATA')
);
function IdentToRootKey(
const Ident:
String;
var RootKey: Integer): Boolean;
function RootKeyToIdent(RootKey: Integer;
var Ident:
String): Boolean;
implementation
function TRegistry2.GetRootKey: TRootKey;
begin
Result := TRootKey(
inherited RootKey);
end;
procedure TRegistry2.SetRootKey(Value: TRootKey);
begin
inherited RootKey := HKEY(Value);
end;
function RootKeyToIdent(RootKey: Integer;
var Ident:
String): Boolean;
begin
Result := IntToIdent(RootKey, Ident, RootKeys);
end;
function IdentToRootKey(
const Ident:
String;
var RootKey: Integer): Boolean;
begin
Result := IdentToInt(Ident, RootKey, RootKeys);
end;
initialization
RegisterIntegerConsts(TypeInfo(TRootKey), IdentToRootKey, RootKeyToIdent);
end.