![]() |
Registry lesen
Hallo,
ich benutze Delphi Tokyo 10.2.2 mit Windows10. Ich habe ein Problem beim Lesen der Registry. Ich schreibe Werte aus dem Programm in die Registry. Am Anfang jedoch, wenn das Programm neu installiert wird, sind diese Werte noch nicht vorhanden. Beim lesen von Strings gibt es kein Problem. Wenn ich jedoch Integer auslesen will, die noch nicht vorhanden sind, gibt es eine Fehlermeldung. Wie kann ich die Werte abfragen ohne das eine Fehlermeldung ausgegeben wird ? Für Eure Hilfe wäre ich dankbar. Gruß Oldmann |
AW: Registry lesen
Was für eine Fehlermeldung erscheint da? Wie sieht der zugehörige Code aus?
Grüße Dalai |
AW: Registry lesen
Hmm..
wenn Du nur zum Lesen die Reg öffnest, dann sollte Dir OpenKey(<Pfad>, False) ein 'False' zurückgeben, wenn dein Registry-Pfad nicht vorhanden ist... Somit gehe ich von aus (mangels SourceCode), dass Du den Rückgabewert ignorierst und trotzdem versuchst mit Readxxx Werte zu Lesen.. ;) |
AW: Registry lesen
Hallo,
Hier der Code: procedure Registry_lesen; begin with TRegistry.Create do begin try Rootkey:=HKEY_CURRENT_USER; if OpenKey('Software\Windaxlg',True) then begin test.str_1:=ReadString('Win1'); test.str_2:=ReadString('Win2'); aufrufe:=ReadInteger('Win3'); test.Tage:=ReadInteger('Win4'); test.str_4:=ReadString('Win4'); end; finally Free; end; end; end; Am Anfang ist der Code ja bei dem Anwender nicht vorhanden. Er wird erst im laufe der Programmausführung gespeichert. Daher bekomme ich bei den Integern eine Fehlermeldung. Die Fehlermeldung lautet: „Fehler beim Holen der Daten von Win3“ Oldmann |
AW: Registry lesen
Hallo,
Hier der Code: [GOOGLE]
Delphi-Quellcode:
[/GOOGLE]Am Anfang ist der Code ja bei dem Anwender nicht vorhanden.
procedure Registry_lesen;
begin with TRegistry.Create do begin try Rootkey:=HKEY_CURRENT_USER; if OpenKey('Software\Windaxlg',True) then begin test.str_1:=ReadString('Win1'); test.str_2:=ReadString('Win2'); aufrufe:=ReadInteger('Win3'); test.Tage:=ReadInteger('Win4'); test.str_4:=ReadString('Win4'); end; finally Free; end; end; end; Er wird erst im laufe der Programmausführung gespeichert. Daher bekomme ich bei den Integern eine Fehlermeldung. Die Fehlermeldung lautet: „Fehler beim Holen der Daten von Win3“ Oldmann |
AW: Registry lesen
Fälschlicherweise war ich der Annahme, dass
![]() Zitat:
Unabhängig davon solltest du auf das
Delphi-Quellcode:
verzichten.
with
Grüße Dalai |
AW: Registry lesen
Zitat:
|
AW: Registry lesen
Hallo,
wie wird das genau umgesetzt dein "TRegistry.ValueExists zu prüfen". Ein bischen code wäre nett. Wenn ich das "With" weglasse, funktioniert es nicht. Oldmann |
AW: Registry lesen
Delphi-Quellcode:
ungetestet hingedaddelt.
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; |
AW: Registry lesen
Delphi-Quellcode:
StrToIntDef(reg.ReadString('Win3'), 0)
Exists hilft hier nicht unbedingt, da es zwei Fehlerstellen gibt. Einmal den Value gibt es nicht und bei ReadInteger auch noch wenn es kein Integer (DWORD) ist. Man könnte hier vielleicht mit "einfach" mit TRegIniFile rumspielen. In den IniFile-Klassen wird bei fehlende oder falschen Werten der Default genommen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 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