![]() |
Speicher Problem
Hallo,
Ich habe ein Problem beim speichern von Einstellungen in INI Dateien und blicke überhaupt nicht, was da nicht stimmt. Also mein Programm erstellt sich beim starten eine INI Datei, aber nur dann wenn sie noch nicht vorhanden ist. Das habe ich im MainForm.Create so gelöst:
Delphi-Quellcode:
Dann habe ich im FORM.Show meines Einstellungs Forms das hier geschreiben, um auszulesen, wie die checkboxen belegt werden müssen:
If not fileexists('name.ini') then
begin //anlegen der INI Datei end;
Delphi-Quellcode:
Und als letztes jetzt noch, das wenn man den speicher button drückt, die Einstellungen in der INI Datei geändert werden:
If ini.ReadString('bla','bla','bla')='true' then
checkbox1.checked:=true else checkbox1.checked:=false;
Delphi-Quellcode:
Soweit dazu...
if checkbox1.Checked=true then
ini02.WriteString('bla','bla','true') else ini02.WriteString('bla','bla','false'); Das klappt auch alles, aber nur solange, wie man sich nicht abmeldet, oder neu startet. Danach stehen alle Einstellungen wieder auf der Standard Einstellung, also so wie die Einstellungen gemacht werden, wenn die INI Datei neu angelegt wird. Das finde ich äußerst merkwürdig und bräcuhte da mal eure Hilfe. Nur so als Info, es gibt eine Einstellung, da erstelle ich einen Autostarteintrag, auch wenn meine Anwendung nach einer neuen Anmeldung mir sagt die Funktion wäre aus, startet das Programm trotzten automatisch... Ich hoffe ihr könnt mir da weiterhelfen... :gruebel: //EDIT: Fehler im Code behoben |
Re: Speicher Problem
Hast du die Ini-datei zurückgeschrieben?
|
Re: Speicher Problem
Delphi-Quellcode:
Warum arbeitest Du nicht mit Boolean
If ini.ReadString('bla','bla','bla')='true' then
checkbox1.checked:='true' else checkbox1.checked:='false'; |
Re: Speicher Problem
Inis braucht man nicht zurückschreiben, soweit ich weiß. Hab zumindest noch nie irgendwas von wegen ini.Save oder so in die Richtung benutzt. Weiß aber auch nicht, ob das zurückschreiben erst beim Free passiert.
Allerdings sehe ich in dem Code da ein paar Unsauberkeiten. Die Klasse "TIniFile" implementiert nicht nur ReadString und WriteString, sondern auch ReadBool, WriteBool, ReadInteger, WriteInteger, ReadFloat, WriteFloat, usw. Du kannst also gleich mit CheckBox1.Checked := Ini.ReadBool ('Section', 'Ident', TRUE { Default }) zuweisungen machen. Und umgekehrt genauso: Ini.WriteBool ('Section', 'Ident', CheckBox1.Checked); FormShow ist auch kein guter Platz, um solche Sachen zu machen. Warum machst du das nicht gleich mit im FormCreate? Weiterhin brauchst du nicht prüfen, ob die Ini schon existiert. Ini := TIniFile.Create (FileName) erstellt die Ini, falls sie nicht vorhanden ist, ansonsten wird sie geöffnet und geladen. |
Re: Speicher Problem
Zitat:
Zu Nuclear-Ping: Ok dann werde ich meinen Code mal ein bisschen überarbeiten. Aber kann das den die Lösung für mein Problem sein? Wo hackst denn da, also mal von ein paar unreinheiten im Code, die ich jetzte ausbessern werde... :wink: |
Re: Speicher Problem
Am Besten Du zeigst mal deinen kompletten Code sonst ist das nur ein Raten.
Schon das hier kann nich klappen checkbox1.checked:='false'; da ein Boolean erwartet wird. |
Re: Speicher Problem
Mit "zurückschreiben" ist wohl das Speichern gemeint. Aber meiner Erfahrung nach ist das bei Ini-Files nicht explizit nötig.
Delphi-Quellcode:
procedure TMyForm.LoadSettings;
var Ini: TIniFile; begin Ini := TIniFile.Create ('Pfad\Dateiname'); try MyInput.Text := Ini.ReadString ('Bla', 'MyInput', ''); MyCheckbox.Checked := Ini.ReadString ('Bla', 'MyCheckbox', TRUE); ... finally FreeAndNil (Ini); end; end; procedure TMyForm.SaveSettings; var Ini: TIniFile; begin Ini := TIniFile.Create ('Pfad\Dateiname'); try Ini.WriteString ('Bla', 'MyInput', MyInput.Text); Ini.WriteBool ('Bla', 'MyCheckbox', MyCheckbox.Checked); ... finally FreeAndNil (Ini); end; end; |
Re: Speicher Problem
Zitat:
Den ganzen Code könnte ich natürlich posten, aber eigentlic steht der doch schon in meinem ersten Beitrag, nur das halt noch Inhalt da ist. Ich werde morgen aber mal den überarbeiteten Code schreiben. Aber kann es vielleicht auch daran liegen?:
Delphi-Quellcode:
ini:=tinifile.create(filename);
try //zugriff auf ini datei try //zugriff auf registry finally //zugriff auf registry ende end; finally ini.free end; |
Re: Speicher Problem
Nein, nicht an der try..finally Verschachtelung.
Übrigens:
Delphi-Quellcode:
procedure TMyForm.LoadSettings;
//... try MyInput.Text := Ini.ReadString ('Bla', 'MyInput', ''); MyCheckbox.Checked := Ini.ReadString ('Bla', 'MyCheckbox', TRUE); // <---<< ? String und Bool ? //... end;
Delphi-Quellcode:
procedure TMyForm.LoadSettings;
var Ini: TIniFile; begin Ini := TIniFile.Create ('Pfad\Dateiname'); try MyInput.Text := Ini.ReadString ('Bla', 'MyInput', ''); MyCheckbox.Checked := Ini.ReadBoolean ('Bla', 'MyCheckbox', TRUE); ... finally FreeAndNil (Ini); end; end; |
Re: Speicher Problem
So, hab jetzt nochmal ein bisschen an meiner Anwendung rumgebastelt un dabei folgendes Festgestellt:
Wenn ich aus meinen Einstellungen die Autostartfunktion entferne, läuft das Programm einwandfrei und ohne probleme, auch nach einem Neustart sind alle Einstellungen noch richtig. Halt so wie das alles so sein muss. Mit der Autostarteinstellung hab ich das oben geschilderte Problem, dass alle eingestelleten Einstellungen nach einem neustart verloren sind. Das heiß ein meiner Autostartfunktion muss ein fehler sein, ich poste mal den Code: Zum Eintragen: (der Code zum reinschreiben ist nicht von mir)
Delphi-Quellcode:
Und zum Löschen: (der Code ist auch nicht von mir)
var Reg: TRegistry
Reg := TRegistry.Create; try Reg.RootKey := HKEY_CURRENT_USER; Reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Run', True); Reg.WriteString('FMManager', ParamStr(0)); Reg.CloseKey; finally Reg.Free; end;
Delphi-Quellcode:
Ich hoffe in dem Code erkennt jemand den Fehler...
Reg := TRegistry.Create;
try Reg.RootKey := HKEY_CURRENT_USER; Reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Run', True); Reg.DeleteValue('FMManager'); Reg.CloseKey; finally Reg.Free; end; Ich habe ja so eine Vermutung, obwohl die eigntlich nicht sein kann. Und zwar, dass durch diese Autostarfunktion, immer die nur die Anwendung irgentwohinkopiert wird und dann ausgeführt wird, daraus folgt, dass die INI's immer wieder neu erstellt werden. Könnte das stimmen? :gruebel: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:10 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