Autor |
Beitrag |
Gruenschnabel
      
Beiträge: 41
Windows 7, 10
Delphi6, Delphi7SEportable, Delphi 10 Berlin Starter
|
Verfasst: Mi 15.09.10 12:08
Servus Ihr!
Ich befasse mich gerade mit der Anwendung von Ini-Dateien und dabei bin ich auf folgendes Problem gestoßen.
Ich möchte eine Art Telefonbuchverzeichnis programmieren. In der ListBox habe ich verschiedene Gruppen angelegt und in der CheckListBox die ganzen Telefonnummern gelistet. Je nach ausgwählter Gruppe kann der Nutzer nun Häkchen setzen, welche Nummer dieser Gruppe angehören soll. Das speichern in der Ini funktioniert hervorragend:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| procedure TAktionen.BitBtn4Click(Sender: TObject); var i,k,_pos: Integer; begin If GruppenBox.ItemIndex <> 0 Then begin k:= GruppenBox.ItemIndex; l:= GruppenBox.Items[k]; _pos:= (pos('-',l)-1); m:= copy(l,0,_pos); for i:= 0 to Telefonbuch.count-1 do begin ini1:=TIniFile.create(ExtractFilePath('C:\poctool_config\zuordnung.ini')); ini1.WriteBool(m, Telefonbuch.Items.Strings[i], Telefonbuch.Checked[i]); ini1.Free; end; end; |
das funktioniert hervorragend. nun kommt der knackpunkt. ich möchte das gerne wieder ausgelesen haben. also wenn ich eine gruppe markiere, dann sollen die entsprechenden häkchen bei den telefonnummern, also in der checklistbox gesetzt sein. ich hab verschiedene varianten probiert, aber solangsam weiß ich nicht weiter. hier mein ansatz:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TAktionen.GruppenboxClick(Sender: TObject); var k,n,i,_pos: Integer; begin n:= telefonbuch.Count-1; k:= GruppenBox.ItemIndex; l:= GruppenBox.Items[k]; _pos:= (pos('-',l)-1); m:= copy(l,0,_pos); for i:=0 to n do begin ini1:=TIniFile.create(ExtractFilePath('C:\poctool_config\zuordnung.ini')); Telefonbuch.Checked[i]:= ini1.ReadBool(m, Telefonbuch.Items.Strings[i+1], false); |
während ich den thread hier verfasse, bin ich der Meinung eigenltich keine Schleife zu brauchen. Habs sowohl mit, als auch ohne und in verschiedenen Varianten probiert. Ergebnisse waren eigenlich immer nur 2: Entweder überschreitet der Listenindex das Maximum oder es passiert NICHTS ohne Fehlermeldung.
Hoffe ihr versteht was ich meine und könnt mir helfen.
MfG,
Gruenschnabel
_________________ Fährst Du rückwärts an den Baum, verkleinert sich dein Kofferraum!
|
|
Tropby
      
Beiträge: 71
Erhaltene Danke: 4
Vista, Win XP, Win 89
Turbo Delphi Ex.
|
Verfasst: Mi 15.09.10 13:52
Hallo,
als erstes fällt mir auf, dass du "ExtractFilePath" benutzt. Diese Funktion gibt immer nur den Pfad zu einer Datei zurück. In deinem Fall müsste er also aus "C:\poctool_config\zuordnung.ini" "C:\poctool_config\" machen. Daher glaube ich nicht, dass die Daten richtig gespeichert werden. kann es aber im moment nicht testen.
An sonsten bnutzt du beim Lesen "i+1". Dadurch wirst du jedoch jedes mal eine Exception bekommen da du auf ein Element zugreifst was nicht existiert. Dort muss auch "i" hin.
Wichtig ist noch, dass du
Delphi-Quelltext 1:
| ini1:=TIniFile.create(ExtractFilePath('C:\poctool_config\zuordnung.ini')); |
nicht in der Schleife machst. Es reicht, wenn du einmal eine verbindung aufbaust!!
In deinemfall würde ich ExtractFilePath entfernen, da du es hier nicht brauchst wenn du absolute Pfade angibst. Die Funktion nützte ich meist in verbindung mit Application.ExeName um den Pfad zu der ausgeführten Datei zu bekommen.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| ini1:=TIniFile.create('C:\poctool_config\zuordnung.ini'); for i:= 0 to Telefonbuch.count-1 do begin ini1.WriteBool(m, Telefonbuch.Items.Strings[i], Telefonbuch.Checked[i]); end; ini1.Free; |
_________________ Tropby
Für diesen Beitrag haben gedankt: Gruenschnabel
|
|
Gruenschnabel 
      
Beiträge: 41
Windows 7, 10
Delphi6, Delphi7SEportable, Delphi 10 Berlin Starter
|
Verfasst: Mi 15.09.10 14:02
Wunderbar, funktioniert nun alles wie es soll!
Lag wirklich an dem ExtractPath und dem Aufruf innerhalb der Schleife!!!
Wenn ich jetzt allerdings eine Gruppe mit neuen Nummern bestücken will erscheint die Fehlermeldung:
"Format '%P' ungültig oder nicht kompatibel mit Argument"
Was will delphi mir damit sagen? Der debugger springt ans ende vom quelltext des Projects...
die ini wird jedoch korrekt geschrieben?!
_________________ Fährst Du rückwärts an den Baum, verkleinert sich dein Kofferraum!
|
|
Gruenschnabel 
      
Beiträge: 41
Windows 7, 10
Delphi6, Delphi7SEportable, Delphi 10 Berlin Starter
|
Verfasst: Mi 15.09.10 14:24
Hier der endgültige quelltext, der allen meinen tests standgehalten hat und zufriedenstellend ist
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:
| procedure TAktionen.BitBtn4Click(Sender: TObject); var i,k,_pos: Integer; begin If GruppenBox.ItemIndex <> 0 Then begin k:= GruppenBox.ItemIndex; l:= GruppenBox.Items[k]; _pos:= (pos('-',l)-1); m:= copy(l,0,_pos);
for i:= 0 to Telefonbuch.count-1 do begin ini1:=TIniFile.create('C:\poctool_config\zuordnung.ini'); ini1.WriteBool(m, Telefonbuch.Items.Strings[i], Telefonbuch.Checked[i]); ini1.Free; end; end;
end; procedure TAktionen.GruppenboxClick(Sender: TObject); var k,n,i,_pos: Integer; begin n:= telefonbuch.Count-1; k:= GruppenBox.ItemIndex; l:= GruppenBox.Items[k]; _pos:= (pos('-',l)-1); m:= copy(l,0,_pos); for i:=0 to n do begin ini1:=TIniFile.create('C:\poctool_config\zuordnung.ini'); Telefonbuch.Checked[i]:= ini1.ReadBool(m, Telefonbuch.Items.Strings[i], false);
end; ini1.free; end; |
_________________ Fährst Du rückwärts an den Baum, verkleinert sich dein Kofferraum!
|
|
|