Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Registry Klasse zum Lesen und Schreiben (https://www.delphipraxis.net/2696-registry-klasse-zum-lesen-und-schreiben.html)

[TP]Hawk274 3. Feb 2003 09:44


Registry Klasse zum Lesen und Schreiben
 
Ich möchte mir gerne eine Registry Klasse schreiben von der ich jeweils nur Lesen oder Schreiben aufrufen muss. Das ist übrigens meine erste eigene Klasse.
Intern soll geklärt werden welcher Typ gelesen / geschrieben wird. Für das direkte lesen und schreiben soll eine interne Funktion aufgerufen werden.

Bisher lief das Lesen und Schreiben immer folgendermaßen ab.
Code:
function WriteToRegistry(const ARegKey, ARegName, ARegValue: String): Boolean;
var Registry: TRegistry;
begin
  Result := TRUE;
  Registry := TRegistry.Create;
  Registry.RootKey := 2147483650; //HKEY_LOCAL_MACHINE
  { Der Registry-Pfad für meinen Eintrag }
  try
    if Registry.OpenKey(ARegKey, TRUE) = TRUE then
      Registry.WriteString(ARegName, ARegValue)
    else
    begin
      ErrorMsg(rcsREGKEY_WRITEERROR);
      Result := FALSE;
    end;
  finally
    Registry.CloseKey;
    Registry.Free;
  end;
end;

function ReadFromRegistry(const ARegKey, ARegName: String; var ARegValue: String): Boolean;
var
 Registry: TRegistry;
begin
  Result := TRUE;
  Registry := TRegistry.Create;
  try
    Registry.RootKey := 2147483650; //HKEY_LOCAL_MACHINE
    if Registry.KeyExists(ARegKey) = TRUE then
    begin
      if Registry.OpenKey(ARegKey, FALSE) = TRUE then
      begin
        if( Registry.ValueExists(ARegName) ) then
          ARegValue := Registry.ReadString(ARegName)
        else
        begin
          ErrorMsg(rcsREGKEY_READERROR);
          Result := FALSE;
        end;
      end
      else
        Result := FALSE;
    end
    else
      Result := FALSE;
  finally
    Registry.Free;
  end;
end;
Nur möchte ich jetzt gerne in der Klasse noch jeweils eine Funktion zum direkten Lesen und Schreiben benutzen. Dieser soll der Wert und der Registry Datentyp übergeben werden. Anhand dieser Parameter soll die jeweilige lese bzw. schreiben Funktion ausgeführt werden. Nur wie händel ich das? Ist das überhaupt möglich? In diesem Punkt herrscht noch Verwirrung in meinem Kopf ... glaube man müsste sich für beide Parameter einen eigenen Datentyp definieren, wenn ich mich nicht irre. Wer kann mir in diesem Punkt helfen, den Knoten in meinen Kopf zu lösen?

Des weiteren vestehe ich nicht warum der Compiler HKEY_LOCAL_MACHINE nicht kennt. Welche Unit muss ich einbinden bzw, was muss konfigurieren / einstellen um diese Konstante zu benutzen? In der OH bin ich leider auch nicht fündig geworden.

sakura 3. Feb 2003 09:47

Re: Registry Klasse zum Lesen und Schreiben
 
Zitat:

Zitat von [TP
Hawk274]In diesem Punkt herrscht noch Verwirrung in meinem Kopf ...

Die Frage habe ich auch noch nicht so richtig verstanden ... Die HKEY_XXX Konstanten sind in der Unit Windows versteckt.
...:cat:...

Christian Seehase 3. Feb 2003 09:51

Moin Hawk,

also HKEY_LOCAL_MACHINE sollte sich in der Unit Windows befinden.

Was stellst Du Dir eigentlich unter direktem Lesen / Schreiben vor?

Den (Root)Key, Wertnamen, Wert und Typ musst Du wohl immer angeben.

[TP]Hawk274 3. Feb 2003 10:21

Zitat:

Was stellst Du Dir eigentlich unter direktem Lesen / Schreiben vor?
Ok, war ungenau geschrieben. :roll:
Damit meine ich die Funktionen WriteString, WriteExpandString, WriteInteger, WriteBool und WriteBinaryData bzw. ReadString, ReadInteger, ReadBool und ReadBinaryData.
Dieses muss ja jeweils für Lesen und Schreiben unterschieden werden. Deshalb dachte ich man lagert das in eine weitere Funktion aus.
Somit kann z.B. nachher der Fehler leichter bzw. schneller gefunden werden. Vielleicht bauen ich auch noch eine Fehlerrückgabe ein. Die dann den genauer Fehler beinhaltet. Dann fliegen die Messages (ErrorMsg) raus! Die stören glaube ich nur!
Hoffe ich habe mich jetzt verständlich ausgedrückt!? :?:

sakura 3. Feb 2003 10:33

Suche mal in der Delphi-Hilfe nach der Direktive overload, damit kannst Du die gleichen Funktionsnamen für verschiedene Parameter-/Ergebnisslisten nutzen.
...:cat:...

[TP]Hawk274 3. Feb 2003 10:54

thx ... das scheint es gewesen zu sein was ich suche ...

Luckie 3. Feb 2003 11:01

Aber was soll das ganze TRegistry noch mal in eine Klasse zu kapseln? :roll:

[TP]Hawk274 3. Feb 2003 11:19

Zitat:

Aber was soll das ganze TRegistry noch mal in eine Klasse zu kapseln?
Die Frage war berichtigt. :)
Habe jetzt daraus keine Klasse mehr gemacht, sondern als normale funktionen in eine extra Unit gepackt. Hat ja wirklich keinen Sinn.

Luckie 3. Feb 2003 12:10

Das macht auch keinen Sinn. Du hast jetzt die Unit Registry.pas noch mal in eine Unit verpackt.

[TP]Hawk274 3. Feb 2003 13:11

Warum macht das keinen Sinn?
Ich möchte doch nicht jedesmal die Funktion in den Quellcode hineinkopieren. Es ist doch einfacher nur diese Unit einzubinden. Oder versteh ich jetzt hier irgendwas falsch?


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:28 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz