Einzelnen Beitrag anzeigen

Thorben77

Registriert seit: 22. Okt 2004
359 Beiträge
 
#4

Re: Highscore - Problem mit sortieren !

  Alt 19. Feb 2006, 19:16
Nabend.

Also...

Delphi-Quellcode:
var
  Name: string; // siehe unten
  SaveList: TStrings; // hier überflüssig
  i, j: Integer; // "j" ist hier auch überflüssig, "i" solltest Du lieber in der Laden-Prozedur deklarieren
  Zeit: Integer; // siehe unten
Zunächst solltest Du diese ganzen Variablen in den Prozeduren, in denen Du sie verwendest, lokal deklarieren. Dann merkst Du auch, dass Du Dir die "SaveList"-Variable sparen kannst ("i", "j", und "Name" auch ), weil Du sie in der Speicher-Prozedur (bzw. anderen) schon deklariert hast.

Zwischenfrage: Warum schreibst Du Dir eine "eigene" PosEx-Funktion (bzw. kopierst sie ), die gibt's doch schon in den StrUtils (die Du ja auch schon unter Uses stehen hast) ?

Weiter...

Im ListView-OnCompare vergleichst Du nicht, ob die beiden Integer, auf die die "Datas" zeigen, gleich sind, sondern nur, ob sie auf dieselbe Adresse zeigen.
Delphi-Quellcode:
procedure TForm1.ListView1Compare(Sender: TObject; Item1, Item2: TListItem;
  Data: Integer; var Compare: Integer);
var
  Item1IntData, Item2IntData: Integer;
begin
  { Die Data-Eigenschaft eines ListItems ist vom Typ Pointer, daher muss man sie in einen Zeiger auf einen Integer umwandeln, um
   an den Wert, auf den er zeigt, zu kommen: }

  Item1IntData := PInteger(Item1.Data)^;
  Item2IntData := PInteger(Item2.Data)^;
  if Item1IntData = Item2IntData then
    Compare := 0
  else
    if Item1IntData > Item2IntData then
      Compare := 1
    else
      Compare := -1;
end;
Die Btn1Click-Prozedur war mein' ich auch nicht ganz richtig, so wär' es besser:
Delphi-Quellcode:
procedure TForm1.btn1Click(Sender: TObject);
var
  Name: string; // ist jetzt hier deklariert
  Zeit: Integer; // dito
begin
  Name := Edt1.text;
  Zeit := Random(1000); // diese Zeile ist jetzt hier
  with ListView1.Items.Add do begin
    Caption := Name;
    SubItems.Add(IntToStr(Zeit));
    Data := @Zeit; // das @ gibt die Adresse der Variable "Zeit" zurück
  end;
end;
Im OnCreate des Fensters solltest Du noch ein "Randomize" aufrufen, um "den Zufallsgenerator zu initialisieren" .
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin;
  Randomize; // <--- hier
  laden;
end;
MfG

PS: Ich hoffe, ich hab' da jetzt keinen Quatsch verzapft.

Edit: Hab' noch ein bissl was hinzugefügt.
  Mit Zitat antworten Zitat