Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi TInifile (https://www.delphipraxis.net/6175-tinifile.html)

Illuminator-23-5 2. Jul 2003 09:56


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:
procedure TForm1.FormCreate(Sender: TObject);
var
  Datei: TIniFile;
begin
  Datei.Create(ExtractFilePath(Application.ExeName) + 'test.ini');
end;
aber bereits hier kommt eine Fehlermeldung (obwohl die Datei existiert):
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?

sakura 2. Jul 2003 09:57

Die Lösung heisst:
Delphi-Quellcode:
Datei := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'test.ini');
try

....

finally
  Datei.Free;
end;
...:cat:...

sakura 2. Jul 2003 10:00

Re: TInifile
 
Zitat:

Zitat von Illuminator-23-5
Ist das schon mal jemandem Passiert?

Jedem :!: Wirklich :?
Zitat:

Zitat von Illuminator-23-5
Kann mir jemand sagen was hier falsch ist?

Als Erklärung: Datei ist eine Objekt-Variable vom Klassen-Typ TIniFile. Als erstes musst Du ein Objekt der Klasse TIniFile erstellen (was Du auch tun wolltest). Das gibt es die constructor Methoden, welche direkt über die Klasse angesprochen werden. Das dadurch erstellte Objekt wird anschließend der Objektvariablen zugewiesen, wie im obigen Beitrag zu sehen.

...:cat:...

Illuminator-23-5 2. Jul 2003 10:00

danke für die schnelle Antwort, es funktioniert!!!! :coder:

Carbrögen 7. Sep 2003 11:18

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:
Datei := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'test.ini');
try

....

finally
  Datei.Free;
end;
und schreibe zwischen try und finally die Variablen rein oder wie!?
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

Mirilin 7. Sep 2003 11:25

Re: TInifile
 
:hi:

ini-tutorial


aloa re mirilin

Carbrögen 7. Sep 2003 12:00

Re: TInifile
 
K trhx

Carbrögen 7. Sep 2003 13:13

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

Christian Seehase 7. Sep 2003 13:23

Re: TInifile
 
Moin Carbrögen,

Zitat:

Zitat von Carbrögen
Ich erstelle die Ini Datei mit den Variablen im Vorraus.

Das musst Du gar nicht.
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.

Carbrögen 7. Sep 2003 13:44

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

Christian Seehase 7. Sep 2003 15:44

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:
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.
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.

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:
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;
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.

Carbrögen 7. Sep 2003 16:42

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

Carbrögen 8. Sep 2003 18:15

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

Carbrögen 9. Sep 2003 12:30

Re: TInifile
 
Keine Antworten :( ?

Christian Seehase 9. Sep 2003 12:41

Re: TInifile
 
Moin Carbrögen,

Zitat:

Zitat von Carbrögen
Ist das auch ne lösung?

Im Prinzip ja, nur unterscheidet sich diese nicht wesentlich von meiner, ausser dass ich alles in einem Objekt zusammenfassen will.

Carbrögen 9. Sep 2003 13:13

Re: TInifile
 
cool thx :hello:

Nalincah 9. Sep 2003 14:01

Re: TInifile
 
Zitat:

Zitat von sakura
Zitat:

Zitat von Illuminator-23-5
Ist das schon mal jemandem Passiert?

Jedem :!: Wirklich :?
Zitat:

Zitat von Illuminator-23-5
Kann mir jemand sagen was hier falsch ist?

Als Erklärung: Datei ist eine Objekt-Variable vom Klassen-Typ TIniFile. Als erstes musst Du ein Objekt der Klasse TIniFile erstellen (was Du auch tun wolltest). Das gibt es die constructor Methoden, welche direkt über die Klasse angesprochen werden. Das dadurch erstellte Objekt wird anschließend der Objektvariablen zugewiesen, wie im obigen Beitrag zu sehen.

...:cat:...

Mir noch nicht :dancer:
PS: Du brauchst die Datei vorher nicht zu erstellen
PS @ sakura: Danke für
Code:
ExtractFilePath(Application.ExeName)
Sowas such ich schon die ganze Zeit


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:48 Uhr.

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