Einzelnen Beitrag anzeigen

Popov
(Gast)

n/a Beiträge
 
#28

Re: Listbox nach Datum sortieren

  Alt 28. Jun 2009, 14:39
Was ist aber mit all den ganzen Beispielen hier? Doch nichts?

Noch ein mal, auch wenn alle hier mit Beispielen kommen wie man ein StringList sortiert, in deinem Fall ist es Quatsch. So kann man Namen sortieren, aber nicht Daten. Natürlich kann man die Schreibweise der Daten dem Problem anpassen, aber das sollte man nicht. Füge der StringList Objekte mit Klar-Daten und sortiere diese anhand dieser Daten. Dann kannst du in dein StringList schreiben was du willst und wie du es willst.

Hier noch mal die komplette Sortierfunktion zu meinem Beispiel oben. Ich hab Luckies Sortierfunktion etwas angepaßt, sortiere aber nach Daten aus den Objekten. Die Strings der Items interessieren mich dabei nicht:

Delphi-Quellcode:
procedure LBSortieren(LB: TListBox);
var
  Data1, Data2, DataTemp: TData;
  Str1, Str2, StrTemp: String;
  i, j: Integer;
begin
  LB.Items.BeginUpdate;

  for i := LB.Items.Count - 1 downto 1 do
  begin
    for j := 1 to i do
    begin
      Data1 := TData(LB.Items.Objects[j-1]);
      Data2 := TData(LB.Items.Objects[j]);

      if Data1.Datum > Data2.Datum then
      begin
        StrTemp := LB.Items[j];
        DataTemp := TData(LB.Items.Objects[j]);

        LB.Items[j] := LB.Items[j-1];
        LB.Items.Objects[j] := LB.Items.Objects[j-1];

        LB.Items[j-1] := StrTemp;
        LB.Items.Objects[j-1] := DataTemp;
      end;
    end;
  end;

  LB.Items.EndUpdate;
end;
Sieht ähnlich aus wie eine normale Sortierung, hier werden aber die Daten aus dem Objekt verglichen.

Hier ein Beispile mit dem du es testen kannst. Prozedur 1 erzeugt 400 Einträge mit Daten und Texten, Prozedur 2 sortiert sie:

Delphi-Quellcode:
//Zufallsdaten generieren
procedure TForm1.Button1Click(Sender: TObject);

  function ZufallsDatum: TDateTime;
  begin
    Result := EncodeDateTime(Random(109) + 1900, Random(12) + 1, Random(28) + 1,
      Random(23) + 1, Random(59) + 1, Random(59) + 1, Random(100) + 1);
  end;

const
  x = 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed di';
var
  i: Integer;
  DT: TDateTime;
  ZT: String;
begin
  for i := 0 to 400 - 1 do
  begin
    DT := ZufallsDatum;
    ZT := Copy(x, Random(40) + 1, Random(20) + 4); //ZufallsText
    LBItemHinzufuegen(ListBox1, DT, DateTimeToStr(DT) + ' ' + ZT);

    //hier eine etwas verschärfte Version
    //LBItemHinzufuegen(ListBox1, DT, ZT + ' ' + DateTimeToStr(DT));
  end;
end;

//Alles sortieren
procedure TForm1.Button2Click(Sender: TObject);
begin
  LBSortieren(ListBox1);
end;
Angehängte Dateien
Dateityp: zip pak_107.zip (3,4 KB, 11x aufgerufen)
  Mit Zitat antworten Zitat