![]() |
ArrayRecord von Listboxen+anderen object speichern und laden
Hullo,
ich komme an einer Stelle meines Proghramms nicht weiter! Undzwar ich habe eine Listbox,wo Personen generiert werden. Name1,Name3 maximal 5 Personen! Ich habe gedacht einen Array Record zu erstellen,da diese 5 Personen ihre eigenen Nummern haben. Wieso Array? Weil ich später auf 30 Personen hochgehen will und da sind einzelne nicht empfehlenswert. ;) Erstmal die definierungen! Keine Angst,momentan funktioniert alles! Wenn "end" oder sowas fehlt,dann anscheinend vergessen zu kopieren!
Delphi-Quellcode:
Die Formcreate:
type
TGast = record //Meine Main Record! Nur Name: string[15]; //Stringwert skill1: string[5]; //Zahlenwert skill2: string[5]; //Zahlenwert aktiv:boolean; //boolean TGastListe = array of TGast; //Zweite Record var Form1: TForm1; GastListe: TGastListe; //Namen der Leute in Listbox1 werden dannach in gaslite gespeichert! Gast: TGast; maxanzahl:integer; end;
Delphi-Quellcode:
Soweit so gut haben wir also einen Array Record! IN diesen Arrayrecord Gastliste speichern wir die Namen der Gäste,die in die Listboxen eingetragen werden.
procedure TForm1.FormCreate(Sender: TObject);
begin button2.hide; SetLength(GastListe, 5); //Gastliste darf nur 5 Leute haben! Dynamisches Array*hust* end; Jetzt die ButtonNamen Prozedur,wo ich durch ein Edit Feld Namen generiere,die in eine Listbox reingetan werden:
Delphi-Quellcode:
Jetzt kommt die sehr wichtige Listboxfunction,wenn ich auf die Namen in der Listbox anklicke:
procedure TForm1.Button1Click(Sender: TObject);
var i:integer; forbidden:boolean; begin Gast.name := Edit1.text; Listbox1.items.add(Gast.name); //Listbox wird jetzt der Name von Edit1.text addiert! end;
Delphi-Quellcode:
Bei Button2 kann man einstellen,ob derjenige aktiv ist! Vorsicht! Ich habe kein FALSE! Und das mit Absicht....
procedure TForm1.ListBox1Click(Sender: TObject);
begin Gastliste[Listbox1.itemindex].name := Listbox1.items[Listbox1.itemindex]; //Gastliste bekommt den Namen von der Stelle,wo man in listbox 1 geklickt hat! Label1.caption := 'Angeklickte Person: ' + Gastliste[Listbox1.itemindex].name; //Dient zur Sicherstellung,ob der geklickte auch wirklich geklickt wurde! end;
Delphi-Quellcode:
Verwirrt euch nicht bei gast.name und gastliste.name!
procedure TForm1.Button2Click(Sender: TObject);
begin Gastliste[Listbox1.itemindex].aktiv := true; //Die Person,die man in Listbox angeklickt hat,wird jetzt auf aktiv gestellt! end; Ich brauche gastliste.name,damit ich weiß,an welcher Stelle in derListbox welcher Gast gemeint ist! ich kann also nicht gast.name[i] schreiben! da komtm ein Fehler! Deshalb brauche ich einen zweiten record,der sogar ein array besitzt! Soweit funktioniert ALLES! Wenn ich 5 Personen generiere und Person 1 aktiv mache,dann ist auch wirklich Person1 aktiv und die anderen nicht! Jetzt die große PREISFRAGE: Wie kann ich diesen Record in eine RICHTIGE Text-/INIdatei speichern UND erfolgreich Laden,so das die gespeicherten Leute wieder in Listbox zu sehen sind und,das auch wirklich die jenigen aktiv dargestellt werden? Ich habe in mehreren Foren gefragt und bisher blieb die Antwort aus :( Ich hoffe ihr könnt mir Helfen! Auf Wunsch bi ich sogar Bereit meine Pas Datei hochzuladen,aber ich denke meine Erklärungen sind GENAU genug,um euch weiterhelfen zu können ;) Mit GROßEM DANK im Voraus! :) |
Re: ArrayRecord von Listboxen+anderen object speichern und l
Für INI-Dateien kannst du hier einmal schauen:
![]() Wenn du aber Records einer festen Größe hast wie in deinem Fall, dann bieten sich typisierte Dateien an, die sind einfach, dafür kannst du eben nur gleiche feste Datentypen darin speichern. |
Re: ArrayRecord von Listboxen+anderen object speichern und l
wie das mit array records geht will ich ja wissen ^^
Von datenspeicherung habe ich nicht so viel Ahnung wie die Profis hier im Forum :) |
Re: ArrayRecord von Listboxen+anderen object speichern und l
Hast du schon mal
![]() |
Re: ArrayRecord von Listboxen+anderen object speichern und l
Schau doch mal in der Suche unter
![]() |
Re: ArrayRecord von Listboxen+anderen object speichern und l
Naja,irgendwie wendet keiner davon das an,was ich versuche... :(
Das richtige Speichern wird mir dadurch zu einem noch größerem Rätsel... PS :INI Dateien würden nicht gehen,da ich IMMER eine "=x" angeben muss und das will ich nicht. Für jeden müsste ich eine ini datei machen und das wäre ein bisschen zu umständlich :( Die Anwendungen mit Filestream sind ganz anders,meins kann man mit den record Werten der anderen nicht vergleichen :/ |
Re: ArrayRecord von Listboxen+anderen object speichern und l
Du brauchst eine "file of TGast", und der Rest sollte den Beispielen gleichen.
|
Re: ArrayRecord von Listboxen+anderen object speichern und l
ok,jemand hat gemeint ich solle Ini Dateien nutzen.
Das habe ich jetzt probiert,das Speichern funktioniert SUPER,aber wie bereits erwartet habe ich großes Schwierigkeiten mit dem Laden! Erstmal die Prozedur des neuen Buttons,der die Ini Datei generiert.
Delphi-Quellcode:
Somit speichert der jetzt diese Werte in die Ini Datei!
var Ini: TIniFile;
VAR i:integer; begin Ini.Free; Ini:=TIniFile.Create('C:\Programme\Borland\Delphi7\Projects\RECORDS\Test.ini'); try for i:= 0 to Listbox1.count -1 do begin Ini.WriteString('Memberlist',Listbox1.items[i],''); // Hier werden die Namen reingeschrieben! Ini.WriteInteger('Skill1',Listbox1.items[i],); Ini.WriteInteger('Skill2',Listbox1.items[i], 10); Ini.WriteBool('Aktiv',Listbox1.items[i],gastliste[i].aktiv); end; finally Ini.Free; end; In der INI Datei steht beispielsweise folgendes:
Delphi-Quellcode:
Es ist extrem komisch ,wieso da jetzt ein Gleichheitszeichen ist,aber ein Verusch bei InI war es wert.
[Memberlist]
Ness= Ness 64= Testplayer= [Skill1] Ness=5 Ness 64=5 Testplayer=6 Das Problem ist jetzt,ich habe Schwierigkeiten,das wieder in die LISTBOX1 hinzuzufügen. Wenn wir annehmen,dass das oben jetzt unsere wirkliche INI Datei ist,m+sste durch den Laden Button in der Listbox folgendes stehen: Ness Ness 64 Testplayer Und die Record Varaible müsste dann so gefühlt sein: gastliste[0].name = Ness gastliste[1].name = Ness 64 gastliste[2].name = Testplayer gastliste[0].level = 5 gastliste[1].level = 5 gastliste[2].level = 6 Und wie man das jetzt macht ist mir noch ein Rätsel!! Da INI ja für feste SAchen genutzt werden,ist es ien zustäzliches Problem,denn wir können nicht wissen,wieviele Personen beim nächsten Mal generiert werden... |
Re: ArrayRecord von Listboxen+anderen object speichern und l
Wie eine INI-Datei aufgebaut ist, ist dir offenbar nicht klar...
Innerhalb der Sektionen stehen immer Wertepaare.
Code:
Bei dir also z.B. so:
[Sektionsname]
Wertname1=Wert2 Wertname2=Wert2 ...
Code:
Du kannst auch eine Liste der Wertenamen holen, usw.
[Memberlist]
Member1=Ness Member2=Ness 64 Member3=Testplayer [Skill1] Ness=5 Ness 64=5 Testplayer=6 |
Re: ArrayRecord von Listboxen+anderen object speichern und l
Da es keine umfangreichen Tuts gibt naja srry dafür!
Ich habe das sofort umgeändert,nur jetzt taucht zum ersten Mal ein Fehler auf:
Delphi-Quellcode:
FEHLER: Wenn ich mehr als 2 Namen generiere,dann erscheint in der INI File nicht der zweite Name!
procedure TForm1.Button5Click(Sender: TObject);
var Ini: TIniFile; var i :integer; begin Ini:=TIniFile.Create('C:\Programme\Borland\Delphi7\Projects\RECORDS\Test.ini'); try for i:= 0 to Listbox1.count -1 do begin Ini.WriteString('Memberlist','Name',listbox1.Items[i]); // Die Namen werden am Ende hinzugefügt! Ini.WriteInteger('Skill1',Listbox1.items[i], 5); //Ob sie einen Skill Wert besitzen und jeder soll den Wert 5 haben end; finally Ini.Free; end; end; Sagen wir,ich habe Ness und Ness 64 generiert und beide haben den Skillwert 5! Dann steht folgendes in der INI File:
Delphi-Quellcode:
Komischerweise wird Ness unterschlagen! Immer der letzte generierte wird der INI File hinzugefügt...
[Memberlist]
Name=Ness 64 [Skill1] Ness=5 Ness 64=5 Aber was noch komischer ist: Alle generierten Leute werden unter der Skil lSection wieder hieingeschrieben! Das was ich da oben geändert habe,war nur von der dritten Stelle in (Ini.WriteString) zur zweiten Stelle zu tauschen. MFG Ness |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:39 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