Autor Beitrag
5M17H Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 164

XP, Vista32, bald auch Vista64
PHP(3/5), Delphi(2), Java(1), C(3), C#(1)
BeitragVerfasst: Sa 07.10.06 18:19 
versuchen wirs mal anders.

Ich bin (oder besser will) auf .ini files umsteigen. Habe mir mal folgendes angesehentutorial angesehen.

jetzt begints:
ausblenden Delphi-Quelltext
1:
ini: TIniFile;					

"E2003 undefinierter bezeichner 'TIniFile'" aber beim tutorial auf seite 3 steht das so....
Blackheart666
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2195

XP
D3Prof, D6Pers.
BeitragVerfasst: Sa 07.10.06 18:31 
Dann sollte man auch richtig lesen, dort steht

Um auf Ini-Dateien zugreifen zu können, muss die Unit IniFiles in die uses-Klausel aufgenommen werden.

Schau Dir mal den an find Ich besser (Geschmackssache)
www.kuknet.de/tutori...%22ini%20tutorial%22
5M17H Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 164

XP, Vista32, bald auch Vista64
PHP(3/5), Delphi(2), Java(1), C(3), C#(1)
BeitragVerfasst: So 08.10.06 22:29 
Danke für das tut.
Ist gut.

Problem.

Dort steht: Die befehle WriteString, WriteInteger und/oder WriteBool sooft hinschreiben bis man alle daten gespeichert hat.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
if not FileExists('./Settings.ini') then
        seti := TIniFile.create('./Settings.ini');

      name := edit3.Text;
      ort := edit5.Text;

      seti.WriteString('Speicherorte', ''+name+'', ''+ort+''); //einen string in der settings.ini speicher.
      seti.WriteString('Speicherorte', name, edit5.Text); //einen string in der settings.ini speicher.
      seti.Free;


nunja. Warum geht da nich? 'Zugriffsverletzung an adresse 00000000'.
Odeng
Hält's aus hier
Beiträge: 14

Win XP
Delphi, Perl, VB, C++
BeitragVerfasst: So 08.10.06 22:55 
Hallo!

Wenn ich deinen Code richtig interprtiere öffnest du nur eine IniDatei, wenn keine existiert (Das ist auch gut so) wohin sollen denn die Daten geschrieben werden, wenn diese Datei bereits existiert?

ausblenden Delphi-Quelltext
1:
2:
3:
4:
if not FileExists('./Settings.ini') then
        seti := TIniFile.create('./Settings.ini')
else
        seti := TIniFile.open('./Settings.ini');


Dies alles ohne je was mit IniFiles gemacht zu haben ;-)

_________________
__________________
Es gibt nichts Gutes, außer man tut es :-)
5M17H Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 164

XP, Vista32, bald auch Vista64
PHP(3/5), Delphi(2), Java(1), C(3), C#(1)
BeitragVerfasst: So 08.10.06 23:13 
Danke für die Antwort.
Sry aber "Undefinierter bezeicher: 'open'".?
Odeng
Hält's aus hier
Beiträge: 14

Win XP
Delphi, Perl, VB, C++
BeitragVerfasst: So 08.10.06 23:26 
Hallo!

Ja, stimmt. Du musst die Datei offnen, ohne sie zu löschen. Wahrscheinlich wird es TIniFile.asign(....) heißen.

_________________
__________________
Es gibt nichts Gutes, außer man tut es :-)
5M17H Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 164

XP, Vista32, bald auch Vista64
PHP(3/5), Delphi(2), Java(1), C(3), C#(1)
BeitragVerfasst: So 08.10.06 23:29 
Danke auch für die Antwrot.
Anber wieder nicht... WArum passiert das nur mir? damn. xD

[edit]
Also delphi hat ja forschläge. und wnen ich TiniFile. eingebe kommt sonen menue, und da steht NUR create. Also gibt es nur die MEthode ceate.. Eigenartig.
Odeng
Hält's aus hier
Beiträge: 14

Win XP
Delphi, Perl, VB, C++
BeitragVerfasst: Mo 09.10.06 00:00 
So, ich wollte zwar gerade ins Bett gehen, wollte dich aber dann auch nicht dumm sterben lassen und habe mir das Problem einmal angesehen:

Folgende Quellcode ist dabei herausgekommen (getestet)

In den Uses musst du INIFiles aufnehmen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
.
.
.
interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, IniFiles;

type
.
.
.


Der weitere Quellcode ist Kommentiert. Sektion, Eigenschaft und Wert entspricht deinen Edit-Feldern und kann ggf. durch dich angepasst werden.

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
Procedure XY-ungeloest;
var IniFile              : TIniFile;
    Sektion,
    Eigenschaft_String,
    Eigenschaft_Int,
    Wert_String          : String;
    Wert_Int             : Integer;
Begin
  Sektion:='Dein_Teilbereich_der_Datei';
  Eigenschaft_String:='String_Beschreibung_dessen_was_du_speichern_willst';
  Wert_String:='Wert_den_du_Speichern_willst.';
  Eigenschaft_Int:='Int_Beschreibung_dessen_was_du_speichern_willst';
  Wert_Int:=123456789;

  IniFile := TIniFile.create('c:\Settings.ini');
  // Wenn ich das auf die schnelle richtig verstehe, entscheidet
  // create selber darüber, ob die Datei nur geöffnet oder ob diese
  // auf erstellt werden muss
  IniFile.WriteString(Sektion, Eigenschaft_String, Wert_String);
  //einen string in der settings.ini speicher.
  IniFile.WriteInteger(Sektion, Eigenschaft_Int, Wert_Int);
  //einen string in der settings.ini speicher.

  // Des Weiteren gehen noch
  //   WriteBool           Schreibt Daten vom Typ Boolean
  //   WriteBinaryStream   Schreibt Daten vom Typ TStream
  //   WriteDate           Schreibt Daten vom Typ TDateTime
  //   WriteDateTime       Schreibt Daten vom Typ TDateTime
  //   WriteFloat          Schreibt Daten vom Typ Double
  //   WriteTime           Schreibt Daten vom Typ TDateTime
  IniFile.Free;
end;


Eine Ini-Datei wird in Bereiche (oben Sektion) aufgeteilt, die logische Einheiten bilden. damit kannst du deine Datei strukturieren.
Innerhlab dieser Bereiche gibt es unbegrenzt viele Einträge (oben Eigenschaften) die alle einen Wert (oben Wert) haben.

Die Datei sieht dann wie folgt aus

ausblenden Delphi-Quelltext
1:
2:
3:
[Dein_Teilbereich_der_Datei]
String_Beschreibung_dessen_was_du_speichern_willst=Wert_den_du_Speichern_willst.
Int_Beschreibung_dessen_was_du_speichern_willst=123456789


Du solltest es evt. noch in ein Try-Finally klammern, um die gewünschte Fehlersicherheit herbei zu führen (Wer weiß, wozu es gut ist...)

Äquivalent zu dieser Write-Methode kannst du eine Read-Methode programmieren. Dazu musst du nur die IniFile.WriteString(...); durch IniFile.ReadString(...); ersetzen.

So, ich hoffe, dir hilft das. Viel Spaß damit!

Oliver Dujardin

_________________
__________________
Es gibt nichts Gutes, außer man tut es :-)
5M17H Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 164

XP, Vista32, bald auch Vista64
PHP(3/5), Delphi(2), Java(1), C(3), C#(1)
BeitragVerfasst: Mo 09.10.06 00:06 
Oli << wenn ich dich so nenen darf
Ich DANKE dir. Es klappt. jetzt weis ich was ich ncoh alles tun kann........
Odeng
Hält's aus hier
Beiträge: 14

Win XP
Delphi, Perl, VB, C++
BeitragVerfasst: Mo 09.10.06 00:10 
Als Namensfetter will ich dir mal erlauben mich so zu nenne ;-))
Freut mich, das ich heöfen konnte.

So, jetz aber gute Nacht

_________________
__________________
Es gibt nichts Gutes, außer man tut es :-)
5M17H Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 164

XP, Vista32, bald auch Vista64
PHP(3/5), Delphi(2), Java(1), C(3), C#(1)
BeitragVerfasst: Mo 09.10.06 21:41 
Danke für die Erlaubniss.
So, ich bin recht weit gekommen.
Aber jetzt kommt was:
Ich habe nen Loginfenster.
Jetzt will ich, dass wenn man was falsches eingibt, nicht das programm abstürtzt sondern nen error meldung kommt.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
if (edit1.Text = '') or (edit2.text = '') then
    label4.Caption := 'Bitte kontacktdaten eingeben'
  else
  begin
    name := edit1.text;
    seti := TIniFile.create('./Settings.ini');
    pfad := seti.ReadString('Speicherorte', edit1.text, '');
    pfad := pfad+name+'.ini';

    save := TIniFile.Create(pfad);
    PageControl1.ActivePage:= PageControl1.Pages[2];
  end;

Wenn ich also 'ccs' eingebe, dens ja nciht gibt, soll ne meldung kommen: "Sie haben einen falschen usernamen angegeben".

[edit]
ps: weis echt nicht wonach ich da suchen muss.
azubi_20
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 593

WinXP SP2, Ubuntu 8.4
D7 Enterp., D2005 Prof., Java (Eclipse 3.4.0)
BeitragVerfasst: Mo 09.10.06 21:56 
such nach try...except :-)
5M17H Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 164

XP, Vista32, bald auch Vista64
PHP(3/5), Delphi(2), Java(1), C(3), C#(1)
BeitragVerfasst: Mo 09.10.06 22:03 
Er soll guggen ober er in der .ini datei einen eintrag findet, der mit edit1.text übereinstimmt.
azubi_20
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 593

WinXP SP2, Ubuntu 8.4
D7 Enterp., D2005 Prof., Java (Eclipse 3.4.0)
BeitragVerfasst: Mo 09.10.06 22:11 
Meinst du das ?
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
if (edit1.Text = '') or (edit2.text = '') then
    label4.Caption := 'Bitte kontacktdaten eingeben'
  else
  begin
    name := edit1.text;
    seti := TIniFile.create('./Settings.ini');
    pfad := seti.ReadString('Speicherorte', edit1.text, ''); //Pfad wird nur belegt, wenn Eintrag gefunden !

    if pfad <> '' then //ist Pfad belegt ?
      begin
       pfad := pfad+name+'.ini';

       save := TIniFile.Create(pfad);
       PageControl1.ActivePage:= PageControl1.Pages[2];
      end
      else ShowMessage("Sie haben einen falschen usernamen angegeben");

  end;
5M17H Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 164

XP, Vista32, bald auch Vista64
PHP(3/5), Delphi(2), Java(1), C(3), C#(1)
BeitragVerfasst: Mo 09.10.06 22:16 
Ja danke. Jetzt gehts.
COOl. F(r)eueralarm...