AGB  ·  Datenschutz  ·  Impressum  







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

Verschieben von Lines im Memofeld

Ein Thema von Imhotep · begonnen am 29. Nov 2008 · letzter Beitrag vom 29. Nov 2008
Antwort Antwort
Imhotep

Registriert seit: 21. Nov 2008
6 Beiträge
 
#1

Verschieben von Lines im Memofeld

  Alt 29. Nov 2008, 21:57
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

Memo1.Lines.Strings[i]:=Memo1.Lines.Strings[i-1]; zum tauschen.

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:
  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;
Wenn es jemand haben möchte, schick ich auch gerne die ganze dpr etc .. bzw wenn zusatzinfos noch gebraucht werden

.::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 ... ::.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

Re: Verschieben von Lines im Memofeld

  Alt 29. Nov 2008, 22:03
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
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Imhotep

Registriert seit: 21. Nov 2008
6 Beiträge
 
#3

Re: Verschieben von Lines im Memofeld

  Alt 29. Nov 2008, 22:06
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 ...
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

Re: Verschieben von Lines im Memofeld

  Alt 29. Nov 2008, 22:13
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
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Imhotep

Registriert seit: 21. Nov 2008
6 Beiträge
 
#5

Re: Verschieben von Lines im Memofeld

  Alt 29. Nov 2008, 22:19
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
  Mit Zitat antworten Zitat
Antwort Antwort


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 13:59 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