![]() |
Re: Spielstand speichern mit ini(s)!
ok den code versteh ich net so ganz! aber egal. ich versuchs erstmal auf die andere art.
nur hab ich jetzt ein problem mit dem löschen! alles andere funktioniert bestens! also die ini sieht jetzt ungefähr so aus: [Key] games=4 game1=Peter game2=Torley game3=Nils game4=Lukas und hier dann die sektionen mit den daten zb. [Torley] Money=0 ... so und so lösch ich bis jetzt was aber nicht funktionier:
Delphi-Quellcode:
sieht jemand den fehler?
if MessageDlg('Wollen Sie den Spielstand '+panel1.Caption+' wirklich löschen?',mtWarning,
[mbYes, mbNo],0)=mryes then begin ini:=TIniFile.create(ExtractFilePath(ParamStr(0))+'..\DATA\save.ini'); ini.DeleteKey('Key', 'game'+inttostr(ListBox1.ItemIndex+1)); if ListBox1.ItemIndex+1 < ini.ReadInteger('Key','games',1) then begin for i:=ListBox1.ItemIndex+1 to ini.Readinteger('Key','games',1) do begin ini.writeinteger('Key','game'+inttostr(i),ini.ReadInteger('Key','game'+inttostr(i-1),1)); end; end; ini.EraseSection(ini.ReadString('Key','game'+inttostr(ListBox1.ItemIndex+1),'')); ini.writeinteger('Key','games',ini.ReadInteger('key','games',1)-1); ini.free; showmessage('Spielstand erfolgreich gelöscht!'); torley |
Re: Spielstand speichern mit ini(s)!
Zitat:
Aber wäre es nicht sinnvoll, den Code von Marabu zu verstehen und einzusetzen? Er ist in der Handhabung einfacher als das was Du vorhast. Grüße Klaus |
Re: Spielstand speichern mit ini(s)!
ok ich versuchs:
also zuerst wir eine tstringlist angelegt: Profiles := TStringList.Create; versteh ich dann wird anscheinend der wert profiles immer nach dem komma getrent in die liste geladen?! Profiles.CommaText := ini.ReadString(SECTION_SETTINGS, KEY_PROFILES, ''); ok dann hab ich die namen in einer liste?! was das bewirk weiß ich nicht?! was ist ProfileSelectionListBox? listbox und liste(profiles)?? ProfileSelectionListBox.Items.Assign(Profiles); wie greif ich auf den bestimmten zu? und lösch ihn oder lade ihn? gibts es dazu ein tutorial wie man mit mehreren werten umgeht? ich finde es so wie ich jetzt mach ganz gut bis aufs löschen dan müsst ich dann wenn zb game2 gelöscht wird den inhalt von game3, game2 zuordnen dann von game4, game 5 zuordnen und wenns dann kein höherer game gibt das letzte löschen. das versuch ich grade aber es klappt nie! torley |
Re: Spielstand speichern mit ini(s)!
Ich versuche es mal:
Zitat:
dass alle User unter einem key eingetragen sind. Die Namen der sections der Spielstände sind gleich den Usernamen. Bei Dir wird es so sein, dass sich ein User angemeldet hat, dieser User will jetzt z.B. seinen UserAccount löschen. Hierzu liest Du alle User in ein StringListe ein.
Delphi-Quellcode:
Dann kannst Du nun mit
Profiles := TStringList.Create;
Profiles.CommaText := ini.ReadString('Settings','Profiles', '');
Delphi-Quellcode:
Den User aus der StringListe entfernen.
Profiles.delete(Profiles.IndexOf(username))
Zurückschreiben der Profiles in die Ini sollte so gehen:
Delphi-Quellcode:
Dann sollte noch die section des User gelöscht werden:
ini.WriteString('Settings','Profiles',Profiles.CommaText);
Delphi-Quellcode:
Wenn die StringList "Profiles" nicht mehr benötigt wird, solltest
ini.EraseSection(username);
Du sie wieder freigeben:
Delphi-Quellcode:
Ich hoffe es ist so einigermaßen verständlich.
Profiles.free;
Grüße Klaus |
Re: Spielstand speichern mit ini(s)!
ja das ist verständlich aber leider zu spät tut mir leid!
ich habs jetzt selbst nochmal versuch und das ist bei rausgekommen: ich denk mal das ist die version von euch mit einigen macken und mäckeln und einer sichtbaren memo statt stringlist:
Delphi-Quellcode:
***ich musste als parameter irgendwas einfügen? was gehört den da eig rein?
procedure TForm3.Button5Click(Sender: TObject);
var i:integer; begin ini:=TIniFile.create(ExtractFilePath(ParamStr(0))+'..\DATA\save.ini'); try for i:=1 to ini.readinteger('Key','games',1) do begin memo1.Lines[i-1]:= ini.ReadString('Key','game'+inttostr(i),''); //hier les ich alle namen in ein memo end; memo1.Lines.Delete(listbox1.ItemIndex); //hier lösch ich die erste zeile weil sie leer ist (geht bestimmt schöner ini.EraseSection(listbox1.Items[listbox1.itemindex]); //dann die sektion löschen ini.DeleteKey('Key','game'+inttostr(ini.readinteger('Key','games',0))); //und den key ini.writeinteger('Key','games',ini.readinteger('Key','games',0)-1); //dann die anzahl der spieler for i:=1 to ini.readinteger('Key','games',1)do begin ini.writestring('Key','game'+inttostr(i),memo1.Lines[i-1]); //und hier füg ich wieder den memo inhalt ein end; showmessage('Spielstand "'+listbox1.Items[listbox1.itemindex]+'" erfolgreich gelöscht!'); finally ini.free; form3.Button3Click(Sender); //das führt dazu das die liste neu geladen wird *** end; end; auf jedenfall klappts so habs auch getestet bis die ini leer wahr^^ (also keine spielstände mehr enthielt ich denk mal damit hat es sich erledigt! danke für eure hilfe! Torley |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:01 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz