Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Listview sortieren (https://www.delphipraxis.net/13647-listview-sortieren.html)

devnull 23. Dez 2003 10:01


Listview sortieren
 
Hi,
ich hab eine ListView (vsReport) mit mehreren Spalten. Wenn man jetzt auf eine der Spalten klicke, soll das Programm die Elemente der Spalten absteigend (alles nur zahlen) ordnen !

Ich hab kein Plan, wie ich das machen soll !
Welchen Sortier-Algorithmus soll ich da benutzen ????

devnull

Keldorn 23. Dez 2003 11:20

Re: Listview sortieren
 
Hallo

Die Onlinehilfe hast du schon gefunden?
Unter Listview -> oncolumnclick, oncompare gibts ein Beispiel wie es geht.
in deinem Fall kannst du comparetext nicht verwenden, wenn du Zahlenstrings ersetzen willst, sondern erstmal in Zahlen wandeln. Wenn du nicht sehr viele Items hast, wird sich das nicht groß geschwindigkeitsmäßig bemerkbar machen.

Mfg Frank

Nalincah 23. Dez 2003 11:53

Re: Listview sortieren
 
Hier im Forum suchenListview sortieren und dann den 2ten eintrag. Da steht es

devnull 23. Dez 2003 12:27

Re: Listview sortieren
 
jetzt hab auch ich das begriffen ...

Delphi-Quellcode:
function CustomSortProc(Item1, Item2: TListItem; ParamSort: integer): integer; stdcall;
begin
  case ParamSort of
    0 : Result := -CompareText(Item1.SubItems.Text,Item2.SubItems.Text);
    1 : Result := CompareText(Item1.SubItems.Text,Item2.SubItems.Text);
    2 : Result := -CompareText(Item1.Caption,Item2.Caption);
    3 : Result := CompareText(Item1.Caption,Item2.Caption);
  end;
end;

procedure TForm1.ListeColumnClick(Sender: TObject;
  Column: TListColumn);
var ColumnToSort: Integer;
begin
  ColumnToSort := Column.Index;
  case ColumnToSort of
    1 : begin
          if posVZ [1] = true then begin
             Liste.CustomSort(@CustomSortProc, 0);
             posVZ [1] := false;
          end
          else begin
             Liste.CustomSort(@CustomSortProc, 1);
             posVZ [1] := true;
          end;
    end;
    else begin
          if posVZ [2] = true then begin
             Liste.CustomSort(@CustomSortProc, 2);
             posVZ [2] := false;
          end
          else begin
             Liste.CustomSort(@CustomSortProc, 3);
             posVZ [2] := true;
          end;
    end;
  end;
end;
Hoffe, dass es jetzt nich ganz falsch is
:oops:


Alle Zeitangaben in WEZ +1. Es ist jetzt 17: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