TreeView durchsuchen und markieren

  • Hi,

    ich habe ein TreeView, in dem ich sämtliche Ordner und Dateien eines bestimmten Pfades aufgelistet habe, ist alles zugeklappt beim Start.

    Jetzt möchte ich nach einem String suchen können und die gefundenen Ordner bzw Dateien (inklusive dem Ordner, in dem sie sich befinden) farbig markieren (Checkboxen sind auch möglich).

    Irgendwie scheine ich für die Logik dahinter zu blöd zu sein ;)

    Aufgebaut ist das TreeView wie im Link:
    https://www.autoitscript.com/forum/topic/12…createtreeview/

    Spoiler anzeigen


    Danke & Gruß,
    x0r

    Simon nörgelt, Simon nervt - aber Simon verbessert die Welt. Glaubt er.

  • so:

    sollte es eigentlich funktionieren, wenn man einen vorhandenen Text eines TreeNodes angibt. Bei meinen Tests ging es aber schief sobald ich etwas anderes als das Homedrive suchte. Ist wohl nicht mein Tag heute.

    • Offizieller Beitrag

    EDIT: Hatte eben erst gelesen, dass auch mehrere Treffer möglich sind. Hier mal als Muster:

    EDIT 2: Habe das mal noch in Funktionen gegossen.

    Eines muß noch erwähnt werden: Die Verwendung von _GUICtrlTreeView_SetItemParam darf nicht erfolgen, wenn die TreeviewItem mit den nativen Funktionen erstellt werden (GUICtrlCreateTreeViewItem). In diesem Fall wird in ItemParam die Ctrl-ID gespeichert. Ein Überschreiben dieses Wertes würde also das Treeview zerlegen, da den Item falsche ID zugeordnet würden.
    Also auschließlich die UDF verwenden.

  • Hi,

    danke für die Antworten und Möglichkeiten, ich werde das morgen gleich testen und bescheid geben, bin grade nicht zuhause.

    Wäre der Hammer, wenns endlich funktioniert :D

    Danke euch!

    Gruß,
    x0r

    Simon nörgelt, Simon nervt - aber Simon verbessert die Welt. Glaubt er.

    2 Mal editiert, zuletzt von x0r (9. Mai 2016 um 12:13)

  • Hi,

    aus "morgen testen" wurde etwas länger.

    Es klappt mir jetz die Parents zum Teil auf, in denen der gesuchte Begriff enthalten ist, wenn ich öfter auf den Button klicke, öffnet sich nach und nach mehr.

    Soll das so? :/

    €dit:
    Sub-Childs werden nicht berücksichtigt. Soweit bin ich jedenfalls schonmal, aber wie krieg ich die auch mit rein?

    AutoIt
    Local $hItem = _GUICtrlTreeView_GetFirstItem($hTreeView)
    	Local $cnt = 1
    	While $hItem <> 0
    		$hItem = _GUICtrlTreeView_GetNext($hTreeView, $hItem)
    		$cnt += 1
    	WEnd
    
    
    	MsgBox(0,"", $cnt)

    Hiermit krieg ich tatsächlich nur die Anzahl der Parents und Childs, aber keine Sub-Childs.
    Wenn ich jetzt aber ein paar manuell aufklappe, dann werden die auch mitgezäht.
    Doof :/


    Grüße,
    x0r

    Simon nörgelt, Simon nervt - aber Simon verbessert die Welt. Glaubt er.

    Einmal editiert, zuletzt von x0r (10. Mai 2016 um 17:32)

  • Das Script klappt alle gefundenen Begriffe auf. Musst die Funktionen _GUICtrlTreeView_SetItemFound,_GUICtrlTreeView_ResetItemFound anpassen, um die Farbe zu ändern (weiß grad nicht wie das geht)
    Kannst auch die Trefferart ändern in der Funktion _searchInTreeViewMatches($TreeView,$item,$text). (Momentan standart stringinstr)


    MfG Kanashius :)

  • Woah...

    Muss den Test leider wieder verschieben :/

    Erstmal Danke, dein Script sieht super aus, mal sehen ob ich das jetz hinkrieg - wenn nicht, häng ich AutoIt an den Nagel und werd Gärtner :D

    Gruß,
    x0r

    Simon nörgelt, Simon nervt - aber Simon verbessert die Welt. Glaubt er.

  • Hi,

    so jetz, getestet, funktioniert aber nur zum Teil.

    Hier mal das komplette Script, irgendwo hängts ganz gewaltig :(

    Im Treeview eine Datei auswählen und mit Rechtsklick dann auf der rechten Seite anzeigen lassen (warum Rechts- und nicht Linksklick, weiss ich nicht - funktioniert nur mit PDF, TXT, BMP usw...), Buttons oben müssten klar sein.

    Suchen funktioniert zum Teil, läd aber auch irgendwie nur einen Bruchteil der ganzen Dateien im $root-Ordner.

    Wenn jemand was weiss oder verbessern möchte, ich bitte darum :)

    Grüße,
    x0r

    Simon nörgelt, Simon nervt - aber Simon verbessert die Welt. Glaubt er.