GUICtrlCreateListView markierung beibehalten

  • Hi,

    ich hätte gerne, dass wenn ich in eine GUI eine Zeile markiert habe auch weiterhin markiet bleibt auch wenn auf z.b. einen Button innerhalb der GUI geklickt wird oder die GUI nichtmehr den Fokus hat.

    Habs so probiert aber leider erfolglos:

    Spoiler anzeigen
    [autoit]

    #include <ListViewConstants.au3>
    #include <GUIConstantsEx.au3>

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

    $Form1 = GUICreate("Form1", 625, 443, 192, 124)
    $ListView1 = GUICtrlCreateListView("ID|Name|Port|Status|Online|Max Clients|Uptime", 24, 16, 561, 281, BitOR($LVS_NOSORTHEADER, $LVS_SINGLESEL, $LVS_SHOWSELALWAYS))
    GUICtrlCreateListViewItem("1|test|1234", $ListView1)
    GUICtrlCreateListViewItem("2|noch einer|6434", $ListView1)
    GUICtrlCreateListViewItem("44|der letzte|1010", $ListView1)

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

    $Button1 = GUICtrlCreateButton("Button1", 32, 312, 75, 25)

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

    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

    [/autoit]

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

    • Offizieller Beitrag

    Benutze mal den Style $LVS_SHOWSELALWAYS ;)

    Ups, hast du ja schon. Dein Beispiel zeigt auch bei Fokusverlust den selektierten Eintrag.
    Weiß jetzt ehrlich nicht wo dein Problem ist 8|

  • Mh ok seh es grade so ganz leicht grau, kann man da irgendwie andere Farbe dann noch setzen lassen?

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Hatte meinen Post schon editiert Raupi hehe weil ichs doch gesehen habe :). Kann man dieses grau irgendwie in andere Farbe ändern?

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Währe nice wenn das machen würdest :).

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

    • Offizieller Beitrag

    Hier kommt dein verprochenes Beispiel, hat en bischen gedauert weil ich unterwegs war.

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <GuiListView.au3>
    #include <ListViewConstants.au3>
    #include <StructureConstants.au3>
    #include <WindowsConstants.au3>

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

    $Form1 = GUICreate("Form1", 625, 443, 192, 124)
    $ListView1 = GUICtrlCreateListView("ID|Name|Port|Status|Online|Max Clients|Uptime", 24, 16, 561, 281, BitOR($LVS_NOSORTHEADER, $LVS_SINGLESEL))
    $hListView = GUICtrlGetHandle($ListView1)
    GUICtrlCreateListViewItem("1|test|1234", $ListView1)
    GUICtrlCreateListViewItem("2|noch einer|6434", $ListView1)
    GUICtrlCreateListViewItem("44|der letzte|1010", $ListView1)

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

    $Button1 = GUICtrlCreateButton("Button1", 32, 312, 75, 25)

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

    GUISetState(@SW_SHOW)
    GUIRegisterMsg($WM_NOTIFY, "_WM_NOTIFY")

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

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

    Func _WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    #forceref $hWnd, $iMsg, $iwParam
    Local $hWndFrom, $iCode, $tNMHDR, $tInfo
    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iCode = DllStructGetData($tNMHDR, "Code")
    Switch $hWndFrom
    Case $hListView
    Switch $iCode
    Case $NM_CUSTOMDRAW
    Local $Selected1 = ControlListView($Form1, "", $ListView1, "GetSelected", 0)
    Local $tCustDraw = DllStructCreate($tagNMLVCUSTOMDRAW, $ilParam)
    Local $iDrawStage, $iItem, $iSubitem, $hDC, $iColor1, $iColor2, $iColor3
    $iDrawStage = DllStructGetData($tCustDraw, 'dwDrawStage')
    Switch $iDrawStage
    Case $CDDS_ITEMPREPAINT
    Return $CDRF_NOTIFYSUBITEMDRAW
    Case BitOR($CDDS_ITEMPREPAINT, $CDDS_SUBITEM)
    $iItem = DllStructGetData($tCustDraw, 'dwItemSpec')
    If $Selected1 = $iItem Then
    $iColor1 = RGB2BGR(0x3399FF); Item wurde ausgewählt Hintergrund ändern
    $iColor2 = RGB2BGR(0xFFFFFF)
    Else
    $iColor1 = RGB2BGR(0xFFFFFF)
    $iColor2 = RGB2BGR(0x000000)
    EndIf
    DllStructSetData($tCustDraw, 'clrTextBk', $iColor1)
    DllStructSetData($tCustDraw, 'clrText', $iColor2)
    Return $CDRF_NEWFONT
    EndSwitch
    Case $NM_CLICK, $NM_RCLICK
    Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
    Local $sCurSel = _GUICtrlListView_GetItemText($hListView, DllStructGetData($tInfo, "Index"))
    ConsoleWrite("Ausgewähltes Item : " & $sCurSel & @CRLF)
    EndSwitch
    EndSwitch
    Return $__LISTVIEWCONSTANT_GUI_RUNDEFMSG
    EndFunc ;==>_WM_NOTIFY
    Func RGB2BGR($iColor)
    Return BitAND(BitShift(String(Binary($iColor)), 8), 0xFFFFFF)
    EndFunc ;==>RGB2BGR

    [/autoit]

    Läuft aber nur als x86 Code, weil AutoIt einige Bugs in den Strucs hat.

  • Danke Raupi, schade das es nicht unter x64 läuft.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Gute Idee, ich mach mal ein Ticket dazu auf :).

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.