Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi ReadBool Ini-File (https://www.delphipraxis.net/75162-readbool-ini-file.html)

pilic 15. Aug 2006 12:06

Re: ReadBool Ini-File
 
Delphi-Quellcode:
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;
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.

Michael Habbe 15. Aug 2006 12:18

Re: ReadBool Ini-File
 
Habe meine Änderung mal mit ^ hervorgehoben.
Zitat:

Zitat von pilic
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
begin
  ini := TIniFile.create(IncludeTrailingBackslash(ExtractFilePath(ParamStr(0))) + 'settings.ini');
                         ^^^^^^^^^^^^^^^^^^^^^^^^ // wichtig
  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;

ExtractFilePath gibt kein "\" zurück, es sei denn, die Anwendung wurde in "c:\" gestartet. IncludeTrailingBackSlash fügt das abschließende "\" hinzu. Es könnte also sein, dass Deine Anwendung wer weiss wo eine ini geschrieben hat.


Zitat:

Zitat von Jürgen Thomas
Zitat:

Zitat von pilic
[myOne]
1=1
2=1
3=0
4=0

Deine Werte sind integer, nämlich 0/1. Eigentlich speichert TIniFile bool-Werte mit:
Zitat:

1=True
2=True
3=False
4=False

Das ist nicht richtig. Wenn man mit WriteBool schreibt, wird schon 1/0 in die Ini geschrieben, welches ja für True/False steht. Das funktioniert alles wunderbar. Ich setze es zu Dutzenden in meiner Anwendung ein.

ManuMF 15. Aug 2006 12:22

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 Delphi-Referenz durchsuchenIncludeTrailingPathDelimiter verwendet werden.

mkinzler 15. Aug 2006 12:22

Re: ReadBool Ini-File
 
ExtractFilePath soolte eigentlich den Slash auch zurückliefern.

ManuMF 15. Aug 2006 12:24

Re: ReadBool Ini-File
 
@mkinzler: Aber der Einsatz von Iclude... sollte doch nicht schaden, oder?

pilic 15. Aug 2006 12:27

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:

Jürgen Thomas 15. Aug 2006 12:40

Re: ReadBool Ini-File
 
Zitat:

Zitat von Michael Habbe
Das ist nicht richtig. Wenn man mit WriteBool schreibt, wird schon 1/0 in die Ini geschrieben, welches ja für True/False steht. Das funktioniert alles wunderbar. Ich setze es zu Dutzenden in meiner Anwendung ein.

Ich hatte extra bei mir in mehreren Ini-Dateien (Delphi Pro) nachgeschaut; dort steht überall "True/False" drin.

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:

Zitat von pilic
Delphi-Quellcode:
CheckBox1.Checked := ini.ReadBool('myOne','1',false);
//  usw.
Delphi-Quellcode:
ini.WriteBool('myOne','c1',Checkbox1.Checked);
//  usw.
Das "c" vor den Zahlen ist übrigens auch im Read-Bereich.

Aber das ist doch genau der Unterschied: Gespeichert werden die Werte unter "c1" ff., gelesen unter "1" ff. Das muss natürlich in Übereinstimmung gebracht werden.

Jürgen

Muetze1 15. Aug 2006 12:45

Re: ReadBool Ini-File
 
Zitat:

Zitat von mkinzler
ExtractFilePath soolte eigentlich den Slash auch zurückliefern.

Es kann auch ein Result ohne abschliessenden Backslash geben, wenn es der Rootpath ist, dann gibt er nur bis zum Doppelpunkt der Laufwerksangabe zurück.

pilic 15. Aug 2006 12:48

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:

Das "c" vor den Zahlen ist übrigens auch im Read-Bereich.
Ich dachte einfach nur, dass es nicht nötig wäre den Bereich noch mal zu posten, nur weil darin 4 "c"s mehr vorkommen. Aber ich werde jetzt mal den vollständigen Code posten. Ist ja nicht so lang.

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.

Michael Habbe 15. Aug 2006 13:02

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;


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:09 Uhr.
Seite 2 von 3     12 3      

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