![]() |
ListView Sortieren erweitert (mit IP)
![]() ![]() MfG Florian als nochmalige Erweiterung zu folgender ![]() (hört sich komisch an, ist aber so) und in Verbindung mit ![]()
Delphi-Quellcode:
so funktioniert das ganze auch für IP-Addressen
Uses Winsock;
var ColumnToSort: Integer; LastSorted: Integer; SortDir: Integer; procedure TForm1.ListView1ColumnClick(Sender: TObject; Column: TListColumn); begin ColumnToSort := Column.Index; if ColumnToSort = LastSorted then SortDir := 1 - SortDir else SortDir := 0; LastSorted := ColumnToSort; (Sender as TCustomListView).AlphaSort; end; procedure TForm1.ListView1Compare(Sender: TObject; Item1, Item2: TListItem; Data: Integer; var Compare: Integer); var TempStr, TextToSort1, TextToSort2: String; begin //Texte zuweisen if ColumnToSort = 0 then begin TextToSort1 := Item1.Caption; TextToSort2 := Item2.Caption; end //if ColumnToSort = 0 then else begin TextToSort1 := Item1.SubItems[ColumnToSort - 1]; TextToSort2 := Item2.SubItems[ColumnToSort - 1]; end; //if ColumnToSort <> 0 then //Je nach Sortierrichtung evtl. Texte vertauschen if SortDir <> 0 then begin TempStr := TextToSort1; TextToSort1 := TextToSort2; TextToSort2 := TempStr; end; //if SortDir <> 0 then //Texte je nach Tag der Spalte unterschiedlich vergleichen case (Sender as TListView).Columns[ColumnToSort].Tag of //Integer-Werte 1: Compare := StrToInt(TextToSort1)-StrToInt(TextToSort2); //Float-Werte 2: begin Compare := 0; if StrToFloat(TextToSort1) > StrToFloat(TextToSort2) then Compare := Trunc(StrToFloat(TextToSort1)-StrToFloat(TextToSort2))+1; if StrToFloat(TextToSort1) < StrToFloat(TextToSort2) then Compare := Trunc(StrToFloat(TextToSort1)-StrToFloat(TextToSort2))-1; end; //2 //DateTime-Werte 3: begin Compare := 0; if StrToDateTime(TextToSort1) > StrToDateTime(TextToSort2) then Compare := Trunc(StrToDateTime(TextToSort1)-StrToDateTime(TextToSort2))+1; if StrToDateTime(TextToSort1) < StrToDateTime(TextToSort2) then Compare := Trunc(StrToDateTime(TextToSort1)-StrToDateTime(TextToSort2))-1; end; //3 //IPs 4: begin Compare := 0; if ntohl(inet_addr(PAnsiChar(TextToSort1))) > ntohl(inet_addr(PAnsiChar(TextToSort2))) then Compare := Trunc(ntohl(inet_addr(PAnsiChar(TextToSort1)))-ntohl(inet_addr(PAnsiChar(TextToSort2))))+1; if ntohl(inet_addr(PAnsiChar(TextToSort1))) < ntohl(inet_addr(PAnsiChar(TextToSort2))) then Compare := Trunc(ntohl(inet_addr(PAnsiChar(TextToSort1)))-ntohl(inet_addr(PAnsiChar(TextToSort2))))-1; end; // 4 //Alles andere sind Strings else Compare := CompareText(TextToSort1,TextToSort2); end; //case (Sender as TListView).Columns[ColumnToSort].Tag of end; //procedure TForm1.ListView1Compare einfach die Tag-Eigenschaft der entsprechenden Spalte auf 4 setzen und staunen :mrgreen: wäre nett wenn ihr den Beitrag in der CLib noch dahingehen erweitern könntet :) [edit] Uses winsock; vergessen :roll: [/edit] |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:41 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz