AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ReadBool Ini-File

Ein Thema von pilic · begonnen am 15. Aug 2006 · letzter Beitrag vom 15. Aug 2006
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von pilic
pilic

Registriert seit: 10. Aug 2006
Ort: Aschbach
131 Beiträge
 
Turbo Delphi für Win32
 
#11

Re: ReadBool Ini-File

  Alt 15. Aug 2006, 13:06
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.
Dominik Bihn
  Mit Zitat antworten Zitat
Benutzerbild von Michael Habbe
Michael Habbe

Registriert seit: 10. Aug 2005
264 Beiträge
 
Turbo Delphi für Win32
 
#12

Re: ReadBool Ini-File

  Alt 15. Aug 2006, 13:18
Habe meine Änderung mal mit ^ hervorgehoben.
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 von Jürgen Thomas:
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.
  Mit Zitat antworten Zitat
Benutzerbild von ManuMF
ManuMF

Registriert seit: 11. Jul 2005
1.016 Beiträge
 
Delphi 6 Personal
 
#13

Re: ReadBool Ini-File

  Alt 15. Aug 2006, 13:22
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.
Gruß,
ManuMF

Endlich hab ich was Positives an Vista entdeckt: Das mitgelieferte Mahjongg
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#14

Re: ReadBool Ini-File

  Alt 15. Aug 2006, 13:22
ExtractFilePath soolte eigentlich den Slash auch zurückliefern.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von ManuMF
ManuMF

Registriert seit: 11. Jul 2005
1.016 Beiträge
 
Delphi 6 Personal
 
#15

Re: ReadBool Ini-File

  Alt 15. Aug 2006, 13:24
@mkinzler: Aber der Einsatz von Iclude... sollte doch nicht schaden, oder?
Gruß,
ManuMF

Endlich hab ich was Positives an Vista entdeckt: Das mitgelieferte Mahjongg
  Mit Zitat antworten Zitat
Benutzerbild von pilic
pilic

Registriert seit: 10. Aug 2006
Ort: Aschbach
131 Beiträge
 
Turbo Delphi für Win32
 
#16

Re: ReadBool Ini-File

  Alt 15. Aug 2006, 13:27
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.
Dominik Bihn
  Mit Zitat antworten Zitat
Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#17

Re: ReadBool Ini-File

  Alt 15. Aug 2006, 13:40
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 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
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#18

Re: ReadBool Ini-File

  Alt 15. Aug 2006, 13:45
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.
  Mit Zitat antworten Zitat
Benutzerbild von pilic
pilic

Registriert seit: 10. Aug 2006
Ort: Aschbach
131 Beiträge
 
Turbo Delphi für Win32
 
#19

Re: ReadBool Ini-File

  Alt 15. Aug 2006, 13:48
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.
Dominik Bihn
  Mit Zitat antworten Zitat
Benutzerbild von Michael Habbe
Michael Habbe

Registriert seit: 10. Aug 2005
264 Beiträge
 
Turbo Delphi für Win32
 
#20

Re: ReadBool Ini-File

  Alt 15. Aug 2006, 14:02
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;
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:54 Uhr.
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