Einzelnen Beitrag anzeigen

Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Kapseln von Registryzugriffen

  Alt 21. Sep 2009, 11:07
Zitat von Luckie:
Was willst du noch einfacher machen?
Ich möchte das hier
Delphi-Quellcode:
Function Holewert: String;
Var
   RINI         : TRegistry;
Begin
   Result:='';
   RINI:=TRegistry.Create;
   Try
      RINI.RootKey:=HKEY_CURRENT_USER;
      If RINI.OpenKeyReadOnly('Irgendwas') Then
      Begin
         Result:=RINI.ReadString('Irgendwas');
         RINI.CloseKey;
      End;
   Finally
      RINI.Free;
   End;
End;
für jede einzelne Abfrage der Registry vermeiden. Es kommt hinzu, dass ich häufig zwischen den RootKeys HKEY_CURRENT_USER und HKEY_LOCAL_MACHINE wechseln muss. Es soll daher mindestens das Anlegen von RINI und das Freigeben nicht jedesmal gemacht werden müssen.

Zitat von Luckie:
Und bitte poste doch den relevanten Quellcode.
Hier kommt er:
Delphi-Quellcode:
Unit AdvoPlex_Object;

Interface

Uses
   Windows,
   Classes,
   Registry;

Const
   {$EXTERNALSYM HKEY_CURRENT_USER}
   HKEY_CURRENT_USER   = ($80000001);
   {$EXTERNALSYM HKEY_LOCAL_MACHINE}
   HKEY_LOCAL_MACHINE= ($80000002);
   AdvoPfad            ='Software\AdvoSolutions\AdvoPlex';

Type
   TAdvoPlex   = Class(TComponent)
                     Private
                        RINI         : TRegistry;
                        FUserSU      : String;
                     Protected
                        Function GetUser: String;
                        Function GetUserSU: String;
                        Procedure SetUserSU(Value: String);
                     Public
                        Constructor Create(AOwner:Tcomponent);Override;
                        Destructor Destroy; Override;
                     Published
                        Property   User      : String   Read   GetUser;
                        Property UserSU   : String   Read   GetUserSU   Write SetUserSU;
                 End;

Implementation

Constructor TAdvoPlex.Create(AOwner: TComponent);
Begin
   Inherited Create(AOwner);
   RINI:=TRegistry.Create;
End;

Destructor TAdvoPlex.Destroy;
Begin
   RINI.Free;
   Inherited Destroy;
End;

Function TAdvoPlex.GetUser;
   Function WhoAmI: String;
   Var
      Buffer      : Array [0..MAX_PATH] Of Char;
      Size         : DWORD;
   Begin
      Size:=SizeOf(Buffer);
      GetUserName(Buffer,Size);
      SetString(Result,Buffer,lstrlen(Buffer));
   End;
Begin
   Result:=WhoAmI;
End;

Function TAdvoPlex.GetUserSU;
Begin
   RINI.RootKey:=HKEY_CURRENT_USER;
   If RINI.OpenKeyReadOnly(AdvoPfad) Then
   Begin
      Result:=RINI.ReadString('User');
      RINI.CloseKey;
   End;
End;

Procedure TAdvoPlex.SetUserSU(Value: string);
Begin
   RINI.RootKey:=HKEY_CURRENT_USER;
   If RINI.OpenKey(AdvoPfad, True) Then
   Begin
      RINI.WriteString('User', Value);
      RINI.CloseKey;
   End;
End;

End.
Zitat von Luckie:
Ich denke, die wenigsten haben Lust erst ein Archiv runterzuladen, es zu entpacken und dann noch einen Editor zum Betrachten deines Quellcodes zu öffnen.
Dann wird es aber vermutlich auch schwieriger, den Fehler zu finden.

Gruß, Alex
Alex Winzer
  Mit Zitat antworten Zitat