1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. DasIch

Beiträge von DasIch

  • ListView "aufklappen"

    • DasIch
    • 15. Januar 2020 um 20:05

    Danke für die Hilfe!

    Kann ich GUICtrlSetResizing()auch für die komplette Anwendung übernehmen, damit ich das nicht bei jedem Ctrl einzeln machen muss?

    LG

  • ListView "aufklappen"

    • DasIch
    • 15. Januar 2020 um 19:10

    Hallo zusammen,

    ich habe eine ListView, die ich per Knopfdruck mit Daten fülle. Nun ist dieser Button mit "aufklappen" markiert und soll genau dieses auch machen.

    Drückt man drauf, soll sich die Mainform "erweitern" und untendrunter soll eine ListView stehen. Drückt man wieder drauf, das umgekehrte.

    Ist das irgendwie realisierbar?

    Sourcecode mit dem ich teste:

    C
    #include <GUIConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GuiListView.au3>
    
    $frmMain = GUICreate("Aufklappen", 400, 40) ;expand zu 400
    
    $cmdExpand = GUICtrlCreateButton("Aufklappen", 10, 10, 100, 25)
    
    $lstExpand = GUICtrlCreateListView("txt1|txt2|txt3|txt4", 10, 50, 380, 340)
    
    GUISetState(@SW_SHOW, $frmMain)
    
    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                Exit
    
            Case $cmdExpand
                _Expand()
        EndSwitch
    WEnd
    
    Func _Expand()
        _GUICtrlListView_DeleteAllItems($lstExpand)
    
        For $i = 0 To 14
            GUICtrlCreateListViewItem("txt1: " & $i & "|txt2: " & $i & "|txt3: " & $i & "|txt4: " & $i,$lstExpand)
        Next
    EndFunc
    Alles anzeigen

    Ich danke vorab für alle Antworten.

    LG,

    der Robert

  • Im Hintergrund prüfen, ob sich ein Dateiattribut geändert hat

    • DasIch
    • 8. Januar 2020 um 20:09

    Oha.. Zehn mal kontrollgelesen und trotzdem nicht gesehen. dieses "Ctrl" kriegt mich jedes mal :rtfm:

    Danke!!!

  • Im Hintergrund prüfen, ob sich ein Dateiattribut geändert hat

    • DasIch
    • 8. Januar 2020 um 19:53

    Hallo,

    Das Ich nochmal :P

    Ganz so einfach gehts wohl dann doch nicht.. Ich habe seit gestern versucht, per GUISetOnEvent() einen Buttonklick abzufangen. Allerdings tut sich rein gar nichts :(

    Könnte jemand bitte einmal drüberschauen wo ich den Fehler habe?

    C
    #include <MsgBoxConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GUIConstants.au3>
    
    Opt("GUIOnEventMode", 1)
    
    
    $frmMain = GUICreate("D2 Runcounter", 300, 50)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Event")
    
    $cmdReset = GUICtrlCreateButton("Reset", 230, 10, 50, 25)
    GUISetOnEvent(-1, "_Event")
    
    $lblCountText = GUICtrlCreateLabel("Runs:", 10, 15, 50, 25)
    GUICtrlSetFont(-1, 12, 700)
    
    $lblCounter = GUICtrlCreateLabel(FileRead(@ScriptDir & "\\Runs.txt"), 62, 15, 150, 25)
    GUICtrlSetFont(-1, 12, 700)
    
    GUISetState(@SW_SHOW, $frmMain)
    
    Global $sTimeStamp = @YEAR & @MON & @MDAY & @HOUR & @MIN & @SEC
    Global $sFileTimeInit = FileGetTime("D:\\Diablo II\\D2\\Save\\_LOD_SharedStashSave.sss", 0, 1)
    
    While 1
    
        Sleep(150)
        _Counter()
    
    WEnd
    
    Func _Counter()
        $sFileTimeCurr = FileGetTime("D:\\Diablo II\\D2\\Save\\_LOD_SharedStashSave.sss", 0, 1)
        IF $sFileTimeInit < $sFileTimeCurr Then
            $sFileTimeInit = $sFileTimeCurr
            GUICtrlSetData($lblCounter, GUICtrlRead($lblCounter)+1)
        EndIf
    EndFunc
    
    Func _Close()
        FileDelete(@ScriptDir & "\\Runs.txt")
        FileWrite(@ScriptDir & "\\Runs.txt", GUICtrlRead($lblCounter))
        Exit
    EndFunc
    
    Func _Reset()
        MsgBox(0, "", "TEST")
        GUICtrlSetData($lblCounter, "0")
    EndFunc
    
    Func _Event()
        Switch @GUI_CtrlId
            Case $GUI_EVENT_CLOSE
                _Close()
            Case $cmdReset
                _Reset()
        EndSwitch
    EndFunc
    Alles anzeigen

    Dankesehr!

  • Ini Read geht teilweise nicht

    • DasIch
    • 7. Januar 2020 um 11:02

    Bei der IP müssten es glaube ich vier slashes sein. Glaube aber nicht, dass es daran liegen wird. Der Einwand von AutoIter klingt am logischsten, wenn der Code den du uns gepostet hast komplett ist, dann fehlt einfach der Aufruf der Funktion.

  • Ini Read geht teilweise nicht

    • DasIch
    • 7. Januar 2020 um 10:54

    Probier mal statt

    Code
    $config = "\\192.168.9.170\Export\office\buero\XXXXX\vordrucke\programme\Config\Meeting.ini"

    das hier:

    Code
    $config = "\\\\192.168.9.170\\Export\\office\\buero\\XXXXX\\vordrucke\\programme\\Config\\Meeting.ini"
  • Im Hintergrund prüfen, ob sich ein Dateiattribut geändert hat

    • DasIch
    • 7. Januar 2020 um 10:48
    Zitat von alpines

    Verwende den OnEventModus für deine GUI, dann ist die Nachrichtenschleife praktisch nicht mehr existent und entkoppelt von deinem Sleep für die Prüfung.

    Wenn du das ganze auf die Spitze treiben willst kannst du auch sowas wie SHNotify verwenden, womit Windows dann eine Eventfunktion von dir aufruft, wenn an einer Datei innerhalb eines Ordners etwas verändert wurde.

    Oh Gott, ich bin so dumm. Danke dir, hat funktioniert :)

  • Ini Read geht teilweise nicht

    • DasIch
    • 7. Januar 2020 um 10:43
    Zitat von alpines

    Mist, da bist du mir zuvor gekommen :P

  • Im Hintergrund prüfen, ob sich ein Dateiattribut geändert hat

    • DasIch
    • 7. Januar 2020 um 10:39

    Hallo zusammen,

    eines vorweg zur besseren Vorstellung: Ich spiele Diablo 2 und mache gerade sog. Speedruns. Dabei macht man in schnellen Durchgängen immer wieder das selbe und zählt die Anzahl der Runs mit.

    Um das nicht alles selbst machen zu müssen, habe ich mir ein Script gebastelt, welches einfach nur schaut, wann die Speicherzeit des Charakters sich geändert hat.

    Das funktioniert soweit auch wunderbar. Allerdings ist das Problem, dass er beim schließen des Fensters ewig nicht reagiert weil ich im "While" ein "Sleep(150)" eingebaut habe mit anschließender Prüfung des last changed Attributes.

    Hier der Code:

    C
    #include <MsgBoxConstants.au3>
    #include <GUIConstants.au3>
    
    $frmMain = GUICreate("D2 Runcounter", 300, 50)
    
    $lblCountText = GUICtrlCreateLabel("Runs:", 10, 10, 100, 25)
    $lblCounter = GUICtrlCreateLabel("0", 120, 10, 100, 25)
    
    
    GUISetState(@SW_SHOW, $frmMain)
    
    Global $sTimeStamp = @YEAR & @MON & @MDAY & @HOUR & @MIN & @SEC
    Global $sFileTimeInit = FileGetTime("D:\\Diablo II\\D2\\Save\\_LOD_SharedStashSave.sss", 0, 1)
    
    While 1
    
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                _Save()
                ExitLoop
    
        EndSwitch
    
        Sleep(150)
        _Counter()
    
    WEnd
    
    Func _Counter()
        $sFileTimeCurr = FileGetTime("D:\\Diablo II\\D2\\Save\\_LOD_SharedStashSave.sss", 0, 1)
        IF $sFileTimeInit < $sFileTimeCurr Then
            $sFileTimeInit = $sFileTimeCurr
            GUICtrlSetData($lblCounter, GUICtrlRead($lblCounter)+1)
        EndIf
    EndFunc
    
    Func _Save()
        FileDelete(@ScriptDir & "\\Runs.txt")
        FileWrite(@ScriptDir & "\\Runs.txt", GUICtrlRead($lblCounter))
    EndFunc
    Alles anzeigen

    Wie schaffe ich es, dass das Script im Hintergrund _Counter() ausführt ohne dabei das GUI zu freezen?

    Vielen Dank für alle Antworten und LG,

    der Robert

    P.S.: Das hier ist kein Bot, sondern soll einfach nur zählen :P

  • Sehr schnell in GUI schreiben

    • DasIch
    • 27. November 2018 um 10:06

    Der Code von Oscar ist schon Hochsprache, will ich meinen. Ich lese ihn mir auch gerade durch und ziehe meinen Hut. Hättest nur ein bisschen kommentieren können, lieber Oscar :P

  • Den Background einzelner ListView Elemente ändern

    • DasIch
    • 23. November 2018 um 09:57
    Zitat von Bitnugger

    Evtl. änderst du noch den Titel dieses Threads...

    Falsch: Den Background einzelner ListBOX Elemente ändern

    Richtig: Den Background einzelner ListView Elemente ändern

    Passender wäre: Hintergrundfarbe einzelner ListView-Items/SubItems ändern

    Ich hab die Variante zwei genommen, weil ich als nicht so versierter Scripter danach in Google gesucht habe und daher glaube, dass es so eher gefunden wird, wenn es gebraucht wird :)

  • Den Background einzelner ListView Elemente ändern

    • DasIch
    • 22. November 2018 um 20:10
    Zitat von Bitnugger

    Habe oben im Script noch ein paar Fehler korrigiert...

    Ja... und bei ListViewColorsFonts_SetItemColors() eine Spalte (SubItem) angeben, dass dann auch existiert!

    Stimmt.

    Nichtsdestotrotz geht es jetzt und genau dafür ist das Forum da.

    Danke dir vielmals für deine Geduld und Hilfe!

  • Den Background einzelner ListView Elemente ändern

    • DasIch
    • 22. November 2018 um 20:02

    Moment mal.. Quasi alles was ich hätte machen müssen wäre am Anfang eine Überschrift zu setzen?!

    Wow, man sieht manchmal den Wald vor lauter Bäumen nicht :Face:

    Aber deine Art Fehler auszugeben gefällt mir. Das werde ich mal so frech wie ich bin künftig übernehmen.

    DANKE DANKE DANKE! :klatschen:

    Nachtrag: Das Problem mit der Erkennung was fehlt gibt es im Originalscript nicht, daher lasse ich das mal so stehen.

  • Den Background einzelner ListView Elemente ändern

    • DasIch
    • 22. November 2018 um 19:05

    Hallo nochmal,

    der Errorcode kam von deiner Funktion. wie oben ja auch festgestellt, kann er die Liste wohl nicht finden.

    Ich habe den Code mal separiert und lauffähig hier reingeschrieben. Zwar mit anderen Quelldaten (Datenschutz und so), aber das Fehlerbild ist "zum Glück" das gleiche.

    Spoiler anzeigen
    C
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GUIListBox.au3>
    #include <StaticConstants.au3>
    #include <TabConstants.au3>
    #include <WindowsConstants.au3>
    #include <Guiedit.au3>
    #include <file.au3>
    #include <ProgressConstants.au3>
    #include <GuiListView.au3>
    #include <ListViewColorsFonts.au3>
    
    $frmMain = GUICreate("Active Directory Verwaltung", 791, 598, 191, 127)
    
    #Region Vergleich
    $Grp_lblLeftUser = GUICtrlCreateLabel("Zeige Gruppen von: ", 16, 87, 361, 18) ;Label User links
    GUICtrlSetFont(-1, 9, 500, 0, "Arial")
    $Grp_txtLeftUser = GUICtrlCreateInput("UserLinks", 16, 104, 121, 22) ;Textfeld User links
    GUICtrlSetFont(-1, 9, 500, 0, "Arial")
    $Grp_cmdLeftUserOk = GUICtrlCreateButton("OK", 144, 103, 75, 25);OK User links
    GUICtrlSetFont(-1, 9, 500, 0, "Arial")
    
    $Grp_lblGroupsLeftUser = GUICtrlCreateLabel("Gruppen", 16, 144, 361, 18)
    GUICtrlSetFont(-1, 9, 500, 0, "Arial")
    $Grp_lstGroupsLeftUser = GUICtrlCreateListView("", 16, 160, 361, 410, $LVS_SHOWSELALWAYS);  GUICtrlCreateList("", 16, 160, 361, 410, BitOR($gui_ss_default_list, $ws_hscroll, $lbs_extendedsel)) ;Liste User Links
    GUICtrlSetFont(-1, 9, 500, 0, "Arial")
    
    $Grp_HiddenLeft = GUICtrlCreateLabel("0", 230, 103, 30, 18)
    ;~ GUICtrlSetState(-1, $GUI_HIDE)
    
    $Grp_lblRightUser = GUICtrlCreateLabel("Zeige Gruppen von: ", 400, 87, 361, 18) ;Label User rechts
    GUICtrlSetFont(-1, 9, 500, 0, "Arial")
    $Grp_txtRightUser = GUICtrlCreateInput("UserRechts", 400, 104, 121, 22) ;Textfeld User rechts
    GUICtrlSetFont(-1, 9, 500, 0, "Arial")
    $Grp_cmdRightUserOk = GUICtrlCreateButton("OK", 528, 103, 75, 25);OK User rechts
    GUICtrlSetFont(-1, 9, 500, 0, "Arial")
    
    $Grp_lblGroupsRightUser = GUICtrlCreateLabel("Gruppen", 400, 144, 361, 18)
    GUICtrlSetFont(-1, 9, 500, 0, "Arial")
    $Grp_lstGroupsRightUser = GUICtrlCreateListView("", 400, 160, 361, 410, $LVS_SHOWSELALWAYS) ;Liste User rechts
    GUICtrlSetFont(-1, 9, 500, 0, "Arial")
    
    $Grp_HiddenRight = GUICtrlCreateLabel("0", 614, 103, 30, 18)
    ;~ GUICtrlSetState(-1, $GUI_HIDE)
    #EndRegion
    
    GUISetState(@SW_SHOW, $frmMain)
    
    While 1
        $nMsg = GUIGetMsg(1)
        Switch $nMsg[0]
            Case $GUI_EVENT_CLOSE
                Exit
    
            Case $Grp_cmdLeftUserOk
                _Suche(1) ;Linker Button
    
            Case $Grp_cmdRightUserOk
                _Suche(2) ;Rechter Button
    
        EndSwitch
    WEnd
    
    
    Func _Suche($iWo)
        Switch $iWo
            ;Links
            Case 1
                    _GUICtrlListView_DeleteAllItems($Grp_lstGroupsLeftUser)
                    Local $sSuche = GUICtrlRead($Grp_txtLeftUser)
                    If $sSuche = "" Then
                        MsgBox(0, "", "Bitte einen User auswählen!")
                        GUICtrlSetData($Grp_HiddenLeft, 0)
                    Else
                        GUICtrlSetData($Grp_lblGroupsLeftUser, "Gruppen von " & $sSuche)
                        local $aGroupSearch[7] = ["7","Gruppe1","Gruppe2","Gruppe3","Gruppe4","Gruppe5","Gruppe6"]
    
                        If UBound($aGroupSearch) - 1 < 1 Then
                            MsgBox(0, "", "Keine Gruppen gefunden. Bitte den Usernamen prüfen!")
                            GUICtrlSetData($Grp_HiddenLeft, 0)
                        Else
                            local $hWo[UBound($aGroupSearch)]
                            For $i = 1 To UBound($aGroupSearch) - 1
                                $hWo[$i] = GUICtrlCreateListViewItem($aGroupSearch[$i], $Grp_lstGroupsLeftUser)
                            Next
                                _Compare(0, $hWo)
                        EndIf
                    EndIf
    
            ;Rechts
            Case 2
                _GUICtrlListView_DeleteAllItems($Grp_lstGroupsRightUser)
                Local $sSuche = GUICtrlRead($Grp_txtRightUser)
                If $sSuche = "" Then
                    MsgBox(0, "", "Bitte einen User auswählen!")
                    GUICtrlSetData($Grp_HiddenRight, 0)
                Else
                    GUICtrlSetData($Grp_lblGroupsRightUser, "Gruppen von " & $sSuche)
                    local $aGroupSearch[6] = ["6","Gruppe1","Gruppe2","Gruppe3","Gruppe5","Gruppe6"]
    
                    If UBound($aGroupSearch) - 1 < 1 Then
                        MsgBox(0, "", "Keine Gruppen gefunden. Bitte den Usernamen prüfen!")
                        GUICtrlSetData($Grp_HiddenRight, 0)
                    Else
                        local $hWo[UBound($aGroupSearch)]
                        For $i = 0 To UBound($aGroupSearch) - 1
                            $hWo[$i] = GUICtrlCreateListViewItem($aGroupSearch[$i], $Grp_lstGroupsRightUser)
                        Next
                        _Compare(1, $hWo)
                    EndIf
                EndIf
    
        EndSwitch
    EndFunc ;=> Suche()
    
    Func _Compare($iWo, $hWo)
        local $sListeLinks, $sListeRechts
        local $aListeLinks, $aListeRechts
    
        ;Wenn links gefüllt ist, setze HiddenLeft Label
        If $iWo = 0 Then
            If _GUICtrlListView_GetItemCount($Grp_lstGroupsLeftUser) > 0 Then
                GUICtrlSetData($Grp_HiddenLeft, 1)
            Else
                GUICtrlSetData($Grp_HiddenLeft, 0)
            EndIf
        EndIf
    
        ;Wenn rechts gefüllt ist, setze HiddenRight Label
        If $iWo = 1 Then
            If _GUICtrlListView_GetItemCount($Grp_lstGroupsRightUser) > 0 Then
                GUICtrlSetData($Grp_HiddenRight, 1)
            Else
                GUICtrlSetData($Grp_HiddenRight, 0)
            EndIf
        EndIf
    
        ;Wenn die Liste links UND die Liste rechts gefüllt ist, führe folgendes aus
        If GUICtrlRead($Grp_HiddenLeft) = 1 AND GUICtrlRead($Grp_HiddenRight) = 1 Then
    
            ListViewColorsFonts_Init($Grp_lstGroupsLeftUser, 7) ; $fColorsFonts = 7, ( $iAddRows = 100, $bNative = False )
            ListViewColorsFonts_Init($Grp_lstGroupsRightUser, 7) ; $fColorsFonts = 7, ( $iAddRows = 100, $bNative = False )
    
            ;Linkes Array
            For $i = 0 to _GUICtrlListView_GetItemCount($Grp_lstGroupsLeftUser) - 1
                $sListeLinks = $sListeLinks & _GUICtrlListView_GetItemText($Grp_lstGroupsLeftUser, $i) & ";"
            Next
            $aListeLinks = StringSplit($sListeLinks, ";")
            _ArrayDelete($aListeLinks, UBound($aListeLinks) - 1)
    
            ;Rechtes Array
            For $i = 0 to _GUICtrlListView_GetItemCount($Grp_lstGroupsRightUser) - 1
                $sListeRechts = $sListeRechts & _GUICtrlListView_GetItemText($Grp_lstGroupsRightUser, $i) & ";"
            Next
            $aListeRechts = StringSplit($sListeRechts, ";")
            _ArrayDelete($aListeRechts, UBound($aListeRechts) - 1)
    
            ;Links nach fehlenden Gruppen suchen
            For $i = 1 To UBound($aListeLinks) - 1
                If _ArraySearch($aListeRechts, $aListeLinks[$i]) < 0 Then
    ;~                 $listview = ListViewColorsFonts_SetItemColors($Grp_lstGroupsLeftUser, $i, -1, "0xFF0000") ; Red back color for entire item
    ;~                 MsgBox(0, $i, "Links: " & $aListeLinks[$i])
                    local $listview = ListViewColorsFonts_SetItemColors($Grp_lstGroupsLeftUser, $i, 3, 0xFF0000) ; Red back color only for subitem 3
                    
                    ;Error Msg ausgeben
                    If $listview < 0 Then ConsoleWrite("Error " & @error & @CRLF)
                EndIf
            Next
            ListViewColorsFonts_Redraw($Grp_lstGroupsLeftUser)
    
        EndIf
    EndFunc ;=> Compare()
    Alles anzeigen

    Ich danke dir vielmals, dass du dir so viel Mühe gibst mir zu helfen, das ist nicht selbstverständlich!

    LG,

    der Robert

  • Den Background einzelner ListView Elemente ändern

    • DasIch
    • 22. November 2018 um 16:54

    Hallo nochmal und lieben Dank erneut für deine hilfreiche Antwort.

    Leider behebt es das Problem nicht, da nun seltsamerweise keine Einträge in der Listview erstellt werden. Es läuft kurz durch als würde es die Liste befüllen, diese bleibt jedoch leer. Dass der Durchlauf dennoch abgeschlossen wurde, sehe ich wenn ich die MsgBox anzeigen lasse. Zudem werden auch die HiddenLabels befüllt, die ich zur Kontrolle mit eingebaut habe.

    Ich kriege auch noch immer den Error 2, seltsamerweise

    Hier nochmal der Code:

    Spoiler anzeigen
    Code: GUI Erstellung
    $Grp_lblLeftUser = GUICtrlCreateLabel("Zeige Gruppen von: ", 16, 87, 361, 18) ;Label User links
    GUICtrlSetFont(-1, 9, 500, 0, "Arial")
    $Grp_txtLeftUser = GUICtrlCreateInput("user A", 16, 104, 121, 22) ;Textfeld User links
    GUICtrlSetFont(-1, 9, 500, 0, "Arial")
    $Grp_cmdLeftUserOk = GUICtrlCreateButton("OK", 144, 103, 75, 25);OK User links
    GUICtrlSetFont(-1, 9, 500, 0, "Arial")
    
    $Grp_lblGroupsLeftUser = GUICtrlCreateLabel("Gruppen", 16, 144, 361, 18)
    GUICtrlSetFont(-1, 9, 500, 0, "Arial")
    $Grp_lstGroupsLeftUser = GUICtrlCreateListView("", 16, 160, 361, 410);, $LVS_SHOWSELALWAYS);  BitOR($gui_ss_default_list, $ws_hscroll, $lbs_extendedsel)) ;Liste User Links
    GUICtrlSetFont(-1, 9, 500, 0, "Arial")
    
    $Grp_HiddenLeft = GUICtrlCreateLabel("0", 230, 103, 30, 18)
    ;~ GUICtrlSetState(-1, $GUI_HIDE)
    
    $Grp_lblRightUser = GUICtrlCreateLabel("Zeige Gruppen von: ", 400, 87, 361, 18) ;Label User rechts
    GUICtrlSetFont(-1, 9, 500, 0, "Arial")
    $Grp_txtRightUser = GUICtrlCreateInput("user B", 400, 104, 121, 22) ;Textfeld User rechts
    GUICtrlSetFont(-1, 9, 500, 0, "Arial")
    $Grp_cmdRightUserOk = GUICtrlCreateButton("OK", 528, 103, 75, 25);OK User rechts
    GUICtrlSetFont(-1, 9, 500, 0, "Arial")
    
    $Grp_lblGroupsRightUser = GUICtrlCreateLabel("Gruppen", 400, 144, 361, 18)
    GUICtrlSetFont(-1, 9, 500, 0, "Arial")
    $Grp_lstGroupsRightUser = GUICtrlCreateListView("", 400, 160, 361, 410);, $LVS_SHOWSELALWAYS) ;Liste User Rechts
    GUICtrlSetFont(-1, 9, 500, 0, "Arial")
    
    $Grp_HiddenRight = GUICtrlCreateLabel("0", 614, 103, 30, 18)
    ;~ GUICtrlSetState(-1, $GUI_HIDE)
    Alles anzeigen
    Code: Func _Suche()
    _GUICtrlListView_DeleteAllItems($Grp_lstGroupsLeftUser)
    Local $sSuche = GUICtrlRead($Grp_txtLeftUser)
        If $sSuche = "" Then
            MsgBox(0, "", "Bitte einen User auswählen!")
            GUICtrlSetData($Grp_HiddenLeft, 0)
        Else
            GUICtrlSetData($Grp_lblGroupsLeftUser, "Gruppen von " & $sSuche)
            $aGroupSearch = _AD_GetUserGroups($sSuche)
    
            If UBound($aGroupSearch) - 1 < 1 Then
                MsgBox(0, "", "Keine Gruppen gefunden. Bitte den Usernamen prüfen!")
                GUICtrlSetData($Grp_HiddenLeft, 0)
            Else
                local $hWo[UBound($aGroupSearch)]
                For $i = 1 To UBound($aGroupSearch) - 1
                    $hWo[$i] = GUICtrlCreateListViewItem(_AD_FQDNToSamAccountName($aGroupSearch[$i]), $Grp_lstGroupsLeftUser)
                Next
                _Compare(0, $hWo)
            EndIf
       EndIf
    Alles anzeigen
    Code: Func _Compare($iWo, $hWo)
        local $sListeLinks, $sListeRechts
        local $aListeLinks, $aListeRechts
    
        ;Wenn links gefüllt ist, setze HiddenLeft Label
        If $iWo = 0 Then
            If _GUICtrlListView_GetItemCount($Grp_lstGroupsLeftUser) > 0 Then
                GUICtrlSetData($Grp_HiddenLeft, 1)
            Else
                GUICtrlSetData($Grp_HiddenLeft, 0)
            EndIf
        EndIf
    
        ;Wenn rechts gefüllt ist, setze HiddenRight Label
        If $iWo = 1 Then
            If _GUICtrlListView_GetItemCount($Grp_lstGroupsRightUser) > 0 Then
                GUICtrlSetData($Grp_HiddenRight, 1)
            Else
                GUICtrlSetData($Grp_HiddenRight, 0)
            EndIf
        EndIf
        ;Wenn die Liste links UND die Liste rechts gefüllt ist, führe folgendes aus
        If GUICtrlRead($Grp_HiddenLeft) = 1 AND GUICtrlRead($Grp_HiddenRight) = 1 Then
            ListViewColorsFonts_Init($Grp_lstGroupsLeftUser, 7) ; $fColorsFonts = 7, ( $iAddRows = 100, $bNative = False )
            ListViewColorsFonts_Init($Grp_lstGroupsRightUser, 7) ; $fColorsFonts = 7, ( $iAddRows = 100, $bNative = False )
    
            ;Linkes Array
            For $i = 0 to _GUICtrlListView_GetItemCount($Grp_lstGroupsLeftUser) - 1
                $sListeLinks = $sListeLinks & _GUICtrlListView_GetItemText($Grp_lstGroupsLeftUser, $i) & ";"
            Next
            $aListeLinks = StringSplit($sListeLinks, ";")
            _ArrayDelete($aListeLinks, UBound($aListeLinks) - 1)
    
            ;Rechtes Array
            For $i = 0 to _GUICtrlListView_GetItemCount($Grp_lstGroupsRightUser) - 1
                $sListeRechts = $sListeRechts & _GUICtrlListView_GetItemText($Grp_lstGroupsRightUser, $i) & ";"
            Next
            $aListeRechts = StringSplit($sListeRechts, ";")
            _ArrayDelete($aListeRechts, UBound($aListeRechts) - 1)
    
            ;Links nach fehlenden Gruppen suchen
            For $i = 1 To UBound($aListeLinks) - 1
                If _ArraySearch($aListeRechts, $aListeLinks[$i]) < 0 Then
    ;~                 $listview = ListViewColorsFonts_SetItemColors($Grp_lstGroupsLeftUser, $i, -1, "0xFF0000") ; Red back color for entire item
    ;~                 MsgBox(0, $i, "Links: " & $aListeLinks[$i])
                    local $listview = ListViewColorsFonts_SetItemColors($Grp_lstGroupsLeftUser, $i, 3, 0xFF0000) ; Red back color only for subitem 3
                    If $listview < 0 Then ConsoleWrite("Error " & @error & @CRLF)
                EndIf
            Next
            ListViewColorsFonts_Redraw($Grp_lstGroupsLeftUser)
    Alles anzeigen
  • Den Background einzelner ListView Elemente ändern

    • DasIch
    • 22. November 2018 um 09:27

    Grüß' dich bitnugger,

    vielen Dank für deine super Erklärung! Leider funktioniert es jedoch nicht :( Error ist 2, aber warum, weiß ich leider nicht. Der Farbcode kann ja schlecht falsch sein. Hier der Code:

    Spoiler anzeigen
    Code
    ;Wenn die Liste links UND die Liste rechts gefüllt ist, führe folgendes aus
        If GUICtrlRead($Grp_HiddenLeft) = 1 AND GUICtrlRead($Grp_HiddenRight) = 1 Then
            ListViewColorsFonts_Init($Grp_lstGroupsLeftUser, 7) ; $fColorsFonts = 7, ( $iAddRows = 100, $bNative = False )
            ListViewColorsFonts_Init($Grp_lstGroupsRightUser, 7) ; $fColorsFonts = 7, ( $iAddRows = 100, $bNative = False )
    
            ;Linkes Array
            For $i = 0 to _GUICtrlListView_GetItemCount($Grp_lstGroupsLeftUser) - 1
                $sListeLinks = $sListeLinks & _GUICtrlListView_GetItemText($Grp_lstGroupsLeftUser, $i) & ";"
            Next
            $aListeLinks = StringSplit($sListeLinks, ";")
            _ArrayDelete($aListeLinks, UBound($aListeLinks) - 1)
    
            ;Rechtes Array
            For $i = 0 to _GUICtrlListView_GetItemCount($Grp_lstGroupsRightUser) - 1
                $sListeRechts = $sListeRechts & _GUICtrlListView_GetItemText($Grp_lstGroupsRightUser, $i) & ";"
            Next
            $aListeRechts = StringSplit($sListeRechts, ";")
            _ArrayDelete($aListeRechts, UBound($aListeRechts) - 1)
    
            ;Links nach fehlenden Gruppen suchen
            For $i = 1 To UBound($aListeLinks) - 1
                If _ArraySearch($aListeRechts, $aListeLinks[$i]) < 0 Then
    ;~                 $listview = ListViewColorsFonts_SetItemColors($Grp_lstGroupsLeftUser, $i, -1, "0xFF0000") ; Red back color for entire item
    ;~                 MsgBox(0, $i, "Links: " & $aListeLinks[$i])
                    $listview = ListViewColorsFonts_SetItemColors($Grp_lstGroupsLeftUser, $i, 3, 0xFF0000) ; Red back color only for subitem 3
                    If $listview < 0 Then ConsoleWrite("Error " & @error & @CRLF)
                EndIf
            Next
            ListViewColorsFonts_Redraw($Grp_lstGroupsLeftUser)
    
        EndIf
    Alles anzeigen

    Hast du eine Idee?

    LG,

    der Robert

    P.S.: Entschuldige die verspätete Antwort, aber ich bin nur sporadisch zuhause am Rechner :)

    Nachtrag:

    Hier noch wie $Grp_lstGroupsLeftUser erstellt wird für den Fall dass irgendein Parameter nicht unterstützt wird von deiner UDF.

    Code
    $Grp_lstGroupsLeftUser = GUICtrlCreateListView("", 16, 160, 361, 410, BitOR($gui_ss_default_list, $ws_hscroll, $lbs_extendedsel))
  • Den Background einzelner ListView Elemente ändern

    • DasIch
    • 21. November 2018 um 17:02

    Ich verstehe leider kein Wort von dem was dort steht. Ich will einfach nur ausgewählte Zellen umfärben. Brauche ich da wirklich eine komplette UDF dafür?

    Sowas wie _GUICtrlListViewItem_SetBKColor($listview[$index], $color).

    Das Problem ist, dass die ListViewItems alle dynamisch erzeugt werden. Wie kann ich auf einzelne Handles dieser items zugreifen?

    Sie werden so erzeugt :

    Spoiler anzeigen
    Code
    local $hWo[UBound($aGroupSearch)]
    For $i = 1 To UBound($aGroupSearch) - 1
        $hWo[$i] = GUICtrlCreateListViewItem(_AD_FQDNToSamAccountName($aGroupSearch[$i]), $Grp_lstGroupsLeftUser)
    Next
    _Compare(0, $hWo)

    Dann sollen einzelne Zellen, nachdem eine Prüfung ob sie in der anderen ListView fehlen, gefärbt werden:

    Code
    For $i = 1 To UBound($aListeLinks) - 1
        If _ArraySearch($aListeRechts, $aListeLinks[$i]) < 0 Then
            _GUICtrlListView_SetBkColor($hWo[$i], "red")
        EndIf
    Next

    Die UDF die du verlinkt hast, ist zwar sehr gut und stark, aber doch "etwas" zu umständlich einzubauen. Oder ich weiß einfach nur nicht, wie.

  • Den Background einzelner ListView Elemente ändern

    • DasIch
    • 21. November 2018 um 15:46

    Wenn es sonst keine Möglichkeit gibt, einzelnen Zellen zu färben, bleibt mir ohnehin nichts anderes übrig als auf Listview zu wechseln. Nur wie kann ich in der ListView einzelne Einträge färben wenn diese schon in der Liste vorhanden sind?

    Geht das überhaupt?

  • Den Background einzelner ListView Elemente ändern

    • DasIch
    • 21. November 2018 um 14:54

    Ich weiß leider nicht mehr, warum es keine Alternative war, aber ich hatte listbox seinerzeit (vor 2-3 Jahren als das ganze Programm geschrieben wurde) nehmen müssen, weil irgendwas mit Listview nicht ging.

    War es evtl das Kontextmenü, das sich mit rechtsklick öffnen lassen können soll? Ich weiß es nicht mehr..

    Hier mal die ganze Funktion. Die Listbox wird in einer anderen Funktion mit Einträgen befüllt.

    Spoiler anzeigen
    Code
    Func _Compare($iWo)
        local $sListeLinks, $sListeRechts
        local $aListeLinks, $aListeRechts
        
        ;Wenn links gefüllt ist, setze HiddenLeft Label
        If $iWo = 0 Then
            If _GUICtrlListBox_GetCount($Grp_lstGroupsLeftUser) > 0 Then
                GUICtrlSetData($Grp_HiddenLeft, 1)
            Else
                GUICtrlSetData($Grp_HiddenLeft, 0)
            EndIf
        EndIf
    
        ;Wenn rechts gefüllt ist, setze HiddenRight Label
        If $iWo = 1 Then
            If _GUICtrlListBox_GetCount($Grp_lstGroupsRightUser) > 0 Then
                GUICtrlSetData($Grp_HiddenRight, 1)
            Else
                GUICtrlSetData($Grp_HiddenRight, 0)
            EndIf
        EndIf
    
        ;Wenn die Liste links UND die Liste rechts gefüllt ist, führe folgendes aus
        If GUICtrlRead($Grp_HiddenLeft) = 1 AND GUICtrlRead($Grp_HiddenRight) = 1 Then
            ;Linkes Array
            For $i = 0 to _GUICtrlListBox_GetCount($Grp_lstGroupsLeftUser) - 1
                $sListeLinks = $sListeLinks & _GUICtrlListBox_GetText($Grp_lstGroupsLeftUser, $i) & ";"
            Next
            $aListeLinks = StringSplit($sListeLinks, ";")
            _ArrayDelete($aListeLinks, UBound($aListeLinks) - 1)
    
            ;Rechtes Array
            For $i = 0 to _GUICtrlListBox_GetCount($Grp_lstGroupsRightUser) - 1
                $sListeRechts = $sListeRechts & _GUICtrlListBox_GetText($Grp_lstGroupsRightUser, $i) & ";"
            Next
            $aListeRechts = StringSplit($sListeRechts, ";")
            _ArrayDelete($aListeRechts, UBound($aListeRechts) - 1)
    
            ;Links nach fehlenden Gruppen suchen
            For $i = UBound($aListeLinks) - 1 To 1 Step - 1
                If _ArraySearch($aListeRechts, $aListeLinks[$i]) < 0 Then
                    GUICtrlSetBkColor(_GUICtrlListBox_SetCurSel($aListeLinks, $i), "0x663366")
                EndIf
            Next
    
        EndIf
    EndFunc
    Alles anzeigen
  • Den Background einzelner ListView Elemente ändern

    • DasIch
    • 21. November 2018 um 13:57

    Hallo zusammen,

    ich bin gerade dabei ein Skript zu schreiben, welches zwei Listboxen miteinander vergleicht und ausschließlich die Einträge, die im jeweils anderen fehlen farblich hervorheben sollen. Allerdings kann ich keinen Weg finden, dies umzusetzen und das Internet hilft mir auch nicht weiter, da scheinbar jeder Listview statt Listbox verwendet. Listview ist allerdings keine Alternative.

    Hier ein Snippet zu dem Problem:

    Code
    For $i = UBound($aListeLinks) - 1 To 1 Step - 1
        If _ArraySearch($aListeRechts, $aListeLinks[$i]) < 0 Then
            GUICtrlSetBkColor(_GUICtrlListBox_SetCurSel($aListeLinks, $i), "0x663366")
        EndIf
    Next

    Ich habe mehrere Wege versucht.. So wie hier oben, dann mit selectrange und selectstring.

    Die Farbe ist einfach irgendeine Farbe, die wird noch geändert :)

    Ich hoffe, es findet sich jemand, der mir helfen kann.

    Vielen Dank und LG,

    der Robert

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™