![]() |
Verschieben von Lines im Memofeld
Hallo,
ich weiß, dass es wohl eher ungern gesehen wird, aber ich bin mit meinem Latein vollkommen am Ende. ich sitze nun seit ca 2 Stunden an einem Programmteil, welches in ein 5 zeilengroßes Memofeld Zahlen, bzw. Strings einordnen soll (und zwar richtig ^^ ) Zur Theorie: es soll eine Highscoreliste sein, welche 5 Spieler enthält und immer wenn jemand mehr Punkte gemacht hat, erst alle Zeilen 1 nach unten verschiebt und dann in die freigewordene Zeile, die neue Punktzahl einträgt. Gegebener Fall der Spieler hat genug Punkte für Platz 3 geworfen, so wird line 5 nach line 6 (also ins Nirvana) geschoben, 4 nach 5 und 3 nach 4 danach wird line 3 mit der neuen Punktzahl versehen. Technisch realisiert habe ich das zum einen über eine for-schleife mit 5 downto X und in der forschleife dann
Delphi-Quellcode:
zum tauschen.
Memo1.Lines.Strings[i]:=Memo1.Lines.Strings[i-1];
was auch seperat für sich sehr gut funktioniert hat, nur in meinem quelltext eingebunden kommt wirklich nur Müll herraus .... ich erkenne nicht ein mal eine Regelmäßigkeit ... hier der gesamte Code-Teil, der noch sehr roh ist:
Delphi-Quellcode:
Wenn es jemand haben möchte, schick ich auch gerne die ganze dpr etc .. bzw wenn zusatzinfos noch gebraucht werden
for i:=1 to 6 do //bei 6 spielern wird jeder spieler einzeln durchgegangen
begin if (ASP[i]>Ahcp[5]) and (ASP[i]<Ahcp[4]) then // ASP sidn die aktuellen spielerpunkte | Ahcp sind die Punkte der highscoreliste begin mb:=MessageDlg('Highscore speichern, Spieler ' + inttostr(i) + '?', mtInformation, [mbYes,mbNo], 0); if mb=6 then begin Ahcp[5]:=ASP[i]; // die scorepunkte werden durch die spielerpunkte ersetzt for j:=5 downto 4 do begin Memo1.Lines.Strings[i]:=Memo1.Lines.Strings[i-1]; //der tausch von den lines (Anzeige) Memo2.Lines.Strings[i]:=Memo2.Lines.Strings[i-1]; //tausch der lines nur die punkte (damit komm ich um ein aueinandernehmen des strings herum, nicht besonders schön, da man 2 Dateien benötigt, aber es funktioniert ^^ ) end; Memo1.Lines.Strings[4]:=('5. ' + inttostr(ASP[i]) + ' Punkte ' + Name.text); Memo2.Lines.Strings[4]:=inttostr(ASP[i]); end; end; if (ASP[i]>Ahcp[4]) and (ASP[i]<Ahcp[3]) then begin mb:=MessageDlg('Highscore speichern, Spieler ' + inttostr(i) + '?', mtInformation, [mbYes,mbNo], 0); if mb=6 then begin Ahcp[4]:=ASP[i]; for j:=5 downto 3 do begin Memo1.Lines.Strings[i]:=Memo1.Lines.Strings[i-1]; Memo2.Lines.Strings[i]:=Memo2.Lines.Strings[i-1]; end; Memo1.Lines.Strings[3]:=('4. ' + inttostr(ASP[i]) + ' Punkte ' + Name.text); Memo2.Lines.Strings[3]:=inttostr(ASP[i]); end; end; if (ASP[i]>Ahcp[3]) and (ASP[i]<Ahcp[2]) then begin mb:=MessageDlg('Highscore speichern, Spieler ' + inttostr(i) + '?', mtInformation, [mbYes,mbNo], 0); if mb=6 then begin Ahcp[3]:=ASP[i]; for j:=5 downto 2 do begin Memo1.Lines.Strings[i]:=Memo1.Lines.Strings[i-1]; Memo2.Lines.Strings[i]:=Memo2.Lines.Strings[i-1]; end; Memo1.Lines.Strings[2]:=('3. ' + inttostr(ASP[i]) + ' Punkte ' + Name.text); Memo2.Lines.Strings[2]:=inttostr(ASP[i]); end; end; if (ASP[i]>Ahcp[2]) and (ASP[i]<Ahcp[1]) then begin mb:=MessageDlg('Highscore speichern, Spieler ' + inttostr(i) + '?', mtInformation, [mbYes,mbNo], 0); if mb=6 then begin Ahcp[2]:=ASP[i]; for j:=5 downto 1 do begin Memo1.Lines.Strings[i]:=Memo1.Lines.Strings[i-1]; Memo2.Lines.Strings[i]:=Memo2.Lines.Strings[i-1]; end; Memo1.Lines.Strings[1]:=('2. ' + inttostr(ASP[i]) + ' Punkte ' + Name.text); Memo2.Lines.Strings[1]:=inttostr(ASP[i]); end; end; if (ASP[i]>Ahcp[1]) then begin mb:=MessageDlg('Highscore speichern, Spieler ' + inttostr(i) + '?', mtInformation, [mbYes,mbNo], 0); if mb=6 then begin Ahcp[1]:=ASP[i]; for j:=5 downto 0 do begin Memo1.Lines.Strings[i]:=Memo1.Lines.Strings[i-1]; Memo2.Lines.Strings[i]:=Memo2.Lines.Strings[i-1] ; end; Memo1.Lines.Strings[0]:=('1. ' + inttostr(ASP[i]) + ' Punkte ' + Name.text); Memo2.Lines.Strings[0]:=inttostr(ASP[i]); end; end; end; .::edit 1: Mit dem Befehl lines.move(j-1,j) habe ich es auch schon probiert, da kam allerdings noch mehr Müll bei raus irgendwie ... ::. |
Re: Verschieben von Lines im Memofeld
Wie wäre es denn, wenn du eine separate Highscore-Liste nimmst (also für die Daten), dort die Sortierung vornimmst, und dann in das Memo-Feld schreibst (Trennung von Daten, Code und Anzeige)
cu Oliver |
Re: Verschieben von Lines im Memofeld
also ich habe ja 2 verschiedene listen :
eine die angezeigt wird, also Punkte Spieler, und eben eine wo nur die punkte drin sind mit der ich arbeite, die angezeigte Liste wird nur indirekt über die andere Liste verändert, da diese ja parallel laufen. oder habe ich dich falsch verstanden ... |
Re: Verschieben von Lines im Memofeld
Ja, ich denke schon ...
Die Daten-Liste sollte alle Informationen in seperaten Feldern (Punkte, Name, etc.) haben. Die kann man jetzt recht einfach durchsortieren. Wenn die dann sortiert ist, dann das Memo-Feld komplett aus der Daten-Liste neu aufbauen (in der gewünschten Reihenfolge) cu Oliver |
Re: Verschieben von Lines im Memofeld
das problem ist aber, dass ich selbst bei dem memofeld wo nur die zahlen drin sind es nicht schaffe das einmal durchzusortieren ohne das plötzlich irgendwelche lines überschrieben werden, die ich im Code nicht mal angesprochen habe ...
.:: edit: ohh man ich hab den Fehler gefunden .... ich hab die falsche Laufvariable genutzt ich Hammel .. trotzdem danke ::. greetz |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:30 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