sortieren nach IP

  • das Problem ist nur wo und an welcher Stelle sollte ich dies einabuen, die Listview kann ich ja anscheinend nicht damit auslesen.

    Da es sich ja um eine ListView handelt sieht das ganze wieder bisschen anders aus, als bei der Sortierung eines Arrays.
    Die ListView bringt eine eigene Sortierlogik mit.
    Die _ArraySortFlexible(), welche diese für Arrays beinhaltet brauchst du daher nicht.
    Das was man aber bei der ListView-Sortierung machen kann ist, eine eigene Vergleichsfunktion mitzugeben (per GUICtrlRegisterListViewSort()).
    Es reicht daher dort den Vergleich mit der in der ArrayPlus enthaltenen Vergleichsfunktion __ap_cb_comp_Natural() durchzuführen und dann werden auch die IPs richtig sortiert.

    Bisschen nervig ist jedoch der Aufwand den man betreiben muss um die ListviewElemente auszulesen, sowie die Sortierreihenfolge ordentlich übergeben zu bekommen.
    Dann klappt es aber wie gewünscht:

  • supi es hat wunderbar geklappt, besser als mit wmNotify. Frage ist dieser Markierungsbalken gewünscht, kann man den irgendwo ausschalten oder anpassen ?

    Eine Masterfrage hätte ich aber noch, irgendwie kamm da bei mir auch nur Murx raus. Wie man sieht ist in meinem Script ne Spalte mit \\PCName\c$ das sollte man mir Shelexecute drauf zugreifen können, gibt es eine Möglichkeit dieses noch einzubinden? Mein Script sieht nun folgendermaßen aus: Also ich bräuchte ne Funktion die gezielt den Spaltenwert ausliesst (n). Leider FUnktioniert auch der AktualisierenButton nicht mehr.

    Vielen Dannk noch mal


    lg

    Einmal editiert, zuletzt von casi4712 (8. Juli 2024 um 09:25)

  • Hallo nochmal,


    ich gehe davon aus dass es nicht möglich ist die GUICtrlSetOnEvent zusätzlich dazu zu bringen die Links auszulesen und diese dann zu öffnen. Wahrscheinlich kommt sich das dann in die Quere?


    lg

    und schöne Restwoche

  • dass es nicht möglich ist die GUICtrlSetOnEvent zusätzlich dazu zu bringen die Links auszulesen und diese dann zu öffnen. Wahrscheinlich kommt sich das dann in die Quere?

    Das GUICtrlSetOnEvent ruft eine von dir bestimmte Funktion auf. Was du in dieser Funktion alles veranstaltest, liegt doch letztlich nur an dir. :whistling:

  • ok dachte das kommt sich vielelicht in der Funktion in die Quere aber wie kann ich in der besagten Spalte die Inhalte des LInks auslesen, bei meinen Versuchen hat er leider imemr nur den Link der ersten Zeile genommen, egal ich welcher Zeiel ich geklickt habe.


    Schönen guten Abend noch

    lg

  • Moin casi4712,

    je intensiver ich mich mit deisem Beitrag beschäftige, als desto dürftiger entpuppen sich die Möglichkeiten, die AutoIt als native Funktionen anbietet, um auf Inhalte eines ListView-Controls zuzugreifen.

    ListViews gehören zu den 'geschwätzigsten' Controls. Sie neigen dazu, das Elternfenster mit Nachrichten zu 'fluten'. Nun stellt sich heraus, dass AutoIt sich von all den vielen Nachrichten genau eine herausgreift, die dem Skript gemeldet wird: Den Klick auf eine Spaltenüberschrift im Header! Alles, was mit Klicks im ListView-Bereich zu tun hat, wird schnöde unter den Tisch gekehrt. Das gilt sowohl für den GetMsg- als auch für den OnEvent-Modus. Wenn Du also per GUIGetMsg() oder EventFunc() eine Nachricht vom ListView erhältst, kannst Du Dir sicher sein, dass der Benutzer sich gerade mit dem Header beschäftigt. Ich bin erschüttert.

    Du hast nun das einzige 'Event' dafür verbraucht, die Spaltensortierungzu unterstützen. Mehr ist ohne 'Verrenkungen' auch nicht möglich. Was soll denn der Spaltenklick sonst noch auslösen?

  • Alles, was mit Klicks im ListView-Bereich zu tun hat, wird schnöde unter den Tisch gekehrt. Das gilt sowohl für den GetMsg- als auch für den OnEvent-Modus.

    Wer hat dir denn diesen Bären aufgebunden?

    Listview sind die am effektivsten verwertbaren Control überhaupt.

    Bsp OnEvent:
    EDIT:
    Da du direkt die Nativen Funktionen angesprochen hast, habe ich vergleichsweise sowohl Nativ als auch Listview-UDF eingebaut (Zeile #13/14 entsprechend aus/kommentieren):

    Und mit der Listview-UDF kannst du jede erdenkliche Info rausziehen.

  • Wer hat dir denn diesen Bären aufgebunden?

    Moin,

    das war ich selbst. Ich vergesse immer wieder, dass AutoIt die ListView-Einträge wie eigenständige Controls behandelt. Danke für den Hinweis.

    Der Klick auf eine Zeile wird also tatsächlich signalisiert. Im OnEvent-Mode muss man aber jedem betroffenen 'Listvieweintragscontrol' eine eine Eventfunktion zugewiesen haben. Geliefert wird dann die Control-ID des Eintrags in @GUI_CtrlId. Die kann man in GUICtrlRead() benutzen, um den Inhalt der Zeile auszulesen. So weit, so gut.

    Leider hat das eigentliche ListView-Control von alldem keine Ahnung. AutoIt speichert zwar die Control-ID im Eintrag, der Speicherort hat aber für das ListView-Control keine besondere Bedeutung. Wenn man den Index des Eintrags auslesen will, den man für die 'normale' Bearbeitung der ListVieweinträge braucht, muss man den 'per Hand' ermitteln, z.B. mit _GUICtrlListView_FindParam().

    Listview sind die am effektivsten verwertbaren Control überhaupt.

    Ich würde sagen, sie sind ebensogut verwertbar wie die anderen Controls, wenn man die zugehörigen UDFs einsetzt.

    Für das, was casi4712 vorhaben mag, sollte es in jedem fall reichen.

  • das war ich selbst.

    :rofl:

    Leider hat das eigentliche ListView-Control von alldem keine Ahnung. AutoIt speichert zwar die Control-ID im Eintrag, der Speicherort hat aber für das ListView-Control keine besondere Bedeutung.

    Das ist mir jetzt unklar. Was meinst du mit Speicherort?
    Die Informationen stehen alle über verschieden Funktionen zur Auswertung bereit. Egal, ob ich als Auslöser dem Listview oder dem Listview-Item eine Event-Funktion zuordne.
    Das Listview-Control wird bei Klick auf ein Item informiert und dieses Ereignis liefert mir per GuiCtrlRead(Listview-Control-ID) die Item-Ctrl-ID.
    Mit GUICtrlRead($CtrlID) erfahre ich den Inhalt des kpl. Item. Item-Index erfahre ich mit GUICtrlSendMsg(...).
    Oder alternativ mit den UDF-Funktionen dafür, in denen diese Abfragen komprimiert sind.

    Ich würde sagen, sie sind ebensogut verwertbar wie die anderen Controls, wenn man die zugehörigen UDFs einsetzt.

    War vielleicht etwas unklar ausgedrückt, ich bezog mich da auf die Fülle der zur Verfügung stehenden Parameter.


    P.S. casi4712 Sorry, ich wollte deinen Thread jetzt nicht für Listview-Diskussionen kapern.

  • Das ist mir jetzt unklar. Was meinst du mit Speicherort?

    Die sogenannte 'Control-ID' (ListView-Einträge sind nunmal keine Controls) wird im Feld lParam der LVITEM Struktur abgelegt, die dem Eintrag zugeordnet ist. Dieses Feld kann aus Sicht des ListView-Controls mit beliebigen Informationen belegt sein. In AutoIt sollte man sich aber hüten, den Inhalt zu verändern. Die interne Verbindung von ListViewItem und ListView ginge dann wohl verloren.

    casi4712, ich möchte mich auch für die Offtopic-Nutzung Deines Beitrags entschuldigen. Das sollte sich jetzt auch erledigt haben.