AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Registry lesen

Ein Thema von oldmann · begonnen am 3. Sep 2020 · letzter Beitrag vom 4. Sep 2020
Antwort Antwort
Seite 2 von 2     12
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.769 Beiträge
 
Delphi 11 Alexandria
 
#11

AW: Registry lesen

  Alt 4. Sep 2020, 13:36
Hallo,

Wenn ich das "With" weglasse, funktioniert es nicht.

Oldmann
Dann solltest Du es erst Recht weg lassen und versuchen zu vertehen, was du da überhaupt abgeschrieben hast.

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
oldmann

Registriert seit: 10. Okt 2008
Ort: Weyhe
140 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#12

AW: Registry lesen

  Alt 4. Sep 2020, 15:23
Hallo,

ich habe das dargestellte Beispiellisting probiert und es gab keine Fehlermeldung.
Vielen Dank an alle Beteiligten.
Damit ist das Thema erledigt.

Gruß Olmann
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
962 Beiträge
 
Delphi 6 Professional
 
#13

AW: Registry lesen

  Alt 4. Sep 2020, 16:45
Hmm..


Delphi-Quellcode:
procedure Registry_lesen;
var
  reg : TRegistry;
begin
  reg := TRegistry.Create;
  try
    reg.Rootkey := HKEY_CURRENT_USER;
    if reg.OpenKey('Software\Windaxlg',True) 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;
  finally
    reg.Free;
  end;
end;
ungetestet hingedaddelt.
Wieso nicht

if reg.OpenKey('Software\Windaxlg',False) then begin

Bei Verwendung von false wird dann von OpenKey auch ein false zurück geliefert wenn dein Verzeichnis noch nicht da ist, statt ein neues (leeres) 'Windaxlg' anzulegen...

Das 'True' sollte nur zum 'schreiben' verwendet werden ...

Beim 'Lesen' wird so nicht versucht Werte aus einem leeren Verzeichnis zu lesen..
(Ja ich Verwende Delphi 6 Pro und will NICHT wechseln!)
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.448 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
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 01:20 Uhr.
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