Entwickler-Ecke

Dateizugriff - Ini Datei ;)


Leathl - Sa 11.01.03 17:42
Titel: Ini Datei ;)
---


tommie-lie - Sa 11.01.03 18:06

nimm doch einfsach 'ne INI-Datei.
Dafür gibt's in Delphi schon funktionen für. Wenn du dann nicht willst, daß hinter der Datei .ini steht und somit jeder erfahrene Windowsanwender gleich weiß, wie die Datei aufgebaut ist, kannst du die Dateiendung ja immer noch ändern (in tcl meinetwegen). Aber vom Aufbau her ist sie trotzdem eine INI-Datei, die recht einfach gestrickt sind (clever, was?).


Leathl - Sa 11.01.03 18:49

---


Delete - Sa 11.01.03 19:26

Kuckst du hier: http://www.auq.de/viewtopic.php?t=182


Klabautermann - Sa 11.01.03 19:52

Hallo,
Leathl hat folgendes geschrieben:
ich weiss, dass es wie eine inidatei ist, aber ich wollte eigentlich keine inidatei ;)

dann kannst du auch z.B. mit Typisierten Dateien arbeiten. Ein Topic zu dem Thema findest du hier [http://www.auq.de/viewtopic.php?p=3754#3754].

Gruß
Klabauterann


Leathl - Sa 11.01.03 19:57

---


tommie-lie - Sa 11.01.03 20:04

warum so umständlich?
Mach's doch genau umgekehrt:
INI-Dateien haben Sections und Werte.
Als Sections nimmst du die Sparten, als Werte die Einträge darin. Also so:
[Sparte1]
count=5
1=a
2=b
3=c
4=d
5=e
[Sparte2]
count=2
1=f
2=g

Count gibt also an, wieviele einträge da sind (wäre sonst schwieriger mit INI-Dateien...) und du hast für jede der Sparten eine Section.


Leathl - So 12.01.03 00:01

---


Delete - So 12.01.03 03:51

Also weißt du doch nicht, wie Ini-dateien funktionieren oder wie? Denn wenn du es wüßtest, sollte das ganze kein Problem sein. Kuck dir einfach noch mal das Tutorial an.


Leathl - So 12.01.03 15:00

---


Tino - So 12.01.03 19:28

Hi,

Zugriff auf die Spaltenüberschriften bekommst Du so:

Quelltext
1:
ListView1.Column [0].Caption := 'Erste Spalte';                    


Zugriff auf die Items:

Quelltext
1:
ListView1.Items [0].Caption := 'Erster Eintrag';                    


Schau Dir mal in der Hilfe unter den Eigenschaften Items die Beispiele an!

Gruß
TINO


Leathl - So 12.01.03 20:48

---


Tino - Mo 13.01.03 08:33

Hallo Leathl,

fangen wir mal am Anfang an:

Quelltext
1:
for i:= 1 to ListView1.Items-1 do                    

Du greifst hier direkt auf die Eigenschaft Items zu. Das hat wenig sinn da Du lieber auf die Eigenschaft Count verweisen solltest. Außerdem solltest Du die For-Next-Schleife bei 0 beginnen lassen:

Quelltext
1:
for i := 0 to ListView1.Items -1 Do                    

Da Du nach dieser Zeile kein Begin geschrieben hast wird nur die darauf folgende Zeile in der For-Next-Schleife ausgeführt. Also: setz ein Begin und ein End ein:

Quelltext
1:
2:
3:
4:
for i := 0 to ListView1.Items -1 Do
  Begin
    { ... }
  End;

Warum erstellst Du das Ini-Objekt bei jedem durchlauf der Schleife? Macht glaube ich auch wenig sinn. Deshalb pack es vor dem Begin der Schleife:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
Var
  i: Integer;
  Ini: tIniFile;
Begin
  Ini := tIniFile.Create ('tlc.ini');

  For i := 0 To ListView1.Items -1 Do
    Begin
      { ... }
    End;

  Ini.Free;
End;

In der For-Next-Schleife müssen jetzt nach ein ander die Items (also die Einträge in der ListView) gespeichert werden. Die Caption der Einträge bekommst Du so:

Quelltext
1:
ListView1.Items [I].Caption                    

Da deine ListView ja anscheinend 4 Spalten besitzt musst Du noch die SubItems speichern. An diese kommst Du zum Beispiel so:

Quelltext
1:
ListView1.Items [I].SubItems [0]                    

Da ich aus Deinem Code-Beispiel nicht schlau geworden bin wie Du die Einträge genau abgespeichern willst kann ich Dir auch nicht genau sagen wie der Code innerhalb der For-Next-Schleife aussieht. Aber mit den o. g. Hinweisen solltest Du schon mal vorankommen. Wenn nicht dann poste einfach!

Gruß
TINO


Leathl - Mo 13.01.03 14:54

---


Delete - Mo 13.01.03 15:53

Mit ParamStr(0) bekommst du dein Programmpfad inklusive Anwendungsnamen.


Leathl - Mo 13.01.03 20:30

---


Tino - Di 14.01.03 09:30

Hi,

was ich an Deinem Code nicht verstehe sind
  1. Warum schreibst Du die folgenden Anweisungen in die For-Next-Schleife?

    Quelltext
    1:
    2:
    3:
    4:
    5:
    ini.WriteString('Daten','Lehrer/in',Edit1.Text); 
    ini.WriteString('Daten','LTel',Edit2.Text); 
    ini.WriteString('Daten','Schule',Edit3.Text); 
    ini.WriteString('Daten','Klasse/Stufe',Edit4.Text); 
    ini.WriteString('Daten','Jahrgang',Edit5.Text);

  2. Warum seht die Anweisung
    Ini.Free
    Innerhalb der For-Next-Schleife?


Gruß
TINO


Leathl - Di 14.01.03 16:02

---


Leathl - Mi 15.01.03 14:19

---


Tino - Mi 15.01.03 14:31

Hallo,

ich würde Dir erstmal vorschlagen Deinen Quelltext ordentlich zu formatieren.

Bist Du sicher das Deine IF-Anweisung

Quelltext
1:
2:
3:
4:
if OpenDialog1.Execute then
ListView1.Clear;
OpenDialog1.DefaultExt:= 'ini';
{...}

korrekt ist? Fehlt da nicht ein Begin und ein End? Also so:

Quelltext
1:
2:
3:
4:
5:
6:
if OpenDialog1.Execute then
  Begin
    ListView1.Clear;
    OpenDialog1.DefaultExt:= 'ini';
    {...}
  End;

Gruß
TINO


Leathl - Mi 15.01.03 14:54

---


Leathl - Do 16.01.03 13:06

---


DataCool - Do 16.01.03 23:31

Hi,

im letzten posting hast Du eine Fehlermeldung bekommem, weil :


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:
33:
procedure TForm1.Button5Click(Sender: TObject);
var
  NewItem1: tListItem;
  i: Integer;
  j: Integer;
begin
  if OpenDialog1.Execute then
    OpenDialog1.DefaultExt := 'ini';
  ini := TIniFile.Create(OpenDialog1.FileName);
  try
    i          := ini.ReadInteger('Daten', 'Count', 0);
    Edit1.Text := ini.ReadString('Daten', 'Lehrer/in', '');
    Edit2.Text := ini.ReadString('Daten', 'LTel', '');
    Edit3.Text := ini.ReadString('Daten', 'Schule', '');
    Edit4.Text := ini.ReadString('Daten', 'Klasse/Stufe', '');
    Edit5.Text := ini.ReadString('Daten', 'Jahrgang', '');
    myListView.items.beginUpdate;
    myListView.items.clear;
    for j := 0 to i - 1 do
    begin
      // deshalb die Fehlermeldung, wohoer soll der Listview sonst auch wissen
      // das er ein neues Item hat. In manchen Fällen hilft auch Doku lesen ;-)
      NewItem1 := myListView.items.add;
      NewItem1.Caption := ini.ReadString(IntToStr(j), 'Sparte1', '');
      NewItem1.SubItems.Add(ini.ReadString(IntToStr(j), 'Sparte2', ''));
      NewItem1.SubItems.Add(ini.ReadString(IntToStr(j), 'Sparte3', ''));
      NewItem1.SubItems.Add(ini.ReadString(IntToStr(j), 'Sparte4', ''));
    end;
    myListView.items.EndUpdate;
  finally
    ini.Free;
  end;
end;


Außerdem ist es überflüssig die Eigenschaft Count in die Ini-Datei zu Schreiben. Denn wie Du in der Online-Doku nachlesen kannst gibt es die Methode .readSections


Leathl - Fr 17.01.03 08:53

---


Leathl - Fr 17.01.03 09:05

---


Raphael O. - Fr 17.01.03 09:25

z.B. erst in ein memo oder richedit kopieren und dann drucken...

Fiji-Fighter


Tino - Fr 17.01.03 09:32

Leathl hat folgendes geschrieben:
so... jetzt bin ich beim problem mit dem drucken...

Neue Frage = neues Topic! Also bitte ein neues Topic erstellen!

Gruß
TINO