ListView Sortieren erweitert (mit IP)
Dieser und dieser Beitrag sind dazu sicherlich auch interessant...
MfG Florian als nochmalige Erweiterung zu folgender Erweiterung (hört sich komisch an, ist aber so) und in Verbindung mit diesem Beitrag habe ich folgendes erweitert :)
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 09:44 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