![]() |
Ini auslesen und Checkbox auf True setzen?
Hallo,
ich habe ein Problem, wer kann mir helfe? Ich lese wie folgt einen Wert aus der .ini aus:
Delphi-Quellcode:
Wenn aber die .ini-Datei noch nicht existiert hat ProxyStatus keinen Zustand, also nicht True und nicht False, deswegen wird eine Checkbox immer leer bzw. False sein, ich will sie aber True haben. Im Objektinspektor habe ich Checked der Checkbox auf True gesetzt, beim öffnen des Programms ist sie aber immer False.
ProxyStatus := Ini.ReadBool('Default', 'ProxyStatus', True);
Weiß nicht mehr wie ich weiter komme. |
Re: Ini auslesen und Checkbox auf True setzen?
Hallo Alex,
das ist richtig. Prüf die INI-Datei mit FileExist und ansonsten abbrechen. [EDIT] Prüf nicht auf TRUE oder FALSE, das kann zu Problemen führen, schau Dir mal folgenden Seite an... ![]() Gruß Jens |
Re: Ini auslesen und Checkbox auf True setzen?
Hallo
Zitat:
Zitat:
Delphi-Quellcode:
Grüße, Matze
ProxyStatus := Ini.ReadBool('Default', 'ProxyStatus', True); // "true", wenn Ini bzw. der Eintrag nicht existiert
CheckBox1.Checked := ProxyStatus; Edit @Jens: Was? Wieso sollte ProxyStatus dann undefiniert sein? Dann wäre der Standardwert doch überflüssig. :gruebel: |
Re: Ini auslesen und Checkbox auf True setzen?
Zitat:
|
Re: Ini auslesen und Checkbox auf True setzen?
Also ich habe das so:
Delphi-Quellcode:
if FileExists(UserAppDataDir + AppDataRootDir + AppDataProjectDir + '\Config-t.ini') then
begin Ini := TIniFile.Create(UserAppDataDir + AppDataRootDir + AppDataProjectDir + '\Config-t.ini'); try ProxyStatus := Ini.ReadBool('Default', 'ProxyStatus', True); finally Ini.Free; end; |
Re: Ini auslesen und Checkbox auf True setzen?
Zitat:
Delphi-Quellcode:
vorgegeben wurde.
Ini.ReadBool('Default', 'ProxyStatus', [b]True[/b]);
[EDIT]Wenn die Datei aber noch nicht existiert, ist der Wert undefiniert, und daher eben das mit Boolean Werten Gruß Jens |
Re: Ini auslesen und Checkbox auf True setzen?
Aber du erzeugst doch die Ini mit:
Delphi-Quellcode:
Da wird die Ini doch dann angelegt, falls sie nicht existiert, und anschließend geöffnet. Das hat einen nicht existierenden Eintrag zur Folge und somit den Standardwert. Oder irre ich mich?
Ini := TIniFile.Create(...);
try // auslesen finally // ... end; Edit @Alex: Dann sorge dafür, dass "ProxyStatus" immer definiert ist, das ist generell zu empfehlen. Gib der Variablen bsp. zu Beginn den Standardwert (true). |
Re: Ini auslesen und Checkbox auf True setzen?
Zitat:
|
Re: Ini auslesen und Checkbox auf True setzen?
Ich hab schon zig mal ausprobiert, die Checkbox wird auf True gesetzt nur wenn der Eintrag in der ini nicht vorhanden ist, wenn die ini-Datei noch nicht existiert gib's keinen Zustand, ihr könnt das ruhig testen.
|
Re: Ini auslesen und Checkbox auf True setzen?
Zitat:
Entweder Standardwerte direkt ins Programm, somit kein Problem, oder INI.Create, und richtige Standardwerte deinen Quellcode integrieren. Gruß Jens |
Re: Ini auslesen und Checkbox auf True setzen?
Hast du denn ProxyStatus der Checkbox zugewiesen.
|
Re: Ini auslesen und Checkbox auf True setzen?
Zitat:
|
Re: Ini auslesen und Checkbox auf True setzen?
Ich sehe gerade bei mir ist der Code falsch:
Delphi-Quellcode:
Hier wird die die ini erstellt nur dann wenn sie schon vorhanden ist, wenn sie nicht vorhanden ist - geschieht nix. Hm.... :gruebel:
if FileExists(UserAppDataDir + AppDataRootDir + AppDataProjectDir + '\Config-t.ini') then
begin Ini := TIniFile.Create(UserAppDataDir + AppDataRootDir + AppDataProjectDir + '\Config-t.ini'); try ProxyStatus := Ini.ReadBool('Default', 'ProxyStatus', True); finally Ini.Free; end; Muss das vllt so heißen?? :gruebel:
Delphi-Quellcode:
if FileExists(UserAppDataDir + AppDataRootDir + AppDataProjectDir + '\Config-t.ini') then
begin try ProxyStatus := Ini.ReadBool('Default', 'ProxyStatus', True); finally Ini.Free; end else Ini := TIniFile.Create(UserAppDataDir + AppDataRootDir + AppDataProjectDir + '\Config-t.ini'); |
Re: Ini auslesen und Checkbox auf True setzen?
Es reicht das zu schreiben:
Delphi-Quellcode:
Wenn sie nicht existiert, wird sie angelegt, sonst geöffnet.
Ini := TIniFile.Create(UserAppDataDir + AppDataRootDir + AppDataProjectDir + '\Config-t.ini');
Dein Code funktioniert so auch nicht, da du die Ini nirgendwo öffnest, wenn sie bereits existiert. Und unterlasse bitte die Doppelposts. |
Re: Ini auslesen und Checkbox auf True setzen?
Delphi-Quellcode:
Also, so funktinoert es bei mir wunderbar.
procedure TForm1.FormCreate(Sender: TObject);
var INi : TIniFile; ProxyStatus : Boolean; begin if FileExists('.\Config-t.ini') then begin Ini := TIniFile.Create('.\Config-t.ini'); try ProxyStatus := Ini.ReadBool('Default', 'ProxyStatus', True); finally Ini.Free; CheckBox1.Checked := ProxyStatus; end; Und so wäre ja auch möglich...
Delphi-Quellcode:
Gruß Jens
procedure TForm1.FormCreate(Sender: TObject);
var INi : TIniFile; begin if FileExists('.\Config-t.ini') then //Abbruch, wenn INI nicht existiert. Hierbei muss die CheckBox im OI gesetzt sein begin Ini := TIniFile.Create('.\Config-t.ini'); try CheckBox1.Checked := Ini.ReadBool('Default', 'ProxyStatus', True); finally Ini.Free; end; |
Re: Ini auslesen und Checkbox auf True setzen?
Zitat:
|
Re: Ini auslesen und Checkbox auf True setzen?
Habe ich einen Denkfehler oder wieso macht ihr das so kompliziert?
Reicht nicht das hier, ganz simpel:
Delphi-Quellcode:
Wenn die Ini-Datei nicht existiert, wird eine leere Ini angelegt (eine leere Ini-Datei wird meines Wissens auch nicht auf der Festplatte gespeichert). Dann ist kein Eintrag vorhanden und "ProxyStatus" erhält den Standardwert "true". Existiert die Ini-Datei, wird sie geöffnet. Dann erhält "ProxyStatus" den Wert, der in der Ini steht, falls der entsprechende Eintrag vorhanden ist. Andernfalls auch den Standardwert "true".
Ini := TIniFile.Create(UserAppDataDir + AppDataRootDir + AppDataProjectDir + '\Config-t.ini');
try ProxyStatus := Ini.ReadBool('Default', 'ProxyStatus', True); finally Ini.Free; end; |
Re: Ini auslesen und Checkbox auf True setzen?
Wow.... das ist es :thumb: Thx... jetzt klappt das. :bouncing4:
|
Re: Ini auslesen und Checkbox auf True setzen?
Zitat:
Delphi-Quellcode:
wird keine ini-Datei erzeugt, sondern nur eine Instanz der Klasse TIniFile (auch wenn es sich so lesen mag).
TIniFile.Create( 'meine.ini' );
Existiert die Datei nicht, wird bei jedem Lesen halt einfach der Default-Wert zurückgegeben. Erst wenn ich in die instanz etwas schreibe
Delphi-Quellcode:
und genau erst dann wird die Datei auch angelegt.
WriteBool( 'Section', 'Ident', 'Value' );
Wäre ja auch blöd ... ich will nur was lesen und produziere aber evtl. einen Schreibzugriff, und dass dann mit niedrigen Rechten in einem geschützten Verzeichnis ... das rummst dann wie an silvester :mrgreen: |
Re: Ini auslesen und Checkbox auf True setzen?
Zitat:
|
Re: Ini auslesen und Checkbox auf True setzen?
Hallo,
ich hätte den Code einfach etwas umgebaut ...
Delphi-Quellcode:
ProxyStatus:= True; // eigentlich auch nicht notwendig
Ini := TIniFile.Create(UserAppDataDir + AppDataRootDir + AppDataProjectDir + '\Config-t.ini'); try ProxyStatus := Ini.ReadBool('Default', 'ProxyStatus', True); finally Ini.Free; end; CheckBox_XXX.Checked:= ProxyStatus; Heiko |
Re: Ini auslesen und Checkbox auf True setzen?
der Grund: hier werden so komische APIs in TIniFile gekapselt, welche NUR für jeden einzelnen Lese- und Schreibzugriff die Datei intern öffnen, komplett auslesen (wenn vorhanden) und dann, bei Veränderung, die Datei neu speichern.
Drum ist TIniFile ja auch so langsam und es wird im Create noch keine Datei angelegt. :mrgreen: |
Re: Ini auslesen und Checkbox auf True setzen?
Hallo,
wenn es nur ums auslesen gehen soll, kann er auch TMemIniFile nehmen. Dann aber nat. so
Delphi-Quellcode:
MemIniFile:= TMemIniFile.Create;
try // ALLE Daten auslesen finally MemIniFile.Free; end; Heiko |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:33 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-2025 by Thomas Breitkreuz