![]() |
VirtualStringTree: IP Adressen sortieren
Moin,
ich würde gerne einmal wissen wie ihr die Sortierung von IP Adressen im VST gelöst habt. Meine derzeitige Lösung sieht wie folgt aus:
Delphi-Quellcode:
Leider werden Sie immer noch flasch sortiert. Ich habe mir schon überlegt, ob ich sie in 4 Teile zerlege und dann die Sortierung durchführe. Diesen Weg wollte ich aber erst am Schluss machen, da er sehr aufwendig ist.
procedure Tfrm_main.vst_network_subnetdetailsCompareNodes(
Sender: TBaseVirtualTree; Node1, Node2: PVirtualNode; Column: TColumnIndex; var Result: Integer); var SubnetDetailsData1 : TOSubnetDetailsData; SubnetDetailsData2 : TOSubnetDetailsData; IP1, IP2 : Integer; begin SubnetDetailsData1 := TOSubnetDetailsData(vst_network_subnetdetails.GetNodeData(Node1)^); SubnetDetailsData2 := TOSubnetDetailsData(vst_network_subnetdetails.GetNodeData(Node2)^); IP1 := StrToInt(StringReplace(SubnetDetailsData1.ipaddress, '.','',[rfReplaceAll])); IP2 := StrToInt(StringReplace(SubnetDetailsData2.ipaddress, '.','',[rfReplaceAll])); if column > -1 then begin if vst_network_subnetdetails.Header.Columns[Column].Text = 'IP Address' then Result := CompareValue(IP1, IP2); ... end; end; Dank im voraus. Sven |
Re: VirtualStringTree: IP Adressen sortieren
Wäre es nicht sinnvoller, die IP-Adressen(zusätzlich) als DWORD vorzuhalten? Nach diesen könntest Du dann sortieren.
|
Re: VirtualStringTree: IP Adressen sortieren
Und ich schon wieder :lol:
Wie willst du sie denn sortieren? Auf-/absteigend? Oder nach Subnet? Daraus die nächste Frage: Sortierung über HeaderClick (wie im Explorer) oder von außen gesteuert? Je nachdem, wie du dir das gedacht hast, ändert sich auch der Ansatz... |
Re: VirtualStringTree: IP Adressen sortieren
OnHeaderClick auf/absteigend.
Wenn ich sie als DWORD abspeichere, ist es dann nicht das selbe was ich gemacht habe? Ich habe sie zum Integer umgewandelt. Oder irre ich mich? Wie kann man denn aus einem String ein DWORD machen? |
Re: VirtualStringTree: IP Adressen sortieren
Das einfache Wandeln in Integer führt nur dann zum gleichen Ergebnis, wenn Du die einzelnen Oktetts 3-stellig im String vorliegen hast. Ansonsten müsstest Du den String zerlegen, die einzelnen Teilstrings in Byte umwandeln, per Bitshifting an die richtige Position verschieben und binär verodern.
|
Re: VirtualStringTree: IP Adressen sortieren
Ich habe sie jetzt zerlegt und es funktioniert.
Danke. |
Re: VirtualStringTree: IP Adressen sortieren
Zitat:
Warum schreibst du die nicht als Hexzahl hinter einander weg und wandelst dann den Hex in ein DWord?
Code:
192.168.1.2 -> $c0 $a8 $01 $02 -> $c0a80102 -> 3232235778
|
Re: VirtualStringTree: IP Adressen sortieren
Ich muss nochmal das Thema aufgreifen.
Ich verstehe das mit dem DWORD nicht ganz. Wenn ich den String der IP Adresse in ein DWORD umwandel, funktioniert die Sortierung dann wie gewünscht? Wi wandelt man denn 192.168.1.29 in ein DWORD? Vielen Dank im voraus. |
Re: VirtualStringTree: IP Adressen sortieren
eine Möglichkeit:
Delphi-Quellcode:
var
dwip: dword; a,b,c,d: byte; begin a:=192; b:=168; c:=0; d:=1; dwip:=strtoint( '$'+ IntToHex(a,2)+ IntToHex(b,2)+ IntToHex(c,2)+ IntToHex(d,2) ); |
Re: VirtualStringTree: IP Adressen sortieren
Das Ganze mit dem hexadezimalen Zeugs ist nur ein kleines Bissl unperformant
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:40 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