Einzelnen Beitrag anzeigen

Delphi.Narium

Registriert seit: 27. Nov 2017
2.431 Beiträge
 
Delphi 7 Professional
 
#14

AW: Registry lesen

  Alt 4. Sep 2020, 17:06
Beim Programmende wird der Zweig sowieso angelegt, da kommt es auf ein paar Minuten früher nicht an.

Und für die anderen Werte muss ja auch was geliefert werden. Man könnte das Ganze natürlich auch so machen:
Delphi-Quellcode:
procedure Registry_lesen;
var
  reg : TRegistry;
begin
  reg := TRegistry.Create;
  try
    reg.Rootkey := HKEY_CURRENT_USER;
    if reg.OpenKey('Software\Windaxlg',False) then begin
      if reg.ValueExists('Win1') then test.str_1 := reg.ReadString('Win1') else test.str_1 := '';
      if reg.ValueExists('Win2') then test.str_2 := reg.ReadString('Win2') else test.str_2 := '';
      if reg.ValueExists('Win3') then aufrufe := reg.ReadInteger('Win3') else aufrufe := 0;
      if reg.ValueExists('Win4') then test.Tage := reg.ReadInteger('Win4') else test.Tage := 0;
      if reg.ValueExists('Win4') then test.str_4 := reg.ReadString('Win4') else test.str_4 := '';
    end else begin
      test.str_1 := '';
      test.str_2 := '';
      aufrufe := 0;
      test.Tage := 0;
      test.str_4 := '';
    end;
  finally
    reg.Free;
  end;
end;
Verschiebt das Erstellen der Verzeichnisses eben auf's Programmende und man hat beim Programmstart ein paar mehr Zeilen Code, um auf die Nichtexistenz des Verzeichnisses und die damit verbundene Vergabe der Defaultwerte zu reagieren.

Oder so ginge auch:
Delphi-Quellcode:
procedure Registry_lesen;
var
  reg : TRegistry;
begin
  test.str_1 := '';
  test.str_2 := '';
  aufrufe := 0;
  test.Tage := 0;
  test.str_4 := '';
  reg := TRegistry.Create;
  try
    reg.Rootkey := HKEY_CURRENT_USER;
    if reg.OpenKey('Software\Windaxlg',False) then begin
      if reg.ValueExists('Win1') then test.str_1 := reg.ReadString('Win1');
      if reg.ValueExists('Win2') then test.str_2 := reg.ReadString('Win2');
      if reg.ValueExists('Win3') then aufrufe := reg.ReadInteger('Win3');
      if reg.ValueExists('Win4') then test.Tage := reg.ReadInteger('Win4');
      if reg.ValueExists('Win4') then test.str_4 := reg.ReadString('Win4');
    end;
  finally
    reg.Free;
  end;
end;
Hat wer weiter Varianten zu bieten

Letztlich jedet ja nur dadrum, beim ersten Programm die Fehler beim Nochnichtvorhandensein der Werte abzufangen.
  Mit Zitat antworten Zitat