Unschönes Problem mit GUI List

  • Nabend,

    ich habe ein unschönes Problemchen. Unzwar habe ich eine GUICtrlCreateList. Wenn ich dann auf ein Item klicke wird es ja markiert, dass ist ja so richtig wenn ich dann ins weiße feld klicke wo keine Items stehen, darunter, dann wird die Markierung wieder entfernt ... ok. Aber wenn ich dann wieder ins weiße Feld klicke, wird das selbe Item wieder markiert und das find ich nicht schön. Hab schon hin her probiert aber bekomme es nicht weg.

  • Hallo m-obi,

    kann dein Problem nicht nachvollziehen, bei mir wird immer ein Eintrag markiert. Poste doch das Skript oder Demo in dem es auftritt,

    Edit, Demo angehängt:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #Include <GuiListBox.au3>
    #include <ListboxConstants.au3>
    #include <File.au3>

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

    Global $szDrive,$szDir,$szFName,$szExt

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

    $hGUI = GUICreate("Flaggen", 300, 100)
    $hListe = GUICtrlCreateList("", 10, 10, 180, 80,$LBS_NOTIFY)
    $hNeu = GUICtrlCreateButton("...",200,10,30,25)
    $hVorschau = GUICtrlCreatePic(@ScriptDir & "\Flaggen\NA.jpg", 210, 40, 36, 24)
    GUISetState()

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    case $hNeu
    $sAlt = GUICtrlRead($hListe)
    $sPlus = FileOpenDialog("Land auswählen:",@ScriptDir & "\Flaggen","Bilder (*.jpg)",3,"",$hGUI)
    _PathSplit($sPlus,$szDrive,$szDir,$szFName,$szExt)
    ConsoleWrite($szFName & @CRLF)
    _GUICtrlListBox_InsertString($hListe,$szFName,0)
    Case $hListe
    GUICtrlSetImage($hVorschau, @ScriptDir & "\Flaggen\" & GUICtrlRead($hListe) & ".jpg")
    EndSwitch
    WEnd

    [/autoit]

    hierzu wird autoit.de/wcf/attachment/8209/ benötigt,

    mfg (Auto)Bert

  • Hier ist mal die Func.

    Spoiler anzeigen
    [autoit]

    Func _Benutzerverwaltung()
    GUISetState(@SW_DISABLE, $hGui)
    Opt("GUIOnEventMode", 0)
    Global $hBenutzerverwaltung = GUICreate("Benutzerverwaltung", 270, 177, -1, -1, $WS_SYSMENU, Default, $hGui)
    Local $hAdd = GUICtrlCreateButton("Hinzufügen", 10, 25, 80, 25)
    Local $hDel = GUICtrlCreateButton("Entfernen", 10, 65, 80, 25)
    GUICtrlSetState(-1, $GUI_DISABLE)
    Local $hList = GUICtrlCreateList("", 100, 11, 153, 100, BitOR($LBS_SORT, $WS_VSCROLL, $LBS_MULTIPLESEL))
    Local $hOk = GUICtrlCreateButton("OK", 92, 116, 80, 25, $BS_DEFPUSHBUTTON)
    GUISetState()
    Local $sAddUser, $iLastSelect, $iCountAllItem, $iCountItemUnchecked

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

    $aIni = IniReadSection($sPath & "\Settings.ini", "Benutzer")
    If @error Then
    GUISetState(@SW_DISABLE, $hBenutzerverwaltung)
    MsgBox(0, "Test", "Problem mit INI", 0, $hBenutzerverwaltung)
    GUISetState(@SW_ENABLE, $hBenutzerverwaltung)
    Opt("GUIOnEventMode", 1)
    GUISetState(@SW_ENABLE, $hGui)
    WinSetOnTop($hGui, "", 1)
    GUIDelete($hBenutzerverwaltung)
    WinActivate($hGui)
    WinSetOnTop($hGui, "", 0)
    Return 0
    EndIf

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

    For $i = 1 To $aIni[0][0]
    GUICtrlSetData($hList, $aIni[$i][0])
    Next

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

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE, $hOk
    Opt("GUIOnEventMode", 1)
    GUISetState(@SW_ENABLE, $hGui)
    WinSetOnTop($hGui, "", 1)
    GUIDelete($hBenutzerverwaltung)
    WinActivate($hGui)
    WinSetOnTop($hGui, "", 0)
    Return
    Case $hAdd
    $sAddUser = _AddUser()
    If IsString($sAddUser) Then
    $iCountAllItem = _GUICtrlListBox_GetCount($hList)
    If $iCountAllItem > 0 Then
    For $i = 0 To $iCountAllItem - 1
    _GUICtrlListBox_SetSel($hList, $i, False)
    Next
    EndIf
    GUICtrlSetState($hDel, $GUI_DISABLE)
    $iLastSelect = ""
    GUICtrlSetData($hList, $sAddUser)
    EndIf
    Case $hDel
    ConsoleWrite(@CRLF & _GUICtrlListBox_GetText($hList, $iLastSelect))
    IniDelete($sPath & "\Settings.ini", "Benutzer", _GUICtrlListBox_GetText($hList, $iLastSelect))
    _GUICtrlListBox_DeleteString($hList, $iLastSelect)
    GUICtrlSetState($hDel, $GUI_DISABLE)
    $iLastSelect = ""
    Case $hList
    _GUICtrlListBox_SetSel($hList, $iLastSelect, False)
    $iCountAllItem = _GUICtrlListBox_GetCount($hList)
    If $iCountAllItem > 0 Then
    For $i = 0 To $iCountAllItem - 1
    If _GUICtrlListBox_GetSel($hList, $i) Then
    GUICtrlSetState($hDel, $GUI_ENABLE)
    $iLastSelect = $i
    ExitLoop
    Else
    $iCountItemUnchecked += 1
    EndIf
    Next
    If $iCountItemUnchecked = $iCountAllItem Then
    GUICtrlSetState($hDel, $GUI_DISABLE)
    $iLastSelect = ""
    EndIf
    EndIf

    If GUICtrlRead($hList) = "Administrator" Then GUICtrlSetState($hDel, $GUI_DISABLE)
    $iCountItemUnchecked = 0
    EndSwitch
    WEnd
    EndFunc

    [/autoit]
  • Hallo m-obi,

    das liegt an dem Style $LBS_MULTIPLESEL. Da man dadurch ja mehrere auswählen kann, muss man sie auch wieder abwählen können, ohne diesen Style wird immer 1 neue ausgewählt.

    Mangels der Ini habe ich es mit meinem Demo getestet.

    mfg (Auto)Bert

  • Das weiß ich ja wofür der Style ist, hab mir ja auch den extra rausgesucht. Nur mein Problem ist, dass ich wenn ich ind weiße Feld klicke, das zuletzt markierte Item markiert bzw. demarkiert wird. Und ich will verhinder das er es wieder markiert.

  • Hat ich mir schon gedacht :(

    Oder vielleicht müsste man ne Message an Windows senden, das man irgendwie den Wert überschreibt, wo drin steht welches item zuletzt ausgewählt wurde, dann kann er es auch nicht mehr markieren.

    Solangsam wird das hier ein Dialog :D