Alternativer Lösungsweg - GuiCtrlSetBkColor

  • Ich habe ein Tool mit einer GUI, einer Listview in der der Benutzer via Inputs Neue Zeilen einfügen kann, und die Zeilen färben können soll.

    Problem:
    - Erstelle ich mit der Native-Funktion die Zeile so habe ich den Index der eben angelegten Zeile nicht.
    - Erstelle ich mit der UDF-Funktion die Zeile so habe ich die control-ID der eben angelegten Zeile nicht.

    Ich dachte:

    Zitat von _GUICtrlListView_AddItem - Remarks

    As AutoIt uses the $iParam parameter to store the controlID of native-created ListView items, this value should be set sufficiently high for UDF-created items to avoid possible conflict with any existing controls - a starting value of 1000 is recommended.


    der Parameter wird mit der jeweiligen ID besetzt. Fehlanzeige:

    Spoiler anzeigen

    Dann habe ich das nochmal gelesen und dachte ich kann dort eine Zahl angeben, die als Control-ID gesetzt wird. Dann wird jedoch die Zeile nicht gefärbt (Grund unbekannt):

    Spoiler anzeigen


    Den Index möchte ich nutzen um mit der Funktion _GUICtrlListView_SetItemText die Zeile im Nachhinein noch bearbeiten zu können. Die ControlID der Zeile soll in einer versteckten Spalten geschrieben werden. Nun habe ich bislang als einzige Lösung GUICtrlSetData statt _GUICtrlListView_SetItemText:

    Spoiler anzeigen

    Kennt ihr alternative Lösungswege?

    Grüße Yaerox

    Grüne Hölle

  • du könntest die CtrlId's der LV-Items in einem Array speichern. Ich verstehe allerdings nicht warum es nicht möglich sein soll sie auch direkt in der LV abzuspeichern. Ich werde mal das verlinkte Beispiel so abändern und dann hierein editieren.
    Erledigt:

    Edit: Add- und DeleteButton noch hinzugefügt.

    2 Mal editiert, zuletzt von autoBert (8. April 2016 um 11:35)

  • Ich verstehe allerdings nicht warum es nicht möglich sein soll sie auch direkt in der LV abzuspeichern.

    Die Aussage kann ich grad nicht nachvollziehen. Sage ich das irgendwo?
    So wie du es machst (erstellen und dann in einer zweiten Zeile diese Information an die LV-Zeile anhängen) mach ich das aktuell ja auch.

    Interessanter Ansatz ist jedoch:

    $aItem = _GUICtrlListView_GetItemTextArray($listview)

    Man scheint dort ja alle control-ID zu erhalten ... ich werd mir die Funktion dann nochmal genauer anschauen müssen bei Zeiten...arbeite an diesem Projekt leider immer nur wenn Zeit dafür ist.

    Grüße Yaerox

    Grüne Hölle

  • Die Aussage kann ich grad nicht nachvollziehen. Sage ich das irgendwo?

    dann habe ich:

    Dann habe ich das nochmal gelesen und dachte ich kann dort eine Zahl angeben, die als Control-ID gesetzt wird. Dann wird jedoch die Zeile nicht gefärbt (Grund unbekannt):

    wohl falsch interpretiert.

    So wie du es machst (erstellen und dann in einer zweiten Zeile diese Information an die LV-Zeile anhängen) mach ich das aktuell ja auch.
    Man scheint dort ja alle control-ID zu erhalten

    man erhält damit ein Array mit allen Spalteninhalten zu einem LV-Item. Du mußt übrigens nicht alle Spaltenwerte angeben, nur die geänderten:

    Code
    GUICtrlSetData($cID_LVITEM2, "|New B||New D||" & $cID_LVITEM2)


    ein "zusammenstringen" mit Werten aus dem ResultArray von _GUICtrlListView_GetItemTextArray schadet aber auch nicht:

    Code
    $aItem = _GUICtrlListView_GetItemTextArray($idListview, 1);achtung Index nicht CtrlID
     	GUICtrlSetData($cID_LVITEM2, $aItem[1]&'|'&'New B|'&$aItem[3]&'|New D||'& $cID_LVITEM2)

    Wichtig zu wissen ist, daß _GUICtrlListView_GetItemTextArray den 0 basierten Index des LV-Items erwartet und nicht die CtrlID. Das schöne daran ist aber ist: ist kein Index oder -1 angegeben wird das 1. selektierte genommen. Deshalb immer nur in LV mit $LVS_SINGLESEL verwenden, bzw. Routine(n) anpassen: