AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

IdentMap funktioniert nicht

Offene Frage von "blackdrake"
Ein Thema von blackdrake · begonnen am 2. Aug 2009 · letzter Beitrag vom 3. Aug 2009
 
blackdrake

Registriert seit: 22. Aug 2003
Ort: Bammental
618 Beiträge
 
Delphi 10.3 Rio
 
#1

IdentMap funktioniert nicht

  Alt 2. Aug 2009, 21:25
Hallo.

Ich habe eine Objekteigenschaft, die einen HKEY enthält. Leider kann diese im Objektinspektor nicht aufgelistet werden, da ein HKEY nicht im Bereich des Integers liegt.

Daher möchte ich TRegsitry ableiten, sodass ein "TRootKey" aufgelistet werden kann. Natürlich möchte ich die "Kompatibilität" zu den HKEYs behalten. Daher akzueptiert nun meine Ableitung die Werte $0000000x (Auflistungswerte für den OI) und $8000000x ("HKEY").

Leider funktioniert diese Auflistung einfach nicht. Ich habe mir schon alles von TColor abgeschaut, doch es klappt einfach nicht. Kompilierung funktioniert Problemlos. Aber im OI sehe ich nur die Zahl. Was kann ich tun?

Delphi-Quellcode:
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 = LongWord;

  TRegistry2 = class(TRegistry)
  private
    function GetRootKey: TRootKey;
    procedure SetRootKey(Value: TRootKey);
  published
    property RootKey: TRootKey
      read GetRootKey write SetRootKey default HKEY_CURRENT_USER;
  end;

const
  RootKeys: array[0..6] of TIdentMapEntry = (
    (Value: HKEY_CLASSES_ROOT - $80000000; Name: 'HLEY_CLASSES_ROOT'),
    (Value: HKEY_CURRENT_USER - $80000000; Name: 'HKEY_CURRENT_USER'),
    (Value: HKEY_LOCAL_MACHINE - $80000000; Name: 'HKEY_LOCAL_MACHINE'),
    (Value: HKEY_USERS - $80000000; Name: 'HKEY_USERS'),
    (Value: HKEY_PERFORMANCE_DATA - $80000000; Name: 'HKEY_PERFORMANCE_DATA'),
    (Value: HKEY_CURRENT_CONFIG - $80000000; Name: 'HKEY_CURRENT_CONFIG'),
    (Value: HKEY_DYN_DATA - $80000000; Name: 'HKEY_DYN_DATA')
  );

function IdentToRootKey(const Ident: string; var RootKey: Longint): Boolean;
function RootKeyToIdent(RootKey: Longint; var Ident: string): Boolean;

implementation

function TRegistry2.GetRootKey: TRootKey;
begin
  if (inherited RootKey > $80000000) then
    result := inherited RootKey - $80000000
  else
    result := inherited RootKey;
end;

procedure TRegistry2.SetRootKey(Value: TRootKey);
begin
  if (Value < $80000000) then
    inherited RootKey := Value + $80000000
  else
    inherited RootKey := Value;
end;

function RootKeyToIdent(RootKey: Longint; var Ident: string): Boolean;
begin
  Result := IntToIdent(RootKey, Ident, RootKeys);
end;

function IdentToRootKey(const Ident: string; var RootKey: Longint): Boolean;
begin
  Result := IdentToInt(Ident, RootKey, RootKeys);
end;

initialization
  RegisterIntegerConsts(TypeInfo(TRootKey), IdentToRootKey, RootKeyToIdent);
end.
Wenn es fertig ist, möchte ich es natürlich in die CodeLib setzen.

PS: Meine vorherige Version arbeitete mit einem Aufzählungstyp, der schlicht und einfach die HKEY_* Symbole überschrieben hatte. Das blöde daran war, dass dadurch beim Anwender oftmals einen TRootKey <-> HKEY Compilerfehler entsteht. Deswegen möchte ich die Symbole nun nicht mehr überschreiben.

Gruß
blackdrake
Daniel Marschall
  Mit Zitat antworten Zitat
 

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:04 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz