Listview Zeile bzw. SubItem farbig markieren

  • Abend zusammen,

    Hab da leider mal wieder was, wo ich nicht weiter komme. Hab dazu zwar was hier gefunden, nur bekomme ich das nicht umgesetzt.

    Hier mal ein Beispiel Script

    Spoiler anzeigen
    [autoit]

    #include <GuiListView.au3>
    #include <WindowsConstants.au3>
    Global $NewSearch = False
    $GUI = GUICreate("Code Snippets", @DesktopWidth - 225, @DesktopHeight - 100, 5, 5, $WS_POPUPWINDOW, $WS_EX_APPWINDOW)
    GUISetBkColor(0x000000, $GUI)

    [/autoit] [autoit][/autoit] [autoit]

    $Exit_Button = GUICtrlCreateButton("X", @DesktopWidth - 225 - 25, 5, 20, 20)
    GUICtrlSetFont(-1, 10, 1000)
    $Mini_Button = GUICtrlCreateButton(Chr(151), @DesktopWidth - 225 - 50, 5, 20, 20)
    GUICtrlSetFont(-1, 10, 400)

    [/autoit] [autoit][/autoit] [autoit]

    $listview1 = GUICtrlCreateListView("Nr|Name|Erweit.", 5, 50, @DesktopWidth - 225 - 10, @DesktopHeight - 100 - 120)
    For $i = 0 To 10
    GUICtrlCreateListViewItem(Random(1, 10,1) & "|" & Random(1, 10,1) & "|" & Random(1, 10,1), $listview1)
    Next

    [/autoit] [autoit][/autoit] [autoit]

    $Input_suche = GUICtrlCreateInput("Suchbegriff eingeben...", @DesktopWidth - 225 - 320, @DesktopHeight - 100 - 47, 200, 20)
    $SearchButton = GUICtrlCreateButton("Suche starten", @DesktopWidth - 225 - 110, @DesktopHeight - 100 - 50, 100, 25)
    GUISetState(@SW_SHOW, $GUI)

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    HotKeySet("^!x", "MeinExit")
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $Exit_Button
    MeinExit()
    Case $Mini_Button
    GUISetState(@SW_MINIMIZE, $GUI)
    Case $SearchButton
    If $NewSearch = False Then
    $SearchString = GUICtrlRead($Input_suche)
    _Suche($SearchString)
    Else
    $SearchString = GUICtrlRead($Input_suche)
    _Suche($SearchString)
    EndIf
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _Suche($search_string)
    Local $AktuelleZeile = 0
    Local $AlteZeile = 0
    $SuchZeile = -1

    [/autoit] [autoit][/autoit] [autoit]

    $search_string = GUICtrlRead($Input_suche)
    Local $counter = 0
    If $search_string <> "Suchbegriff eingeben..." Then
    Do
    $AktuelleZeile = _GUICtrlListView_FindInText($listview1, $search_string, $AlteZeile);, True, True)
    If $AktuelleZeile <> -1 Then
    If $AktuelleZeile >= $AlteZeile Then
    $AlteZeile = $AktuelleZeile
    _GUICtrlListView_ClickItem($listview1, $AktuelleZeile, "left", False, 1)
    $SuchZeile = $AktuelleZeile
    EndIf
    EndIf
    $counter += 1
    Until $AktuelleZeile < $AlteZeile Or $counter > 20
    GUICtrlSetData($SearchButton, "neue Suche")
    $NewSearch = True
    Else
    GUICtrlSetData($Input_suche, "")
    EndIf
    $SuchZeile = -1
    Return $SuchZeile
    EndFunc ;==>_Suche

    [/autoit] [autoit][/autoit] [autoit]

    Func MeinExit()
    Exit
    EndFunc ;==>MeinExit

    [/autoit]

    Nun die Problemstellung:

    Ich möchte, dass jeder gefundene Eintrag, irgendwie kenntlich gemacht wird und zwar dauerhaft bis entweder eine neue Suche gestartet wird oder die Markierungen per Button aufgehoben werden. Schön wäre es natürlich, wenn nur die SubItems markiert werden würden.
    Das Bsp. was hier gefunden hatte, funktioniert über WM_NOTIFY. Nur da steig ich nicht wirklich durch ! :S
    Siehe hier: Klick

    LG
    MrB

    2 Mal editiert, zuletzt von MrB (10. Januar 2012 um 13:45)

  • GUICtrlSetBkColor($listviewitem,Farbe)

    vll hilt dir das weiteR?

    Spoiler anzeigen
    [autoit]

    #include <GuiListView.au3>
    #include <WindowsConstants.au3>
    Global $NewSearch = False
    $GUI = GUICreate("Code Snippets", @DesktopWidth - 225, @DesktopHeight - 100, 5, 5, $WS_POPUPWINDOW, $WS_EX_APPWINDOW)
    GUISetBkColor(0x000000, $GUI)

    [/autoit] [autoit][/autoit] [autoit]

    $Exit_Button = GUICtrlCreateButton("X", @DesktopWidth - 225 - 25, 5, 20, 20)
    GUICtrlSetFont(-1, 10, 1000)
    $Mini_Button = GUICtrlCreateButton(Chr(151), @DesktopWidth - 225 - 50, 5, 20, 20)
    GUICtrlSetFont(-1, 10, 400)

    [/autoit] [autoit][/autoit] [autoit]

    $listview1 = GUICtrlCreateListView("Nr|Name|Erweit.", 5, 50, @DesktopWidth - 225 - 10, @DesktopHeight - 100 - 120)
    Global $listviewitems[11]
    For $i = 0 To 10
    $listviewitems[$i] = GUICtrlCreateListViewItem(Random(1, 10,1) & "|" & Random(1, 10,1) & "|" & Random(1, 10,1), $listview1)
    Next

    [/autoit] [autoit][/autoit] [autoit]

    $Input_suche = GUICtrlCreateInput("Suchbegriff eingeben...", @DesktopWidth - 225 - 320, @DesktopHeight - 100 - 47, 200, 20)
    $SearchButton = GUICtrlCreateButton("Suche starten", @DesktopWidth - 225 - 110, @DesktopHeight - 100 - 50, 100, 25)
    GUISetState(@SW_SHOW, $GUI)

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    HotKeySet("^!x", "MeinExit")
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $Exit_Button
    MeinExit()
    Case $Mini_Button
    GUISetState(@SW_MINIMIZE, $GUI)
    Case $SearchButton
    If $NewSearch = False Then
    $SearchString = GUICtrlRead($Input_suche)
    _Suche($SearchString)
    Else
    $SearchString = GUICtrlRead($Input_suche)
    _Suche($SearchString)
    EndIf
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _Suche($search_string)
    Local $AktuelleZeile = 0
    Local $AlteZeile = 0
    $SuchZeile = -1
    For $i=0 To 10;Farben resetten
    GUICtrlSetBkColor($listviewitems[$i],0xFFFFFF)
    Next

    [/autoit] [autoit][/autoit] [autoit]

    $search_string = GUICtrlRead($Input_suche)
    Local $counter = 0
    If $search_string <> "Suchbegriff eingeben..." Then

    [/autoit] [autoit][/autoit] [autoit]

    For $i=0 To 10
    $index = _GUICtrlListView_FindInText($listview1, $search_string,$i)
    If $index <> -1 Then
    GUICtrlSetBkColor($listviewitems[$index],0xFFFF00)
    EndIf
    Next

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    GUICtrlSetData($SearchButton, "neue Suche")
    $NewSearch = True
    Else
    GUICtrlSetData($Input_suche, "")
    EndIf
    $SuchZeile = -1
    Return $SuchZeile
    EndFunc ;==>_Suche

    [/autoit] [autoit][/autoit] [autoit]

    Func MeinExit()
    Exit
    EndFunc ;==>MeinExit

    [/autoit]

    so würde es gehn :)

    2 Mal editiert, zuletzt von Death (8. Januar 2012 um 18:29)

  • Eigentlich schon, nur baue ich das ListView mit

    Spoiler anzeigen
    [autoit]


    _GUICtrlListView_AddItem()
    _GUICtrlListView_AddSubItem()

    [/autoit]

    Somit weis ich nicht wie ich die Items dann ansprechen soll!

  • BugFix

    Umbauen möchte ich eher nicht. Hab deine UDF gefunden: ListView - SubItem einzeln färben/formatieren, Finale Version! (v1.3)

    Hab die mal versucht zu benutzen, scheitere aber. X(

    Bsp.:

    Spoiler anzeigen
    [autoit]

    #include <GuiListView.au3>
    #include <WindowsConstants.au3>
    #include 'C:\Widget\Snippets\LV_Format_include[1.3].au3'
    #include <GuiListView.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Global $NewSearch = False
    $GUI = GUICreate("Code Snippets", @DesktopWidth - 225, @DesktopHeight - 100, 5, 5, $WS_POPUPWINDOW, $WS_EX_APPWINDOW)
    GUISetBkColor(0x000000, $GUI)

    [/autoit] [autoit][/autoit] [autoit]

    $Exit_Button = GUICtrlCreateButton("X", @DesktopWidth - 225 - 25, 5, 20, 20)
    GUICtrlSetFont(-1, 10, 1000)
    $Mini_Button = GUICtrlCreateButton(Chr(151), @DesktopWidth - 225 - 50, 5, 20, 20)
    GUICtrlSetFont(-1, 10, 400)

    [/autoit] [autoit][/autoit] [autoit]

    $listview1 = GUICtrlCreateListView("Nr|Name|Erweit.", 5, 50, @DesktopWidth - 225 - 10, @DesktopHeight - 100 - 120)
    For $i = 0 To 10
    _GUICtrlListView_AddItem($listview1, Random(1, 10, 1))
    _GUICtrlListView_AddSubItem($listview1, $i, Random(1, 10, 1), 1)
    _GUICtrlListView_AddSubItem($listview1, $i, Random(1, 10, 1), 2) ; Plus der Platz halter für die erste Spalte
    Next

    [/autoit] [autoit][/autoit] [autoit]

    $Input_suche = GUICtrlCreateInput("Suchbegriff eingeben...", @DesktopWidth - 225 - 320, @DesktopHeight - 100 - 47, 200, 20)
    $SearchButton = GUICtrlCreateButton("Suche starten", @DesktopWidth - 225 - 110, @DesktopHeight - 100 - 50, 100, 25)
    GUISetState(@SW_SHOW, $GUI)

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    HotKeySet("^!x", "MeinExit")
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $Exit_Button
    MeinExit()
    Case $Mini_Button
    GUISetState(@SW_MINIMIZE, $GUI)
    Case $SearchButton
    If $NewSearch = False Then
    $SearchString = GUICtrlRead($Input_suche)
    _Suche($SearchString)
    Else
    $SearchString = GUICtrlRead($Input_suche)
    _Suche($SearchString)
    EndIf
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _Suche($search_string)
    Local $AktuelleZeile = 0
    Local $AlteZeile = 0
    $SuchZeile = -1
    _GUICtrlListView_Formatting_Startup($GUI, $listview1)
    $search_string = GUICtrlRead($Input_suche)
    Local $counter = 0
    If $search_string <> "Suchbegriff eingeben..." Then
    Do
    $AktuelleZeile = _GUICtrlListView_FindInText($listview1, $search_string, $AlteZeile);, True, True)
    If $AktuelleZeile <> -1 Then
    If $AktuelleZeile >= $AlteZeile Then
    $AlteZeile = $AktuelleZeile
    _GUICtrlListView_FormattingCell($listview1, $AktuelleZeile, 0, 0x00FF00, 0x008000)
    $SuchZeile = $AktuelleZeile
    EndIf
    EndIf
    $counter += 1
    Until $AktuelleZeile < $AlteZeile Or $counter > 20
    GUICtrlSetData($SearchButton, "neue Suche")
    $NewSearch = True
    Else
    GUICtrlSetData($Input_suche, "")
    EndIf
    $SuchZeile = -1
    _GUICtrlListView_Formatting_Shutdown()
    Return $SuchZeile
    EndFunc ;==>_Suche

    [/autoit] [autoit][/autoit] [autoit]

    Func MeinExit()
    Exit
    EndFunc ;==>MeinExit

    [/autoit]

    AutoIt3.exe schmiert komplett ab. Denke liegt an mir, dass ich was falsch mache, komme nur nicht drauf was.

    LG
    MrB

    Einmal editiert, zuletzt von MrB (9. Januar 2012 um 10:23)

  • Vergesst es. Hab´s so gelöst, dass ich mir mit GDI+ ein Rect um die betreffenden SubItems zeichne. Gefällt mir sogar noch besser so.

    Obwohl ich trotzdem gerne wissen würde, was ich bei der UDF falsch gemacht hab ^^

    • Offizieller Beitrag

    Obwohl ich trotzdem gerne wissen würde, was ich bei der UDF falsch gemacht hab


    Bei der UDF habe ich extra angegeben, dass das nur bei Standard-Listview funktioniert, also erstellt mit "GuiCtrlCreateListview". Mit "_GUICtrlListView_Create" funktioniert es nicht.
    Da könnte also dein Problem liegen.