![]() |
INI File Schreiben und auslesen
Liebes Forum,
als Neuling mit Delphi versuche ich es bei Euch um eine Antwort zu bekommen was ich falsch mache. Ich möchte in eine INI Datei die letzte Eingestellte Sprache eintragen und weis leider beim besten willen nicht wie ich das gebacken kriege. Ich habe dsa TUT bem Delphi-Treff genommen und adaptiert. Ich habe auch dort schon einen Beitrag um Hilfe geschrieben. Leider aber nicht die Hilfe bekommen die ich mir erhoffte. Ich habe folgenden Code geschrieben um die INI Datei zu schreiben:
Delphi-Quellcode:
und den Code um die Sprache wieder zum auslesen:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
const Sektion='language'; Eintrag='last language'; var ini: TIniFile; filename: String; begin SiLang1.Language := ComboBox1.Items.Strings[ ComboBox1.ItemIndex ]; filename := ExtractFilePath(ParamStr(0)) + './ini/einstellungen.ini'; //??? ini := TIniFile.Create(filename); try ini.WriteString(Sektion,Eintrag,ComboBox1.Text); finally Ini.Free; end;
Delphi-Quellcode:
Bitte macht mich nicht fertig wenn ich es nicht verstehe, aber bei mir funktioniert es nicht.
procedure TForm1.FormCreate(Sender: TObject);
const Sektion='language'; Eintrag='last language'; var ini: TIniFile; filename: String; begin filename := ExtractFilePath(ParamStr(0)) + './ini/einstellungen.ini'; //??? ini := TIniFile.Create(filename); ComboBox1.Text := Ini.ReadString('Sektion', 'Eintrag', 'Wert'); finally ini.Free; Kann mir jemand von Euch hier aus dem Forum etwas behilflich sein ? Ich wäre sehr dankbar. Herzliche Grüsse aus der Schweiz Chris |
AW: INI File Schreiben und auslesen
Delphi-Quellcode:
filename := ExtractFilePath(ParamStr(0)) + 'ini\einstellungen.ini';
|
AW: INI File Schreiben und auslesen
Vielen Dank Björk,
ok, dann muss ich also doch nicht "./" eingeben. Zitat:
ich denke ich mache im Code:
Delphi-Quellcode:
irgend was falsch.
ComboBox1.Text := Ini.ReadString('Sektion', 'Eintrag', 'Wert');
Es steht nun in der INI Datei "language" als Sektion 1 und in Sektion 2 steht nun der Wert "last language" Und als Wert steht nun Englisch oder Deutsch oder so. Aber wenn ich die Applikation starte steht da immer nur Wert in der Combobox. Leider verstehe ich nicht so viel dass ich mir den Code einfach zusammenbauen kann. eigentlich möchte ich ja schreiben aus Eintrag Sektion1 (Sektion) und Sektion 2 (Eintrag) den Wert, ausgeben in Combobox1.Text. Das steht nun bei mir aber immer "Wert" Danke dass Du Dir für mich Zeit nimmst. Chris |
AW: INI File Schreiben und auslesen
Hallo Chris,
bist du mit Verzecihnis C:\...\ini\ sicher ? BTW: Inifile Format: [Section] Indent = Value Ini.WriteInteger('A','B',1) ergibt: [A] B = 1 |
AW: INI File Schreiben und auslesen
Delphi-Quellcode:
bedeutet, dass du möglicherweise in ein Unterverzeichnis des Programme Ordners schreiben willst, was in der Regel nicht geht, wenn man kein Admin ist.
filename := ExtractFilePath(ParamStr(0)) + 'ini\einstellungen.ini';
Delphi-Quellcode:
bedeutet, dass du den Text der Combobox mit dem Text 'Wert' beschreiben willst. Das soll doch nicht deine Absicht sein.
ComboBox1.Text := Ini.ReadString('Sektion', 'Eintrag', 'Wert');
Du willst doch bestimmt, dass die Comboxbox mehrere Einträge hat und ein Eintrag gewählt wird. Das machst du mit "IndexOf". |
AW: INI File Schreiben und auslesen
Beispiel:
Delphi-Quellcode:
Ini ist eine ganz normale Klasse, sie unterschiedet sich von den meisten vielleicht dadurch, dass man in Create ein Pfad angeben muss. Experimentiere nicht mit dem Pfad, sondern liefere etwas mit Hand und Fuß. Wenn du keine Ahnung hast was für ein Pfad du angibst, dann weißt du auch nicht wo die Ini landet.
uses
IniFiles; procedure TForm1.Button1Click(Sender: TObject); var Path, FileName: String; IniFile: TIniFile; s: String; begin Path := ExtractFilePath(ParamStr(0)); //hat schon ein Backslash am Ende Path := IncludeTrailingPathDelimiter(Path); //braucht man hier nicht, wenn man sich aber unsicher ist, ist es nicht falsch FileName := 'Einstellungen.ini'; //Erstellt falls nötig den Unterordner if not ForceDirectories(Path + 'INI') then begin MessageDlg('Es wurde kein Unterordner angelegt', mtError, [mbOK], 0); Exit; end; //Alternative: Prüft auf Unterordner {if not DirectoryExists(Path + 'INI') then begin MessageDlg('Es wurde kein Unterordner gefunden', mtError, [mbOK], 0); Exit; end; } IniFile := TIniFile.Create(Path + FileName); try IniFile.WriteString('Sektion', 'Ident', 'Wert'); s := IniFile.ReadString('Sektion', 'Ident', 'Ersatzwert bei Fehler'); finally IniFile.Free; end; ShowMessage(s); end; Das sieht nicht gut aus:
Delphi-Quellcode:
ExtractFilePath liefert immer ein Backslash am Ende, also z. B. c:\Temp\Übungen\Projekt1\. Du brauchst also nach ExtractFilePath keinen Backslash angeben (schon gar nicht ein Slash).
ExtractFilePath(ParamStr(0)) + './ini/einstellungen.ini';
Bist du nicht sicher ob am Ende ein Backslash ist, überprüfe es oder verwende die Funktion
Delphi-Quellcode:
. Sie macht nichts kaputt, man kann sie zur Not also immer verwenden. Wenn da bereits ein Backslash am Ende ist, wird nichts gemacht, sonst Backslash angefügt.
IncludeTrailingPathDelimiter
Willst du es in einen Ordner schrieben, dann in der Form:
Delphi-Quellcode:
. Wie gesagt, ExtractFilePath liefert am ende immer einen Backslash.
ExtractFilePath(ParamStr(0)) + 'ini/einstellungen.ini';
Fehlt der Ordner "Ini\", gibt es eine Fehlermeldung. Also vorher vergewissern ob der Ordner existiert. Oder mit
Delphi-Quellcode:
erstellen.
ForceDirectories
Der Rest ist üblich wie bei anderen Klassen: Objekt deklarieren und erstellen, mit Objekt arbeiten, zuletzt IniFile Objekt freigeben. |
AW: INI File Schreiben und auslesen
Das was du in '...' setzt, wird von Delphi auch als String interpretiert. Also hat er in der Ini eine Sektion "Sektion" gesucht, um dort den Eintrag "Eintrag" lesen zu können.
Wenn du die Konstanten (
Delphi-Quellcode:
) verwenden willst, dann darfst du das nicht in '...' setzen.
const Sektion='language'; ...
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
const Sektion='language'; Eintrag='last language'; var ini: TIniFile; filename: String; begin filename := ExtractFilePath(ParamStr(0)) + '\ini\einstellungen.ini'; //??? ini := TIniFile.Create(filename); // ComboBox1.Text := Ini.ReadString('Sektion', 'Eintrag', 'Wert'); ComboBox1.Text := Ini.ReadString(Sektion, Eintrag, 'Standardwert'); finally ini.Free; |
AW: INI File Schreiben und auslesen
Hallo Björk, nuclearping, Popov, und alle die Mit Lesen,
Ja, es ist eigentlich so angedacht, dass ich das Programm frei wählbar Installieren möchte, das bedeutet, dass es überall geladen werden kann so auch die INI Datei, deshalb keinen Direkten Pfad. Ich habe gelesen dass mann über den Parameter:
Delphi-Quellcode:
den Programm Ordner
ExtractFilePath(ParamStr(0))
auslesen kann, und dann soll es einfach ins Verzeichnis INI abgelegt werden. Nun ja, ich möchte nicht nur den Wert aus der Combobox verwenden, den habe ich gefunden in:
Delphi-Quellcode:
sondern ich möchte den Wert aus der INI Datei in die Combobox
ComboBox1.Items
einlesen. Ich habe ein Programm, dass ich Mehrsprachig machen möchte. Grüsse all denen die mir da so tatkräftig Helfen. Chris |
AW: INI File Schreiben und auslesen
Hier noch ein Tipp. Delphi bietet für Ini Nutzer den einfachen Zugriff auf Registry über die TRegIniFile. Die funktioniert genauso wie die TIniFile. Es muss einfach nur die Unit und die Klasse getauscht werden. Der Rest bleibt. Was also bei Ini funktionierte, funktioniert dann auch in der Registry, mit dem Unterschied, dass man nun keine Ini mitschleppten muss.
Delphi-Quellcode:
uses
Registry; //Änderung Registry procedure TForm1.Button2Click(Sender: TObject); var Path: String; IniFile: TRegIniFile; //Änderung TRegIniFile s: String; begin //Dem Pfad sollte 'Software\' vorangestellt sein, damit es richtig im Ordner //für Software abgeleht wird. Dann noch einen Dateinamen. Der Rest wie bei Ini. Path := 'Software\' + 'MeinProgramm'; //Alternativ einfach den Namen der Datei nehmen //Path := 'Software\' + ExtractFileName(ChangeFileExt(ParamStr(0), '')); IniFile := TRegIniFile.Create(Path); //Änderung TRegIniFile try IniFile.WriteString('Sektion', 'Ident', 'Wert'); s := IniFile.ReadString('Sektion', 'Ident', 'Ersatzwert bei Fehler'); finally IniFile.Free; end; ShowMessage(s); end; |
AW: INI File Schreiben und auslesen
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:47 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz