Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Problem mit Ini.ReadBool(string,string,boolean) (https://www.delphipraxis.net/119052-problem-mit-ini-readbool-string-string-boolean.html)

gfjs 20. Aug 2008 09:17


Problem mit Ini.ReadBool(string,string,boolean)
 
Hallo Allerseits.

Ich versuche aus einer Ini-Datei folgenden Wert auszulesen:

[Editor]
DirToDisk=false;

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    CheckBox1: TCheckBox;
    Button2: TButton;
    CheckBox2: TCheckBox;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

uses
  IniFiles;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  ini : TIniFile;
  b,c  : boolean;
begin
  ini := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'Test.Ini');
  try
    CheckBox1.Checked := Ini.ReadBool('Editor', 'DirToDisk', true);
  finally
    ini.Free;
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  ini : TIniFile;
  b,c  : boolean;
begin
  ini := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'Test.Ini');
  try
    CheckBox1.Checked := Ini.ReadBool('Editor', 'DirToUSB', true);
  finally
    ini.Free;
  end;
end;

end.
Leider ist das Ergebnis nicht das, was ich erwarte. Ich habe aber keinen Hinweis darauf gefunden, was für den dritten Parameter einzugeben ist.

Wer kann mir da auf die Sprünge helfen?

Danke im Voraus.

Jürgen

mkinzler 20. Aug 2008 09:24

Re: Problem mit Ini.ReadBool(string,string,boolean)
 
Der 3. Paramter ist der Default-Wert, alos der wert der zurückgeliefert wird, wenn der Wert in der Ini nicht existiert

Deep-Sea 20. Aug 2008 09:31

Re: Problem mit Ini.ReadBool(string,string,boolean)
 
Zitat:

Zitat von gfjs
Ich habe aber keinen Hinweis darauf gefunden, was für den dritten Parameter einzugeben ist.

Klemmt deine F1-Taste? :roll: :mrgreen:


[edit]

Achya, es darf kein Semikolon am Ende eines Ini-Wertes stehen, außer es gehört zum Wert selbst.

[/edit]

sakura 20. Aug 2008 09:41

Re: Problem mit Ini.ReadBool(string,string,boolean)
 
Zitat:

Zitat von Deep-Sea
Klemmt deine F1-Taste? :roll: :mrgreen:

Es gibt Aussagen, welche so nicht gemacht werden müssen :roll:
Zitat:

Zitat von Deep-Sea
Achya, es darf kein Semikolon am Ende eines Ini-Wertes stehen, außer es gehört zum Wert selbst.

Was wolltest Du damit eigentlich sagen?

Zum Thema, es ging eigentlich um die Methode Delphi-Referenz durchsuchenValueExists der TIniFile-Klasse. Kam so nicht unbedingt in der Fragestellung rüber, aber egal ;-) Mit ValueExists findet man heraus, ob der entsprechende Eintrag in der INI-Datei überhaupt verfügbar ist. Manchmal ist auch dieses Wissen nötig.

...:cat:...

Deep-Sea 20. Aug 2008 09:47

Re: Problem mit Ini.ReadBool(string,string,boolean)
 
Zitat:

Zitat von sakura
Es gibt Aussagen, welche so nicht gemacht werden müssen :roll:

Und wie würde es dir besser passen? .......


Zitat:

Zitat von sakura
Was wolltest Du damit eigentlich sagen?

Zitat:

Zitat von gfjs
Hallo Allerseits.

Ich versuche aus einer Ini-Datei folgenden Wert auszulesen:

[Editor]
DirToDisk=false;

Das. Wenn hinter false ein Semikolon steht, ist klar, warum ReadBool immer den Defaultwert zurück bringt :wink:
(Ach Moment mal, ReadBool prüft auf <> 0 und nicht auf das Wort false, also geht es so gar nicht ...)

Sherlock 20. Aug 2008 10:00

Re: Problem mit Ini.ReadBool(string,string,boolean)
 
Und um solche Fehler zu vermeiden, sollte man Ini-Dateien auch nur von Hand bearbeiten, wenn man weiss was man tut. Ich lass es deswegen immer meine Programme machen :lol:

Sherlock

gfjs 20. Aug 2008 10:05

Re: Problem mit Ini.ReadBool(string,string,boolean)
 
@ Deep-Sea

Mein F1-Taste klemmt definitiv nicht und ich habe schon ca. eine Stunde rumprobiert, bevor ich mich an Euch gewandt habe. Das Semikolon war ein Tippfehler in meinem Post - in der Ini-Datei ist kein Semikolon.

Inzwischen habe ich auch festgestellt, dass nicht 'true' oder 'false' eingegeben werden muss, sondern '0' oder '1' - und dann klappt's auch. Und das bringt - zumindest bei mir - auch die F1-Taste nicht ans Licht.

@ Sakura

Vielen Dank für den Tip mit ValueExists

@ Sherlock

Ich bin ja gerade dabei, mir das anzueignen, was ich brauche um künftig ini-Dateien von Hand bearbeiten zu können.

Gruß Jürgen

Blackheart 20. Aug 2008 10:52

Re: Problem mit Ini.ReadBool(string,string,boolean)
 
Die ganze Sache sollte wohl eher so aussehen...
Delphi-Quellcode:
var
  Form1: TForm1;
  Ini : TIniFile;
implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  Ini := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'Test.Ini');
end;

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  Ini.Free;
end;

procedure TForm1.SaveClick(Sender: TObject);
begin
  Ini.WriteBool('Editor', 'DirToUSB', CheckBox.Checked);
end;

procedure TForm1.LoadClick(Sender: TObject);
begin
  CheckBox.Checked:=Ini.ReadBool('Editor', 'DirToUSB', True);
end;

end.
Hier mal noch ein Tutorial für dich
Ini Tutorial

sakura 20. Aug 2008 13:48

Re: Problem mit Ini.ReadBool(string,string,boolean)
 
Zitat:

Zitat von Blackheart
Die ganze Sache sollte wohl eher so aussehen...
Delphi-Quellcode:
var
  Form1: TForm1;
  Ini : TIniFile;

Um Gottes Willen, nein! Warum sollte man für das Ini-Objekt ein globales Objekt anlegen, völlig lösgelöst von seinem Host? Bitte nicht machen, diese Methode gehört zu einer Zeit vor Objekten, sprich Turbo Pascal 5.0 ;-) Spätestens aber seit Delphi 1 sollte man sich an die Gepflogenheiten der OOP halten - globale Variablen gehören (mit wenigen Ausnahmen) nicht dazu.

@Deep-Sea: Ich persönlich finde einen solchen Umgang nicht gerade respektvoll (Wortwahl [hier wenig] und Art-und-Weise etwas zu vermitteln [hier um so mehr]).

...:cat:...

Blackheart 20. Aug 2008 16:01

Re: Problem mit Ini.ReadBool(string,string,boolean)
 
Zitat:

Zitat von sakura
Zitat:

Zitat von Blackheart
Die ganze Sache sollte wohl eher so aussehen...
Delphi-Quellcode:
var
  Form1: TForm1;
  Ini : TIniFile;

Um Gottes Willen, nein! Warum sollte man für das Ini-Objekt ein globales Objekt anlegen, völlig lösgelöst von seinem Host? Bitte nicht machen, diese Methode gehört zu einer Zeit vor Objekten, sprich Turbo Pascal 5.0 ;-) Spätestens aber seit Delphi 1 sollte man sich an die Gepflogenheiten der OOP halten - globale Variablen gehören (mit wenigen Ausnahmen) nicht dazu.

@Deep-Sea: Ich persönlich finde einen solchen Umgang nicht gerade respektvoll (Wortwahl [hier wenig] und Art-und-Weise etwas zu vermitteln [hier um so mehr]).

...:cat:...

Naja eigentlich ging es ja um das schreiben und lesen von Bool ansonsten
magst du recht haben. :wink:


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

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