Autor Beitrag
Bungo
Hält's aus hier
Beiträge: 2


D5
BeitragVerfasst: Di 22.03.05 15:03 
Guden erstmal!

Ich müsste in einer Listbox die Daten so ordnen das sie ab dem heutigen Datum geordnet werden.
Also erst den 22.3.05, dann den 23.3.05, jedoch sollte die Jahreszahl keine Rolle spielen!

listbox1.Sorted:=true; funzt ja leider net...

Thx for help schonmal!

MfG Bungo

Moderiert von user profile iconTino: Titel geändert.
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Di 22.03.05 15:10 
:idea: Wenn du statt einer Listbox eine Listview nehmen würdest, könntest du den Event OnCompare nutzen.
Bungo Threadstarter
Hält's aus hier
Beiträge: 2


D5
BeitragVerfasst: Di 22.03.05 15:16 
user profile icondelfiphan hat folgendes geschrieben:
:idea: Wenn du statt einer Listbox eine Listview nehmen würdest, könntest du den Event OnCompare nutzen.

Mhhh, hab jetzt grad seit paar Monaten delphi... hab noch nie mit einer Listview gearbeitet!
Und die Listbox ist schon an sehr vielen stellen eingebunden...

Geht das mit dem datum prinzipiell gra nicht, oder ist es nur kompliziert?
Sprint
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 849



BeitragVerfasst: Di 22.03.05 15:38 
user profile iconBungo hat folgendes geschrieben:
Geht das mit dem datum prinzipiell gra nicht, oder ist es nur kompliziert?

Doch natürlich geht das. Du schreibst dir eine eigene Funktion, die den neuen String in die ListBox schreiben soll. In dieser Funktion bestimmst du mit Insert wo der String hin soll. Texte kannst du z.B. mit CompareStr oder CompareText vergleichen.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
procedure TForm1.AddToListBox(ListBox: TListBox; const S: String);
var
  I: Integer;
begin

  with ListBox.Items do
  begin
    for I := 0 to Count - 1 do
    begin
      // Hier kannst du nun selber bestimmen, wie deine Strings
      // verglichen werden sollen
      if CompareText(S, Strings[I]) < 0 then
      begin
        Insert(I, S);
        Exit;
      end;
      // ---
    end;
    Add(S);
  end;

end;


ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm1.Button1Click(Sender: TObject);
begin

  AddToListBox(ListBox1, 'Test');
  AddToListBox(ListBox1, 'ABC');
  AddToListBox(ListBox1, 'basd');
  AddToListBox(ListBox1, 'aa');

end;

_________________
Ciao, Sprint.
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Di 22.03.05 15:51 
Wenn die ListBox schon Einträge drin hat, und du diese sortieren willst, würde ich allerdings Quicksort nehmen.
Die Quicksort Routine kannst du aus der Source von TStringList entnehmen. Oder du kannst den Inhalt der ListBox zuerst in eine TStringList kopieren, dort sortieren, und danach wieder zurückkopieren. Das ginge dann etwa so:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
function MySort(List: TStringList; Index1, Index2: Integer): Integer;
begin
 // Vergleich
end;

Var
 List : TStringList;
begin
 List := TStringList.Create;
 with List do
 try
  Assign(ListBox.Items);
  CustomSort(MySort);
  ListBox.Items.Assign(List);
 finally
  Free;
 end;
end;