![]() |
TInifile
Ich wollte jetzt mal mit IniFiles arbeiten, und hab auch versucht, die möglichkeiten die delphi zur verfügung stellt, ausschöpfen, dabei bin ich nicht weit gekommen:
Delphi-Quellcode:
aber bereits hier kommt eine Fehlermeldung (obwohl die Datei existiert):
procedure TForm1.FormCreate(Sender: TObject);
var Datei: TIniFile; begin Datei.Create(ExtractFilePath(Application.ExeName) + 'test.ini'); end; Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 00403E8C in modele 'Project1.exe'. Write of address 00000004'. Process stopped. Use Step or Run to continue Ist das schon mal jemandem Passiert? kann mir jemand sagen was hier falsch ist? |
Die Lösung heisst:
Delphi-Quellcode:
...:cat:...
Datei := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'test.ini');
try .... finally Datei.Free; end; |
Re: TInifile
Zitat:
Zitat:
...:cat:... |
danke für die schnelle Antwort, es funktioniert!!!! :coder:
|
Re: TInifile
So nochma für ganz blöde:
Ich möchte Optionen aus meinem eigenen Optionen menü in eine Ini Datei schreiben. Also belege ich den Button "Speichern" mit diesem Code:
Delphi-Quellcode:
und schreibe zwischen try und finally die Variablen rein oder wie!?
Datei := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'test.ini');
try .... finally Datei.Free; end; Und wie greife ich dann auf diese Dateien zu!? Also wie schreibe ich die Optionen nieder, oder Änder sie und wie greif ich im Programm (zum Beispiel wenn ich ein Edit Feld den vorrausgestellten Text "name" haben sooll und der aus der ini datei kommen soll (in den Optionen festgestellt)!? Mfg |
Re: TInifile
|
Re: TInifile
K trhx
|
Re: TInifile
K nun hab ich das gerallt...
Jetzt hab ich nur ne Frage wie ich das Optionen Menü ab besten machen könnte. Ich denke mal das es am sinnvollsten wäre ich verfahre wie folgt: Ich erstelle die Ini Datei mit den Variablen im Vorraus. Also habe ich eine Datei "optionen.ini". So, diese wird beim Programmstart mit eingebunden, so dass ich über alles Hinweg automatisch zugreifen kann - habe also die Variablen in der ini datei global gemacht. Im Optionen Menü. Ich habe ja nicht nur Edit Felder, ich habe ja auch Reiterlisten (Comboboxen) und Listboxen und andere Komponenten. Ich möchte aber alle änderungen mit einem Klick auf den Button "Speichern" speichern. Wie realisiere ich das? Schreiben tu ich mit [source] ini.WriteString('Benutzer', 'Name', 'edit1.text'); [/source] Wenn das so überhaupt funktioniert... Wie aber wenn ich NUR änderungen bzw andere Komponenten abspeichern möchte?? Und wie verwende ich diese dan!? Mfg |
Re: TInifile
Moin Carbrögen,
Zitat:
Wenn Du Werte aus einer Ini einliest, so musst Du immer auch einen Defaultwert angeben, der genommen wird, wenn der entsprechende Eintrag nicht vorhanden ist. Das übersichtlichste wird sein, wenn Du Dir ein Objekt für die Optionen erstellst, bei dem dann die verschiedenen Einstellungen als property deklariert werden. In jedem Falle benötigst Du für das Speichern eine Routine, die alle Deine Einstellungen der Reihe nach in die Datei schreibt. |
Re: TInifile
Hm also muss ich eine Unit schreiben in der die Optionen Deklariert werden und hintenraus nur ein "property" rausgeben.
Gibts für ein Optionen Fenster irgendwo ein Tutorial, solangsam wirds komplex =) Da wäre mir ein Tut am liebsten. mfg |
Re: TInifile
Moin Carbögen,
hier mal ein einfaches Beispiel, was ich mit Objekt für die Optionen meinte. Statt, wie üblich, Felder im Objekt anzulegen, werden die Daten immer direkt in die Inidatei geschrieben, bzw. aus ihr gelesen.
Delphi-Quellcode:
Wie jetzt die jeweiligen Getxxx und Setxxx Methoden ausgestaltet sind, bzw. sein müssen, hängt von den Daten ab. Hier hab' ich das mal mit einem Stringwert gemacht.
unit MyOptions;
interface uses inifiles; TcsOptions = class(TObject) private FiniFile : TIniFile; procedure SetStringOption(Value: string); function GetStringOption : string; public procedure Create(const AsFilepath : string); override; procedure Destroy; property StringOption : string read GetStringOption write SetStringOption; end; //.... implementation procedure TcsOptions.Create(const AsFilepath : string); begin inherited; FiniFile := TIniFile.Create(AsFilePath); end; procedure TcsOptions.Destroy; begin FreeAndNil(FiniFile); inherited; end; procedure TcsOptions.SetStringOption(Value: string); begin FiniFile.WriteString('Irgendeine Section','StringOption',Value); FiniFile.UpdateFile; end; function TcsOptions.GetStringOption : string; begin Result := FiniFile.ReadString('Irgendeine Section','StringOption','Standardwert wenn nichts in der Ini steht'); end; end. Das Beispiel ist ungetestet, ich hab's hier direkt reingeschrieben. Jetzt kannst Du dir, z.B. in Deinem Hauptformular, eine Eigenschaft für die Optionen hinzufügen.
Delphi-Quellcode:
Jetzt hast Du Zugriff auf Deine Optionen, und brauchst Dich nicht mehr darum zu kümmern, wie die nun gespeichert bzw. gelesen werden, nachdem Du für jede Option die Lese- und Schreibroutinen einmal festgelegt hast.
interface
uses MyOptions,inifiles; TForm1 = class(TForm) //... private FOptions : TcsOptions; public property Options : TcsOptions read FOptions; end; //... implementation procedure TForm1.Form1Create(...); begin FOptions := TInifile.Create(ExtractFilePath(paramstr(0))+'Options.ini'); end; end; procedure TForm1.Form1Destroy(...); begin FreeAndNil(FOptions); end; |
Re: TInifile
Uff :nerd: .
Das' Kompliziert.... Und das waren ein paar Informationen zu viel für mich... ein richtiges Tut wäre doch das beste... danke trotzdem |
Re: TInifile
Hab nochmal nachgedacht. Ginge auch folgende Lösung:
Ich schreib eine Unit. In der Unit schreibe ich in die Ini file die Strings. So, in der unit sind funktionen - klar. Den Output realisiere ich mit 'result :=', den Input (also das ändern der Variablen in der Ini) mit Globalen Variablen aus der Unit sofern möglich. Ist das auch ne lösung? Mfg |
Re: TInifile
Keine Antworten :( ?
|
Re: TInifile
Moin Carbrögen,
Zitat:
|
Re: TInifile
cool thx :hello:
|
Re: TInifile
Zitat:
PS: Du brauchst die Datei vorher nicht zu erstellen PS @ sakura: Danke für
Code:
Sowas such ich schon die ganze Zeit
ExtractFilePath(Application.ExeName)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:14 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-2025 by Thomas Breitkreuz