Treeview Icons einzeln ändern

  • Oscar

    Sage mal, weißt Du warum meine angepasste Variante mit mehreren Icons nicht funktioniert? Ich hätte gedacht, dass Dein Bespiel beliebig erweiterbar ist auf unterschiedliche Icons...

    Das war ja dein Vorschlag, der wunderbar funktioniert solange ich zwischen 2 Icons wählen möchte.

    Abgeändert habe ich die If-Then Abfrage erweitert auf ElseIf aber er beachtet generell nur 2 Icons....

    Warum kann ich auf diese Art die Anzahl der nötigen Icons beliebig erweitern? Ich meinen Augen ist die Else-IF-Erweiterung richtig.

    Sorry das ich hier nochmal mit meinem halbwissen nachhake :(

    Mein AutoIT Smartphone GUI >>hier<<

    Der Mensch ist das einzige Tier, dass arbeiten muss.

  • Man sollte das offensichtliche bezweifel? Wenn in Deinen Augen die elseif Abfrage richtig ist - warum funktioniert es dann nicht? Weil die Funktion mangelhaft ist? Oder elseif nicht funktioniert? Bau doch mal direkt nach elseif eine msgbox ein und schau ob diese "erscheint" Danach sprechen wir darüber ob elseif richtig ist?

    Gruß

    Peter

    Hinweise auf Suchmaschinen finde ich überflüssig - wer fragt hat es nicht gefunden oder nicht verstanden. Die Antwort gibt sich oftmals schneller als der Hinweis auf Dr. Goggle & Co.

    Ab 19-10-22 ergänzt um:

    Die Welt wird nicht bedroht von den Menschen, die böse sind, sondern von denen, die das Böse zulassen. (Albert Einstein)

  • Ich habs mit ConsoleWrite diesmal gemacht, da ich sonst mit msgboxen bombardiert werde.

    Er springt nicht in den Else-If Bereich rein, da die Bedingung beim ersten "If" bereits erfüllt ist, daher interessiert ihn der weitere Rest nicht...

    Aber genau dafür habe ich ja ein ElseIf verwendet.... ich raffs nicht :(

    Mein AutoIT Smartphone GUI >>hier<<

    Der Mensch ist das einzige Tier, dass arbeiten muss.

    • Offizieller Beitrag

    Er springt nicht in den Else-If Bereich rein, da die Bedingung beim ersten "If" bereits erfüllt ist, daher interessiert ihn der weitere Rest nicht...

    Genau! Du hast es bereits richtig erkannt.

    Also muss die Logik anders aussehen. Da Du aber dazu nichts schreibst, musst Du es halt selbst probieren.

    Vielleicht hilft Dir ja Select weiter? Oder zwei getrennte If-Abfragen?

  • Zwei getrennte If-Abfragen habe ich auch gleich anschließend probiert. Er ändert jedoch keine weiteren Icons sondern behält nur die beiden aus der ersten If-Then Abfrage bei...

    Im Prinzip macht mein Tool nix anders als Verzeichnis X einzulesen. Er prüft anschließend in den Dateien in der Zeile 5 oder der Wert 4 oder 1 steht (Checkbox aktiv oder nicht). Dementsprechend haben nun Dateien, wo die Checkbox aktiviert ist ein anderes Icon als die Dateien wo die Checkbox deaktiviert ist.

    Wie gesagt - solange das nur die fünfte Zeile geprüft wird macht er alles so wie er soll. Anschließend soll er aber die Zeile 6 auslesen und auch dort wieder schauen ob Wert 4 oder 1 und auch dort die restlichen Icons anpassen... Derzeit raucht mir wirklich mein Kopf und ich seh den Wald vor lauter Bäumen nicht mehr.

    Mein AutoIT Smartphone GUI >>hier<<

    Der Mensch ist das einzige Tier, dass arbeiten muss.

    • Offizieller Beitrag

    soll er aber die Zeile 6 auslesen und auch dort wieder schauen ob Wert 4 oder 1 und auch dort die restlichen Icons anpassen.

    Häh? Was für restliche Icons?

    Das Treeview-Item kann nur ein Icon anzeigen. Wenn es laut Zeile 5 (Wert 4 vorhanden) bereits das Icon Nr. 111 hat, soll es dann laut Zeile 6 ein anderes Icon bekommen, oder was?

    Ich verstehe das jetzt so:

  • Hm nee... ich glaube ich drücke mich auch einfach blöd aus. Entschuldige, ich versuche es nochmal anders zu erklären:

    Also, wenn die TreeView aufgebaut wird bekommen alle Items ja ein und dasselbe Icon. Nennen wir es mal Icon 1.

    Soweit so gut. Nun ist es aber so, dass in den Dateien die er ausließt, auch die Werte der Checkboxen gespeichert sind, ob diese halt aktiviert sind oder nicht.

    Gehen wir jetzt mal von dem Fall aus ich hätte nur eine Checkbox. Wenn diese aktiviert ist (und der Wert demnach in der Datei in Zeile fünf auf "1" geändert wird) dann soll nur dieses eine Item ein anderes Icon bekommen. Nennen wir es der Einfachheit halber Icon 2.

    Das heißt im Beispiel: ich habe 10 Dateien im Ordner. Bei 9 ist die Checkbox inaktiv, also bekommen alle das Icon 1 und bei der zehnten Datei ist die Checkbox aktiv, diese soll also Icon 2 erhalten.

    Ziel ist es dadurch, gecheckboxte Dateien sofort durch das Icon herauszuerkennen. Mit nur einer Checkbox funktioniert das ganze auch. Nun habe ich aber eine zweite Checkbox eingebaut. Diese schreibt jetzt ihren Wert in die Dateizeile 6.

    Also soll im Grunde nur geschaut werden:

    Ist Checkbox 1 aktiv wähle Icon 2, ist Checkbox 2 aktiv wähle Icons 3 und ist gar keine Checkbox aktiv wähle Icon 1 - sprich das Standardicon.

    Ich dachte es wäre hier mit der einfachen If-Then abfrage getan aber anscheinend ist dies nicht der Fall.... ich kann gern bei Bedarf mein komplettes Skript nochmal hochladen?

    Erstmal vielen Dank das ihr euch meines Problems überhaupt annehmt...

    Mein AutoIT Smartphone GUI >>hier<<

    Der Mensch ist das einzige Tier, dass arbeiten muss.


  • ContinueCase... du brauchst doch nur die Cases vertauschen?!

    AutoIt
    Select
        Case $read_important = 4
            _GUICtrlTreeView_SetIcon($hTreeView, $hFileItem, 'shell32.dll', 92)
        Case $read_reservierung = 4
            _GUICtrlTreeView_SetIcon($hTreeView, $hFileItem, 'shell32.dll', 111) ;Icon 111
        Case Else
            _GUICtrlTreeView_SetIcon($hTreeView, $hFileItem, 'shell32.dll', 5)
    EndSelect
  • Guten Morgen zusammen,

    gestern ging leider nichts mehr zu testen. War fertig mit den Nerven :)

    Hab heute mal beide Codes probiert. Auch mit ContinueCase - er setzt es nicht um.

    Hier mal 3 Screenshots dazu.

    Auf Bild 1 ist zu sehen, dass die Checkbox "Reservierung" aktiv ist - er soll also Icon 1 (als Beispiel) wählen.

    Auf Bild 2 ist zu sehen, dass die Checkbox "Wichtig" aktiv ist - er soll also Icon 2 wählen.

    Auf Bild 3 ist zu sehen, dass keine Checkbox aktiv ist, er aber dennoch nicht das dritte Icon wählt sondern stattdessen noch immer das Icon als ob eine Checkbox aktiv wäre.

    Ich hoffe es ist damit etwas offensichtlicher was nicht funktioniert?

    LG

  • Oscar

    Ja, dass weiß ich. Habe mich da evtl nur wieder doof ausgedrückt :)

    Hier mal das komplette Script:

    (siehe Dateianhang - war zu lang für den Post)

    Ab Zeile 307 (wenn ich es grad richtig sehe) beginnt das Dilemma.... auskommentiert ist mein alter Codeteil, der mit 2 Unterschiedlichen Icons arbeitet, dadrunter kommt euer "Select" Beispiel.

    Du kannst ja, wenn das Skript läuft, einfach selber ein sogenanntes OSC Ticket erstellen, dann wirst du den unterschied mit den angezeigten icons sehen.

    LG

    Mirko

  • So, ich habe jetzt nochmal die letzte Tage rumgetestet wie wild - immer mit dem selben Ergebnis. Es funktioniert einfach nicht. 2 Unterschiedliche Icons gehen noch - sobald ein drittes dazu kommt ist vorbei, bzw es wird ignoriert.

    Ich weiss nicht mehr weiter :( :( :(

    Mein AutoIT Smartphone GUI >>hier<<

    Der Mensch ist das einzige Tier, dass arbeiten muss.

    • Offizieller Beitrag

    Ich weiss nicht mehr weiter

    Dein ganzes Script zu debuggen, ist mir zu aufwendig.

    Ich habe es mal neu geschrieben. Im OnEventMode und ohne diese Restarts des Scripts (wozu sollen die gut sein?).

    Die verschiedenen Statusse (Normal, Erledigt, Reserviert, Wichtig) habe ich in eine Zahl (4 Bits) zusammengefasst.

    Für das Treeview muss man nicht die Riesenfunktion zum Directory einlesen benutzen. Das geht viel kürzer und die Priorität der Icons habe ich jetzt mal so gewählt, wie es mir am logischsten schien.

    Im ZIP-Archiv (im Anhang) befinden sich auch ein paar Beispieldatensätze, sodass Du siehst, dass es mit den verschiedenen Icons durchaus geht.

    Wenn Dir die ganzen Kommentare als Erklärung nicht ausreichen, dann frag einfach. :)

  • Erstmal danke das du drüber geschaut hast... ich muss da erstmal durchsteigen, da es natürlich ganz anders geschrieben ist, als ich meine Zeilen schreibe... so wie Du erstmal meinen Code verstehen musst hab ich jetzt auch erstmal zu tun :) :) :)

    Die Restarts des Skripts habe ich als Notlösung eingebaut da in ich meinem Skript einen Fehler habe, der lustigerweise in deinem Skript ähnlich auftaucht. Wenn du die Dropdownliste öffnest hast du ja alle Märkte zur Auswahl. Öffne mal das Dropdown menü, nachdem Du eine datei erstellt hast die keinen markt ausgewählt hat. dann hast du anschließend im dropdownmenü keine einträge mehr zur auswahl.

    und obwohl ich extra mit

    GUICtrlSetData($input_infos[0], "MM Alex|MM Biesdorf|MM Brandenburg|MM Charlottenburg|MM Eiche|MM Gropius|MM HBF|MM HSH|MM Moabit|MM Neukölln|MM Potsdam|MM Prenz'l Berg|MM Schöneweide|MM Schwedt|MM Spandau|MM Steglitz|MM Tegel|MM Tempelhof|MM Waltersdorf|MM Wedding", "")

    das Control wieder "fülle" schreibt er es stattdessen alles nur noch in eine Zeile. Das heißt er klappt bei mir das Dropdown auf und anstelle von 20 Märkten untereinander habe ich nur einen Eintrag zur Auswahl wo er alles hintereinander schreibt. Um das zu umgehen habe ich diese Restart-Dinge eingebaut damit die Dropdownfelder wieder normal sind....


    So... jetzt is schon spät. Ich schau mir mal morgen dein Skript komplett an und versuche zu verstehen :)

    LG

    Mirko

    Mein AutoIT Smartphone GUI >>hier<<

    Der Mensch ist das einzige Tier, dass arbeiten muss.

    • Offizieller Beitrag

    Öffne mal das Dropdown menü, nachdem Du eine datei erstellt hast die keinen markt ausgewählt hat. dann hast du anschließend im dropdownmenü keine einträge mehr zur auswahl.

    Ah, klar! Dann wird ein Leerstring in die Combobox geschrieben.

    Lässt sich aber durch eine kleine Abfrage ohne Neustart lösen. Tausche mal die Funktion "_TicketClick" gegen diese aus:

    Edit: Das Gleiche gilt ja auch für die Abteilung (ist ja auch eine Combobox). Script angepasst.

  • Ahja.. komisch... in meinem alten Skript bekomme ich das nicht gelöst...

    Wie auch immer. Eine Frage habe ich zu den Gruppen. Du schließt jede Gruppe mit GUICtrlCreateGroup('', -99, -99, 1, 1) - dies habe ich noch nie so gesehen und frage mich wozu dies dient? Die Gruppen werden doch auch ohne diesen Befehlt erstellt und kommen sich nicht in die Quere? Ich habe noch nicht eine Gruppen erstellt und diese im nachhinein geschlossen. Kannst Du mir das noch kurz erklären? Sonst bin ich noch weiter an dem Code zum verstehen... is für mein Laienhaftes Wissen noch recht viel Neuland :)

    Mein AutoIT Smartphone GUI >>hier<<

    Der Mensch ist das einzige Tier, dass arbeiten muss.

    • Offizieller Beitrag

    Im Example zu GUICtrlCreateGroup wird das so gemacht, dass die Gruppe geschlossen wird. Von daher habe ich mir das so angewöhnt, dieses auch zu tun.

    Ich glaube aber, dass es nur einen Effekt hat, wenn man Radio-Controls verwendet (diese sind dann entsprechend gruppiert).

    In den Remarks steht allerdings nichts davon, dass es erforderlich wäre, die Gruppen zu schliessen. Das weglassen führt also wohl nicht zu einem Speicherleck wegen nicht geschlossener Handles oder so.

    • Offizieller Beitrag

    Achso, ich habe mich noch gefragt, ob Du die Tickets in dem Treeview "sortiert" haben willst?

    Also je nach Status in einem eigenen Ast?

    Wenn ja, dann tausche die Funktion _UpdateTicketTreeview mal gegen diese hier aus: