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:
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
so funktioniert das ganze auch für
IP-Addressen
einfach die Tag-Eigenschaft der entsprechenden Spalte auf 4 setzen und staunen
wäre nett wenn ihr den Beitrag in der CLib noch dahingehen erweitern könntet
[edit] Uses winsock; vergessen
[/edit]