![]() |
ReadBool Ini-File
Hi,
mein Problem ist, dass mein Programm die Informationen in der ini nicht richtig ausliest. Es soll beim Starten der Anwendung den Status der Checkboxen ermitteln. Das funktioniert aber nicht. Sie bleiben leer, da ich als dritten Parameter false angegeben habe. Ich habe schon die Tipps in anderen Threads ausprobiert, aber keiner hat mir geholfen. Da das Schreiben in die Datei ja funktioniert, poste ich mal nur den Bereich in dem ausgelesen werden soll.
Delphi-Quellcode:
Cheerio
procedure TForm1.FormActivate(Sender: TObject);
begin ini:=TIniFile.create(ExtractFilePath(ParamStr(0))+ 'settings.ini'); with ini do try CheckBox1.Checked := ReadBool('myOne', '1', False); CheckBox2.Checked := ReadBool('myOne', '2', False); CheckBox3.Checked := ReadBool('myOne', '3', False); CheckBox4.Checked := ReadBool('myOne', '4', False); finally ini.free; end; end; |
Re: ReadBool Ini-File
Poste mal die Ini-Datei.
|
Hier die ini
Noch eine Frage: Fürs nächste Mal, welchen Code soll ich benutzen um eine ini-Datei zu posten? :wink:
Zitat:
|
Re: ReadBool Ini-File
Beneene die Eigenschaft 1 zum Test mal in c1 um.
|
Re: ReadBool Ini-File
Hat auch nicht geholfen. Kanns auch sein, dass es an einer Einstellung an der IDE liegt?
|
Re: Hier die ini
Zitat:
Zitat:
Delphi-Quellcode:
Viel Erfolg! Jürgen
with TIniFile.create(ExtractFilePath(ParamStr(0)) + 'settings.ini')
do begin try CheckBox1.Checked := ReadInteger('myOne', '1', 0) = 1; CheckBox2.Checked := ReadInteger('myOne', '2', 0) = 1; CheckBox3.Checked := ReadInteger('myOne', '3', 0) = 1; CheckBox4.Checked := ReadInteger('myOne', '4', 0) = 1; finally free; end; end; |
Re: ReadBool Ini-File
Danke,
aber das funktioniert leider auch nicht. Du meinst also, dass es an der IDE liegt, aber müsste es dann nicht bekannt sein, dass es bei meiner Version dieses Problem/diesen Bug gibt. Ich habe es aber auch schon mit einer if-Abfrage probiert, aber nicht ausdrücklich mit Integerwerten. Dann werde ich das mal ausprobieren. |
Re: ReadBool Ini-File
Lädst du auch die richtige Datei, bzw. ist die Datei vorhanden? Lass dir doch mal den Dateipfad ausgeben. :)
MfG freak |
Re: ReadBool Ini-File
Ich arbeite noch nicht lange mit Delphi und deswegen bin ich mir auch nicht ganz sicher, aber ich meine dass das
Delphi-Quellcode:
zu bedeuten hat, dass die Datei auf jeden Fall im richtigen Verzeichnis liegt.
TIniFile.create(ExtractFilePath(ParamStr(0)) + 'settings.ini')
|
Re: ReadBool Ini-File
An der IDE eher nicht, allenfalls am Compiler oder an Runtime-Packages. Aber auch das ist äußerst unwahrscheinlich.
Vergleiche doch mal den Code, mit dem der Checked-Status in die ini-Datei geschrieben wird (oder stelle diesen Abschnitt hier zur Verfügung), mit den Read-Befehlen; vielleicht fällt dadurch ein wesentlicher Unterschied auf. Zitat:
Jürgen |
Re: ReadBool Ini-File
Delphi-Quellcode:
Also das einzige, was mir hier auffällt ist, dass zwischen ")", "+" und "'settings.ini'" keine Leerzeichen sind, aber das dürfte ja kein Problem darstellen. Das "c" vor den Zahlen ist übrigens auch im Read-Bereich.
procedure TForm1.Button2Click(Sender: TObject);
begin ini:=TIniFile.create(ExtractFilePath(ParamStr(0))+ 'settings.ini'); try ini.WriteBool('myOne','c1',Checkbox1.Checked); ini.WriteBool('myOne','c2',Checkbox2.Checked); ini.WriteBool('myOne','c3',Checkbox3.Checked); ini.WriteBool('myOne','c4',Checkbox4.Checked); finally ini.free; end; end; |
Re: ReadBool Ini-File
Habe meine Änderung mal mit ^ hervorgehoben.
Zitat:
Zitat:
|
Re: ReadBool Ini-File
Bei mir steht in der INI ebenfalls 0 bzw. 1.
Das mit dem "\" könnte es natürlich sein. P.S.: Aber die Delphi-Hilfe sagt, in neueren Versionen sollte ![]() |
Re: ReadBool Ini-File
ExtractFilePath soolte eigentlich den Slash auch zurückliefern.
|
Re: ReadBool Ini-File
@mkinzler: Aber der Einsatz von Iclude... sollte doch nicht schaden, oder?
|
Re: ReadBool Ini-File
Vielleicht kann ich es ja noch irgendwann gebrauchen, aber leider hilft es mir im Moment nicht weiter. Aber das kann ich mir irgendwie nicht vorstellen, dass das stimmt, denn die Datei konnte schon bearbeitet werden. Ich könnte mir jetzt nur noch vorstellen, dass es an irgendeiner Einstellung im OI o.ä. hängen könnte, bloß weiß ich nicht welche das sein könnte. :gruebel:
|
Re: ReadBool Ini-File
Zitat:
Aber das braucht uns tatsächlich nicht zu stören; wenn Read/Write mit der gleichen Version erledigt wird, stimmt es schon überein. Ich muss mich natürlich für die Verwirrung entschuldigen. Aber hier finden wir den wirklichen Fehler: Zitat:
Jürgen |
Re: ReadBool Ini-File
Zitat:
|
Re: ReadBool Ini-File
Ich entschuldige mich vielmals, dass ich es nicht noch klarer formuliert habe. Aber ich habe nicht grundlos unter mein Posting geschrieben:
Zitat:
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, IniFiles, ShellAPI, ExtCtrls; type TForm1 = class(TForm) CheckBox1: TCheckBox; CheckBox2: TCheckBox; CheckBox3: TCheckBox; CheckBox4: TCheckBox; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Button1: TButton; Button2: TButton; RadioGroup1: TRadioGroup; RadioButton1: TRadioButton; RadioButton2: TRadioButton; RadioButton3: TRadioButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure FormActivate(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; ini: TIniFile; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin if (CheckBox1.Checked = True) then begin shellexecute(form1.Handle, 'open', PChar('pics.bat'), nil, nil, sw_show); end; if (CheckBox2.Checked = True) then begin shellexecute(form1.Handle, 'open', PChar('vids.bat'), nil, nil, sw_show); end; if (CheckBox3.Checked = True) then begin shellexecute(form1.Handle, 'open', PChar('docs.bat'), nil, nil, sw_show); end; if (CheckBox4.Checked = True) then begin shellexecute(form1.Handle, 'open', PChar('arch.bat'), nil, nil, sw_show); end; Form1.Close; end; procedure TForm1.Button2Click(Sender: TObject); begin ini := TIniFile.create(IncludeTrailingPathDelimiter(ExtractFilePath(ParamStr(0))) + 'settings.ini'); try ini.WriteBool('myOne','c1',Checkbox1.Checked); ini.WriteBool('myOne','c2',Checkbox2.Checked); ini.WriteBool('myOne','c3',Checkbox3.Checked); ini.WriteBool('myOne','c4',Checkbox4.Checked); finally ini.free; end; end; procedure TForm1.FormActivate(Sender: TObject); begin ini := TIniFile.create(IncludeTrailingPathDelimiter(ExtractFilePath(ParamStr(0))) + 'settings.ini'); with ini do try CheckBox1.Checked := ReadBool('myOne', 'c1', False); CheckBox2.Checked := ReadBool('myOne', 'c2', False); CheckBox3.Checked := ReadBool('myOne', 'c3', False); CheckBox4.Checked := ReadBool('myOne', 'c4', False); finally ini.free; end; end; end. |
Re: ReadBool Ini-File
Ich weiss jetzt nicht, ob Deine Zeilen funktionierten, habe aber mal eine Änderung für den Namen der ini vorzuschlagen. So hast Du immer automatisch eine Ini passend zum Anwendungsnamen. Das geht natürlich so nicht, wenn mehrere Echsen auf die gleiche Ini zugreifen sollen. Das mit der Funktion hat aber den Vorteil, dass Du an jeder Stelle im Programm den richtigen Ini-Namen zurückbekommst.
Delphi-Quellcode:
function AppIniName:String;
begin result := ChangeFileExt(ParamStr(0), '.ini'); // alternativ // result := IncludeTrailingPathDelimiter(ExtractFilePath(ParamStr(0))) // + 'settings.ini'; end; procedure TForm1.Button2Click(Sender: TObject); begin ini := TIniFile.create(AppIniName); try ... finally free; end; end; procedure TForm1.FormActivate(Sender: TObject); begin ini := TIniFile.create(AppIniName); with ini do try ... finally ini.free; end; end; |
Re: ReadBool Ini-File
Bist du sicher, daß der Eventhandler 'FormActivate' mit deinem Formular verbunden ist, d.h. ist der Name der Routine im Objektinspektor beim Ereignis 'OnActivate' sichtbar? Dieses Ereignis wird übrigens immer ausgelöst, wenn das Formular den Fokus erhält. Möchtest du in diesem Fall auch immer die .ini-Datei einlesen?
Zitat:
Delphi-Quellcode:
In diesem Fall würde eine Klammern mit IncludeTrailingBackslash unter Umständen den falschen Pfad liefern. Den korrekten erhält man dann mit:
s := ExtractFilePath('C:test.dat');
Delphi-Quellcode:
Gruß Hawkeye
s := ExtractFilePath(ExpandFileName('C:test.dat'));
|
Re: ReadBool Ini-File
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo!
Ich habe Deinen Quelltext überarbeitet und in ein Demoprojekt gehängt. Funktioniert unter Delphi6 gut. Teste das doch mal aus und guck Dir auch meine Kommentare bitte gut an. Hope it helps onlinekater |
Re: ReadBool Ini-File
Zitat:
In Deinem Quelltext scheint eigentlich nichts falsch zu sein. Mir fällt aber Folgendes auf: Zitat:
Vorschlag: Der Code für Button2Click wird in das Ereignis OnClose verschoben. War's denn das? Jürgen |
Re: ReadBool Ini-File
Also dann bedanke ich mich mal bei allen, insbesondere bei Onlinekater, und werde das erstmal so übernehmen und mich erst später damit befassen, da die Anwendung so schnell wie möglich fertig sein sollte.
Ach Jürgen, daran lag's nicht, aber trotzdem danke. Cheerio |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:21 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