Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Ini Files (https://www.delphipraxis.net/102381-ini-files.html)

k4ni 27. Okt 2007 14:22


Ini Files
 
Hallo habe eine kleine frage.
Ich habe bei Form1Create das hier drin stehen:
Delphi-Quellcode:
   
Ini := TIniFile.Create(ExtractFilePath(ParamStr(0))+'Options.ini');

   if Ini.ValueExists('GameButtons', 'HowMany') = false then
  Ini.WriteString('GameButtons', 'HowMany', '9 Buttons');
 Form2.ComboBOx1.Text:= Ini.ReadString('GameButtons', 'HowMany', 'asdf');
Doch er gibt mir immer Acces violations beim starten, wieso ?

Assertor 27. Okt 2007 14:27

Re: Ini Files
 
Hi k4ni,

Zitat:

Zitat von k4ni
Ich habe bei Form1Create das hier drin stehen:...
Delphi-Quellcode:
   
 Form2. ...

Genau deswegen. Form2 wird nach Form1 erst erzeugt, ein Zugriff ist hier also noch nicht möglich.

Btw: Machst Du später für das WriteString auch ein UpdateFile? Sonst wunderst Du dich, warum sich nichts in der INI ändert.

Gruß winkel79

patti 27. Okt 2007 14:28

Re: Ini Files
 
Mache das nicht im Create von Form 1, sondern eher beim Show von Form1. Beim Createn von Form 1 gibts noch kein Form 2, deswegen kommt es zur AV ;-)

P@Tti

k4ni 27. Okt 2007 14:30

Re: Ini Files
 
Zitat:

Zitat von winkel79
Hi k4ni,

Zitat:

Zitat von k4ni
Ich habe bei Form1Create das hier drin stehen:...
Delphi-Quellcode:
   
 Form2. ...

Genau deswegen. Form2 wird nach Form1 erst erzeugt, ein Zugriff ist hier also noch nicht möglich.

Btw: Machst Du später für das WriteString auch ein UpdateFile? Sonst wunderst Du dich, warum sich nichts in der INI ändert.

Gruß winkel79

ahja ok danke! Hab mich schon gewundert.
Ehm ich weis jetzt nicht ganz was du mit UpdateFile meinst, aber bei mir läuft der rest perfekt.

Nuclear-Ping 27. Okt 2007 14:34

Re: Ini Files
 
if-Abfragen, ob ein Eintrag in der Ini existiert kann man sich eigentlich sparen, da man einen Standardwert angeben kann, der genommen wird, wenn der Eintrag nicht existiert.
Alt:
Delphi-Quellcode:
if Ini.ValueExists('GameButtons', 'HowMany') = false then
  Ini.WriteString('GameButtons', 'HowMany', '9 Buttons');
Neu:
Delphi-Quellcode:
var
  DeineZielVariable: String;

//...

  DeineZielVariable := Ini.ReadString('GameButtons', 'HowMany', '9 Buttons');

Matze 27. Okt 2007 14:39

Re: Ini Files
 
Hallo,

noch ein paar Anmerkungen zu deinem Code, damit du's in Zukunft besser machen kannst. ;)

Überprüfe nie auf "= false". Wieso?.
Des weiteren nutze Resourcenschutzblöcke, damit der Speicher auch im Fehlerfall wieder freigegeben wird:

Delphi-Quellcode:
Ini := TIniFile.Create(...);
try
  // Ini-Operationen
finally
  FreeAndNil(Ini);
end;
Gruß

Nuclear-Ping 27. Okt 2007 14:45

Re: Ini Files
 
[OT]
Zitat:

Zitat von Brüggendiek
... die Variable ist bei <>0 möglicherweise weder true noch false! ...

Dazu fällt mir ein:
Delphi-Quellcode:
type
  TFemaleBool = (True, False, Maybe)
:mrgreen:
[/OT]

grenzgaenger 27. Okt 2007 17:51

Re: Ini Files
 
tzz, tzzz
Delphi-Quellcode:
0 --> false && !0 --> true
von daher gibts eigentlich keinen zwitter ;-)

Assertor 28. Okt 2007 09:58

Re: Ini Files
 
Zitat:

Zitat von k4ni
Ehm ich weis jetzt nicht ganz was du mit UpdateFile meinst, aber bei mir läuft der rest perfekt.

UpdateFile bewirkt, daß alles was Du z.B. per WriteString änderst auch wirklich gespeichert wird.

Ohne UpdateFile sind diese Änderungen in der Datei noch nicht gemacht.

Gruß winkel79

Ralf Kaiser 28. Okt 2007 10:18

Re: Ini Files
 
Zitat:

Zitat von winkel79
UpdateFile bewirkt, daß alles was Du z.B. per WriteString änderst auch wirklich gespeichert wird.

Ohne UpdateFile sind diese Änderungen in der Datei noch nicht gemacht.

Allerdings wrid UpdateFile automatisch aufgerufen, wenn das TIniFile-Objekt freigegeben wird:

Delphi-Quellcode:
destructor TIniFile.Destroy;
begin
  UpdateFile;        // flush changes to disk
  inherited Destroy;
end;
Bei korrekter Freigabe werden also auf jeden Fall die Daten geschrieben.

Ciao,
Ralf


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:34 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