AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Spielstand speichern mit ini(s)!

Ein Thema von Torley · begonnen am 15. Mär 2008 · letzter Beitrag vom 16. Mär 2008
Antwort Antwort
Seite 2 von 2     12   
Torley

Registriert seit: 24. Jan 2008
Ort: Freudenberg
39 Beiträge
 
Delphi 6 Professional
 
#11

Re: Spielstand speichern mit ini(s)!

  Alt 16. Mär 2008, 16:41
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:
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!');
sieht jemand den fehler?

torley
  Mit Zitat antworten Zitat
Klaus01
Online

Registriert seit: 30. Nov 2005
Ort: München
5.768 Beiträge
 
Delphi 10.4 Sydney
 
#12

Re: Spielstand speichern mit ini(s)!

  Alt 16. Mär 2008, 19:21
Zitat von Torley:
Delphi-Quellcode:
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)); //hier löscht Du den key

  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),'')); //hier versuchst Du den gelöschten Key wieder zu verwenden.
  ini.writeinteger('Key','games',ini.ReadInteger('key','games',1)-1);
  ini.free;
  showmessage('Spielstand erfolgreich gelöscht!');
sieht jemand den fehler?

torley
Habe in Deinen Code Kommentare eingefügt.
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
Klaus
  Mit Zitat antworten Zitat
Torley

Registriert seit: 24. Jan 2008
Ort: Freudenberg
39 Beiträge
 
Delphi 6 Professional
 
#13

Re: Spielstand speichern mit ini(s)!

  Alt 16. Mär 2008, 19:58
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
  Mit Zitat antworten Zitat
Klaus01
Online

Registriert seit: 30. Nov 2005
Ort: München
5.768 Beiträge
 
Delphi 10.4 Sydney
 
#14

Re: Spielstand speichern mit ini(s)!

  Alt 16. Mär 2008, 20:40
Ich versuche es mal:

Zitat von marabu:
[Settings]
Profiles=Hans,Peter,"noch einer"

[Hans]
Points=1
Money=0

[Peter]
Point2=7
Money=3

[noch einer]
Point2=42
Money=17
Der Unterschied des Vorschlags von Achim zu Deinem ist nur der,
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:
Profiles := TStringList.Create;
Profiles.CommaText := ini.ReadString('Settings','Profiles', '');
Dann kannst Du nun mit
Profiles.delete(Profiles.IndexOf(username)) Den User aus der StringListe entfernen.

Zurückschreiben der Profiles in die Ini sollte so gehen:
ini.WriteString('Settings','Profiles',Profiles.CommaText); Dann sollte noch die section des User gelöscht werden:
ini.EraseSection(username); Wenn die StringList "Profiles" nicht mehr benötigt wird, solltest
Du sie wieder freigeben:
Profiles.free; Ich hoffe es ist so einigermaßen verständlich.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Torley

Registriert seit: 24. Jan 2008
Ort: Freudenberg
39 Beiträge
 
Delphi 6 Professional
 
#15

Re: Spielstand speichern mit ini(s)!

  Alt 16. Mär 2008, 21:38
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:
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;
***ich musste als parameter irgendwas einfügen? was gehört den da eig rein?

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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:38 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz