| Autor |
Beitrag |
magic87
      
Beiträge: 45
Delphi 7, PHP
|
Verfasst: Do 05.04.07 12:42
Möchte Einträge in einer INI-Datei speichern und auslesen. Die Dateien befinden sich in einer Listbox. Das Problem ist.. ich habe eine Bibliothek, also eine Unit, wo ich meine ganzen Klassen deklariert habe. Unter anderem die Klasse Autoliste, die die beiden Proceduren LoadINI und SaveINI von mir bekommen hat. In der anderen Unit will ich die beiden proceduren dann im OnCreate und OnClose aufrufen - jedoch gibts da immer eine Zugriffsverletztung, wenn ich die Form wieder schließe. Das hat zur Folge, das er gar nichts in die INI schreibt. Hier mein 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: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47:
| procedure TAutoliste.LoadINI; var i,x : integer; begin ini := TIniFile.create(ExtractFilePath(Application.ExeName)+'Einstellungen.ini'); i:=Ini.ReadInteger('Sektion1','Zeilen',count); for x:=0 to i-1 do begin Ini.ReadString ('Sektion1','Marke'+IntToStr(x),Auto.marke); end; Ini.Free; end;
procedure TAutoliste.SaveINI; var x:integer; begin ini.WriteInteger('Sektion1','Zeilen',Count); for x:=0 to Count-1 do begin ini.WriteString('Sektion1','Marke'+intToStr(x), Auto.marke); end; ini.Free; end;
procedure TForm_Einstellungen.FormCreate(Sender: TObject); begin Markenliste := TAutoliste.create; Markenliste.LoadINI; end;
procedure TForm_Einstellungen.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin if CanClose = true then begin Markenliste.SaveINI; end; end;
|
Ich hoffe mir kann jemand weiterhelfen und jemand versteht mein Problem.
Liebe Grüße.. magic87
|
|
freak4fun
      
Beiträge: 604
Erhaltene Danke: 4
Win 7 Pro
VS 2013 Express, Delphi, C#, PHP, Java
|
Verfasst: Do 05.04.07 13:29
Kannst du da nicht durchsteppen und den Fehler genauer eingrenzen? Woher kommt das Count?
_________________ "Ich werde auf GAR KEINEN Fall…!" - "Keks?" - "Okay, ich tu's."
i++; // zaehler i um 1 erhoehen
|
|
magic87 
      
Beiträge: 45
Delphi 7, PHP
|
Verfasst: Do 05.04.07 13:33
das count soll die Anzahl der Einträge in der Liste wiedergeben.Die Proceduren sind ja innerhalb der Klasse TAutoliste und TAutoliste hab ich von TList abgeleitet.
Ich denke das der Fehler daran liegt, das ich ohne Übergabeparameter arbeite. Ich weiß nicht so recht, wie ich zwischen den beiden Units handeln soll.
|
|
freak4fun
      
Beiträge: 604
Erhaltene Danke: 4
Win 7 Pro
VS 2013 Express, Delphi, C#, PHP, Java
|
Verfasst: Do 05.04.07 13:41
Was macht das?
Delphi-Quelltext 1:
| i:=Ini.ReadInteger('Sektion1','Zeilen',count); |
Wenn der Eintrag Zeilen in der Section Sektion nicht existiert, wird Count zurückgegeben. Dann gehst du die Marken durch, die es eventuell nicht gibt. Welchen Wert hat Count da?
Du gibst im Load das Ini wieder Frei!
Delphi-Quelltext
Wenn du dann Speichern drückst, ist Ini nicht initialisiert bzw. nil.
MfG
freak
_________________ "Ich werde auf GAR KEINEN Fall…!" - "Keks?" - "Okay, ich tu's."
i++; // zaehler i um 1 erhoehen
|
|
magic87 
      
Beiträge: 45
Delphi 7, PHP
|
Verfasst: Do 05.04.07 15:26
habs jetzt so:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TAutoliste.LoadINI; var i,x : integer; begin ini := TIniFile.create(ExtractFilePath(Application.ExeName)+'Einstellungen.ini'); i:=Ini.ReadInteger('Sektion1','Zeilen',0); for x:=0 to i-1 do begin Ini.ReadString ('Sektion1','Marke'+IntToStr(x),Auto.marke); end; end; |
Das mit dem ini.free ist mir klar! Das war einfach blöd von mir! Habe die ini ja global deklariert. Aber Der Rest müsste dann doch eigentlich stimmen oder nicht? Jetzt gibt er 0 zurück. Das mit dem i := Ini.ReadInteger.... hab ich gemacht, damit er weiß, wie oft er die Schleife durchlaufen soll. Jetzt gibt er 0 zurück, wenn Zeilen nicht in Sektion1 gefunden wird. Irgendwo muss jetzt noch eine Kleinigkeit falsch sein!?
|
|
Lannes
      
Beiträge: 2352
Erhaltene Danke: 4
Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
|
Verfasst: Do 05.04.07 17:49
Hallo,
ReadString ist eine Funktion die den gelesenen String zurückliefert.
Delphi-Quelltext 1: 2: 3:
| sHierHin := ini.ReadString(...); ListBox.Items.Add(ini.ReadString(...)); | wie ReadInteger, nur halt ein String als Rückgabewert.
_________________ MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
|
|
|