Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Tutorials und Kurse (https://www.delphipraxis.net/36-tutorials-und-kurse/)
-   -   Delphi Ini Tutorial © Toenn (https://www.delphipraxis.net/24990-ini-tutorial-%A9-toenn.html)

Toenn 29. Jun 2004 13:52


Ini Tutorial © Toenn
 
Hi,
dies ist mein erstes Tutorial und ich hoffe, dass es leicht verständlich ist.

1. Was sind INI's
2. Welche Vorteile haben INI's
3. Wie kann ich Einstellungen in INI's speichern
4. Wie kann ich Einstellungen aus INI's lesen

_______________________

Was sind INI's ?
INI's sind Dateien, um viele Einstellungen in einer Datei zu speichern.

Welche Vorteile haben INI's ?
-Können viele Einstellungen speichern
-Sind übersichtlich
-Viel mehr :D

Welche Nachteile haben INI's ?
-Haben laut S2B nur eine begrenzte Größe
-Können bei sehr vielen Einstellungen langsam werden

Wie kann ich Einstellungen in INI's speichern?
Das kommt ganz darauf an, was man speichern will.
Wenn wir die Position Left und Top von einer Form speichern wollen, müssen wir den Befehl WriteInteger verwenden.
Das geht so (In die Uses-Klausel muss IniFiles eingefügt werden):
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
 begin
  //TIniFile wird geladen
  with TIniFile.Create(ExtractFilePath(ParamStr(0)) +  'data.ini') do
   try
    //Top wird geschrieben, Left wird geschrieben
    WriteInteger('Position', 'TOP', Form1.Top);
    WriteInteger('Position', 'Left', Form1.Left);
   finally
    //Ini wird freigegeben
    Free;
  end;
end;
Ein Edit kann man so schreiben:
Delphi-Quellcode:
WriteString('Text', 'Edit1', Edit1.Text);
Wie kann ich das ganze jetzt wieder laden?
Das geht fast genauso:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
 begin
  //TIniFile wird geladen
  with TIniFile.Create(ExtractFilePath(ParamStr(0)) +  'data.ini') do
   try
    //Top wird geladen, Left wird geladen
    Form1.Top := ReadInteger('Position', 'TOP', 0);
    Form1.Left := ReadInteger('Position', 'Left', 0);
   finally
    //Ini wird freigegeben
    Free;
  end;
end;
Das Editfeld laden geht so:
Delphi-Quellcode:
Edit1.Text := ReadString('Text', 'Edit1', '');

Das wars für heute.
Morgen oder Übermorgen gibts die Fortsetzung wie man z.B. speichern kann ob die Checkbox gecheckt ist.

Ultimator 29. Jun 2004 13:58

Re: Ini Tutorial © Toenn
 
:thuimb:

Endlich konnte ich mein Ini-File-Wissen wieder auffrischen, nachdem ich 3 Monate nix mehr damit gemacht hatte :-)

Ääh, und was du dringend ausbessern solltest: Schreib oben nicht "Letztes Wort" sondern besser "Nachwort" oder sowas. :wink:

MasterC 29. Jun 2004 16:49

Re: Ini Tutorial © Toenn
 
Ich selber habe mal versucht KeyWords für Compiler und Compiler Informationen in einer Ini Datei zu speichern. Ich habe viel Zeit damit verbracht um Stringlisten nicht mit Komma in einen String zu verwandeln, sondern mit einem "|". Das Komma hatten die KeyWords selber, darum konnte ich kein Komma verwenden. Als ich dann gemerkt habe, das man nur bestimmt lange Strings in Ini's speichern kann, wurde mir klar, dass die ganzen Funktionen umsonst waren. :mrgreen: Moral der Geschichte: Speichere nie lange Strings in Ini's. :warn:

Toenn 29. Jun 2004 18:50

Re: Ini Tutorial © Toenn
 
Liste der Anhänge anzeigen (Anzahl: 1)
Und weiter gehts.

5. Wie kann ich denn jetzt speichern, ob eine Checkbox gecheckt ist?


5. Boolean

Das geht ganz einfach, mit der Funktion WriteBool und ReadBool:
Delphi-Quellcode:
...
begin
 with TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'data.ini') do
  try
   WriteBool('Data', 'Checkbox1', CheckBox1.Checked);
  finally
   Free;
  end;
end;
Laden kann man das ganze so:
Delphi-Quellcode:
...
begin
 with TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'data.ini') do
  try
   CheckBox1.Checked := ReadBool('Data', 'Checkbox1', False);
  finally
   Free;
  end;
end;
Dazu gibts auch noch eine Demoanwendung im Anhang.
So viel Spaß. Bald gibts dann noch wie man Sections löscht, das Datum und die Uhrzeit in INI's speichert.

Bis Später

Nicodius 30. Jun 2004 05:34

Re: Ini Tutorial © Toenn
 
ja das tut ist wirklich gut :thuimb: :thuimb:

TeronG 10. Aug 2004 12:29

Re: Ini Tutorial © Toenn
 
Ohh .. nett :)

So habe ich über INI's erfahren :-D


EDIT:Url korrigiert

S2B 10. Aug 2004 12:33

Re: Ini Tutorial © Toenn
 
Und ich hab so die ini-Dateien zu schätzen gelernt! :wink:

BullsEye 23. Nov 2007 20:51

Re: Ini Tutorial © Toenn
 
Ich brauchte es für ein Projekt und da hat es mir nen Kumpel empfohlen.. und eig bin ich nur durch dies Tutorial richtig schlau geworden und es funzt alles wie gewünscht...

ALSO: DANKE DANKE DANKE für das Tutorial ;) :angel:

Rakshasa 23. Nov 2007 21:13

Re: Ini Tutorial © Toenn
 
Gaaanz wichtig: Einen Abschnitt zu TMemIniFile erstellen!! :) Ist gerade beim Speichern größerer Datenmengen der herkömlichen TIniFile weit überlegen.

Muetze1 23. Nov 2007 23:10

Re: Ini Tutorial © Toenn
 
Ich hätte ein paar Anmerkungen:

1. Verwende in dem Code bitte nicht die Form1 Variable. Einfach samt dem Punkt weglassen, schliesslich befindest du dich in einer Methode. Der Code würde nie mit mehr als einer TForm1 Instanz funktionieren.
2. Bitte den Code ordentlich einrücken bzw. formatieren. Die jetzige Codeformatierung suggeriert einem, dass das "End" zum "With" gehört, was nicht der Fall ist. Das End gehört zum try/finally und with do ist ohne Blockdefinition genutzt (also nur für die nächste Anweisung gültig, und das ist hier das komplette try/finally/end Konstrukt).
3. Erwähne nochmal wo die INI abgelegt wird, wenn man keinen absoluten Pfad angibt sondern nur einen Dateinamen. Dies ist eine häufige Fehlerursache und kann durch das Tutorial auch gleich mal mit behandelt werden.

Ansonsten eine schön einfache Darstellung bzw. Beschreibung zur INI.

Sharky 24. Nov 2007 06:58

Re: Ini Tutorial © Toenn
 
Hihi.... ihr habt aber schon darauf geachtet von wann das Tutorial ist?

Elvis 24. Nov 2007 07:16

Re: Ini Tutorial © Toenn
 
Zitat:

Zitat von Sharky
Hihi.... ihr habt aber schon darauf geachtet von wann das Tutorial ist?

ich habe mich schon gewundert wer heute noch was mit Inis anfängt.
Macht plötzlich mehr sinn... :mrgreen:

Alien426 10. Dez 2007 20:07

Re: Ini Tutorial © Toenn
 
Ich arbeite eigentlich ganz gerne mit einer INI für Einstellungen. So kann man einfach Programme gesamt kopieren (und z.B. auch auf einem USB-Stick einsetzen) und die Registry wird nicht verschmutzt.

Es gibt aber mehrere Punkte, die gegen INI-Dateien sprechen:
Why are INI files deprecated in favor of the registry?

MrKnogge 10. Dez 2007 20:19

Re: Ini Tutorial © Toenn
 
@ Alien426
Wobei man heute aber eher XML-Dateien verwendet.

Gruß

Mokuba01 15. Dez 2007 07:16

Re: Ini Tutorial © Toenn
 
Hi, dein Tutorial is sehr gut :thumb: aber ich hätte da noch eine Frage:
angenommen ich schreib einen eigenen Typ z.B.:
Delphi-Quellcode:
type Zahlen = record
a:integer;
b:integer;
Dann schreibe ich eine Variable:
Delphi-Quellcode:
var
irgendwas:Zahlen
Gibt es nun irgendeine Möglichkeit die Variable 'irgendwas' als ini zu speichern.
Und wenn ja, Wie? :?:
Danke im Vorraus
Gruß Mokuba01

Die Muhkuh 15. Dez 2007 07:19

Re: Ini Tutorial © Toenn
 
Hi,

Du könntest eine Hier im Forum suchentypisierte Datei verwenden. ;-)

Und btw. wie schon erwähnt: Benutze lieber XML anstatt Inis ;-)

Progman 15. Dez 2007 09:51

Re: Ini Tutorial © Toenn
 
Zitat:

Zitat von Mokuba01
Hi, dein Tutorial is sehr gut :thumb: aber ich hätte da noch eine Frage:
angenommen ich schreib einen eigenen Typ z.B.:
Delphi-Quellcode:
type Zahlen = record
a:integer;
b:integer;
Dann schreibe ich eine Variable:
Delphi-Quellcode:
var
irgendwas:Zahlen
Gibt es nun irgendeine Möglichkeit die Variable 'irgendwas' als ini zu speichern.
Und wenn ja, Wie? :?:
Danke im Vorraus
Gruß Mokuba01

Einfach:
Delphi-Quellcode:
IniFile.WriteInteger('blah','teil1',Irgendwas.a);
IniFile.WriteInteger('blah','teil2',Irgendwas.b);

Mokuba01 15. Dez 2007 10:44

Re: Ini Tutorial © Toenn
 
Zitat:

Zitat von Progman
Zitat:

Zitat von Mokuba01
Hi, dein Tutorial is sehr gut :thumb: aber ich hätte da noch eine Frage:
angenommen ich schreib einen eigenen Typ z.B.:
Delphi-Quellcode:
type Zahlen = record
a:integer;
b:integer;
Dann schreibe ich eine Variable:
Delphi-Quellcode:
var
irgendwas:Zahlen
Gibt es nun irgendeine Möglichkeit die Variable 'irgendwas' als ini zu speichern.
Und wenn ja, Wie? :?:
Danke im Vorraus
Gruß Mokuba01

Einfach:
Delphi-Quellcode:
IniFile.WriteInteger('blah','teil1',Irgendwas.a);
IniFile.WriteInteger('blah','teil2',Irgendwas.b);

Nein ich meine das 'irgendwas' gespeichert wird und nicht das alle einzelteile gespeichert werden

Progman 15. Dez 2007 11:20

Re: Ini Tutorial © Toenn
 
TiniFile hat von Haus aus nur ein paar festgelegte Typen:
ReadString(), ReadInteger(), ReadBool(), ReadTime(), ReadDateTime(), ReadFloat() und ReadBinaryStream().
Entweder machst du eine neue Klasse, die von TIniFile abgeleitet ist und implementierst das
oder du greifst auf File of Record oder ähnliches zurück
oder nimmst lieber doch XML (obwohl du da auch die einzelnen Werte trennen müsstest)
;)

jmit 15. Dez 2007 13:45

Re: Ini Tutorial © Toenn
 
Zitat:

Zitat von MrKnogge
...
Wobei man heute aber eher XML-Dateien verwendet.
...

Also ich würde XML-Dateien vorziehen.

Gruß Jörg


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:19 Uhr.

Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf